Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/CallTips.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 477508efe4ab |
| children | 93eb15779050 |
| rev | line source |
|---|---|
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
1 """CallTips.py - An IDLE Extension to Jog Your Memory |
| 13975 | 2 |
| 26623 | 3 Call Tips are floating windows which display function, class, and method |
| 4 parameter and docstring information when you type an opening parenthesis, and | |
| 5 which disappear when you type a closing parenthesis. | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
6 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
7 """ |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
8 import re |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
9 import sys |
| 13975 | 10 import types |
| 11 | |
|
60144
eab361617f6a
#7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
55049
diff
changeset
|
12 from idlelib import CallTipWindow |
|
eab361617f6a
#7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
55049
diff
changeset
|
13 from idlelib.HyperParser import HyperParser |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
14 |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
15 import __main__ |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
16 |
| 13975 | 17 class CallTips: |
| 18 | |
| 19 menudefs = [ | |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
20 ('edit', [ |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
21 ("Show call tip", "<<force-open-calltip>>"), |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
22 ]) |
| 13975 | 23 ] |
| 24 | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
25 def __init__(self, editwin=None): |
|
31966
204b7bcead4c
Testing for None should be done with 'is'
Raymond Hettinger <python@rcn.com>
parents:
29983
diff
changeset
|
26 if editwin is None: # subprocess and test |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
27 self.editwin = None |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
28 return |
| 13975 | 29 self.editwin = editwin |
| 30 self.text = editwin.text | |
| 31 self.calltip = None | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
32 self._make_calltip_window = self._make_tk_calltip_window |
| 13975 | 33 |
| 34 def close(self): | |
| 35 self._make_calltip_window = None | |
| 36 | |
| 37 def _make_tk_calltip_window(self): | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
38 # See __init__ for usage |
| 13975 | 39 return CallTipWindow.CallTip(self.text) |
| 40 | |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
41 def _remove_calltip_window(self, event=None): |
| 13975 | 42 if self.calltip: |
| 43 self.calltip.hidetip() | |
| 44 self.calltip = None | |
|
18527
e4d6a739997d
py-cvs-rel2_1 (Rev 1.8) merge - whitespace normalization
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
45 |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
46 def force_open_calltip_event(self, event): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
47 """Happens when the user really wants to open a CallTip, even if a |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
48 function call is needed. |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
49 """ |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
50 self.open_calltip(True) |
| 13975 | 51 |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
52 def try_open_calltip_event(self, event): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
53 """Happens when it would be nice to open a CallTip, but not really |
|
55049
74c0a78114ae
Merged revisions 69846 via svnmerge from
Jesus Cea <jcea@jcea.es>
parents:
40754
diff
changeset
|
54 necessary, for example after an opening bracket, so function calls |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
55 won't be made. |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
56 """ |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
57 self.open_calltip(False) |
| 13975 | 58 |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
59 def refresh_calltip_event(self, event): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
60 """If there is already a calltip window, check if it is still needed, |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
61 and if so, reload it. |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
62 """ |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
63 if self.calltip and self.calltip.is_active(): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
64 self.open_calltip(False) |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
65 |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
66 def open_calltip(self, evalfuncs): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
67 self._remove_calltip_window() |
| 13975 | 68 |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
69 hp = HyperParser(self.editwin, "insert") |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
70 sur_paren = hp.get_surrounding_brackets('(') |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
71 if not sur_paren: |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
72 return |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
73 hp.set_index(sur_paren[0]) |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
74 expression = hp.get_expression() |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
75 if not expression or (not evalfuncs and expression.find('(') != -1): |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
76 return |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
77 arg_text = self.fetch_tip(expression) |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
78 if not arg_text: |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
79 return |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
80 self.calltip = self._make_calltip_window() |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
81 self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1]) |
| 26959 | 82 |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
83 def fetch_tip(self, expression): |
| 26959 | 84 """Return the argument list and docstring of a function or class |
| 85 | |
| 26623 | 86 If there is a Python subprocess, get the calltip there. Otherwise, |
| 87 either fetch_tip() is running in the subprocess itself or it was called | |
| 88 in an IDLE EditorWindow before any script had been run. | |
| 89 | |
| 90 The subprocess environment is that of the most recently run script. If | |
| 91 two unrelated modules are being edited some calltips in the current | |
| 92 module may be inoperative if the module was not the last to run. | |
| 93 | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
94 To find methods, fetch_tip must be fed a fully qualified name. |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
95 |
| 26959 | 96 """ |
| 26623 | 97 try: |
| 98 rpcclt = self.editwin.flist.pyshell.interp.rpcclt | |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
99 except AttributeError: |
| 26623 | 100 rpcclt = None |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
101 if rpcclt: |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
102 return rpcclt.remotecall("exec", "get_the_calltip", |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
103 (expression,), {}) |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
104 else: |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
105 entity = self.get_entity(expression) |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
106 return get_arg_text(entity) |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
107 |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
108 def get_entity(self, expression): |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
109 """Return the object corresponding to expression evaluated |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
110 in a namespace spanning sys.modules and __main.dict__. |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
111 """ |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
112 if expression: |
| 13975 | 113 namespace = sys.modules.copy() |
| 114 namespace.update(__main__.__dict__) | |
| 115 try: | |
|
77315
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
116 return eval(expression, namespace) |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
117 except BaseException: |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
118 # An uncaught exception closes idle, and eval can raise any |
|
477508efe4ab
Issue 12510: Expand 2 bare excepts. Improve comments. Change deceptive name
Terry Jan Reedy <tjreedy@udel.edu>
parents:
77194
diff
changeset
|
119 # exception, especially if user classes are involved. |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
120 return None |
| 13975 | 121 |
| 122 def _find_constructor(class_ob): | |
| 123 # Given a class object, return a function object used for the | |
| 124 # constructor (ie, __init__() ) or None if we can't find one. | |
| 125 try: | |
| 126 return class_ob.__init__.im_func | |
| 127 except AttributeError: | |
| 128 for base in class_ob.__bases__: | |
| 129 rc = _find_constructor(base) | |
| 130 if rc is not None: return rc | |
| 131 return None | |
| 132 | |
| 133 def get_arg_text(ob): | |
|
77194
938b12452af7
Issue12510: Attempting to get invalid tooltip no longer closes Idle.
Terry Jan Reedy <tjreedy@udel.edu>
parents:
60144
diff
changeset
|
134 """Get a string describing the arguments for the given object, |
|
938b12452af7
Issue12510: Attempting to get invalid tooltip no longer closes Idle.
Terry Jan Reedy <tjreedy@udel.edu>
parents:
60144
diff
changeset
|
135 only if it is callable.""" |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
136 arg_text = "" |
|
77194
938b12452af7
Issue12510: Attempting to get invalid tooltip no longer closes Idle.
Terry Jan Reedy <tjreedy@udel.edu>
parents:
60144
diff
changeset
|
137 if ob is not None and hasattr(ob, '__call__'): |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
138 arg_offset = 0 |
|
39138
7132f98ef07b
Tooltips failed on new-syle class __init__ args. Bug 1027566 Loren Guthrie
Kurt B. Kaiser <kbk@shore.net>
parents:
35891
diff
changeset
|
139 if type(ob) in (types.ClassType, types.TypeType): |
| 13975 | 140 # Look for the highest __init__ in the class chain. |
| 141 fob = _find_constructor(ob) | |
| 142 if fob is None: | |
| 143 fob = lambda: None | |
| 144 else: | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
145 arg_offset = 1 |
| 13975 | 146 elif type(ob)==types.MethodType: |
| 147 # bit of a hack for methods - turn it into a function | |
| 148 # but we drop the "self" param. | |
| 149 fob = ob.im_func | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
150 arg_offset = 1 |
| 13975 | 151 else: |
| 152 fob = ob | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
153 # Try to build one for Python defined functions |
| 13975 | 154 if type(fob) in [types.FunctionType, types.LambdaType]: |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
155 argcount = fob.func_code.co_argcount |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
156 real_args = fob.func_code.co_varnames[arg_offset:argcount] |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
157 defaults = fob.func_defaults or [] |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
158 defaults = list(map(lambda name: "=%s" % repr(name), defaults)) |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
159 defaults = [""] * (len(real_args) - len(defaults)) + defaults |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
160 items = map(lambda arg, dflt: arg + dflt, real_args, defaults) |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
161 if fob.func_code.co_flags & 0x4: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
162 items.append("...") |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
163 if fob.func_code.co_flags & 0x8: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
164 items.append("***") |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
165 arg_text = ", ".join(items) |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
166 arg_text = "(%s)" % re.sub("\.\d+", "<tuple>", arg_text) |
| 13975 | 167 # See if we can use the docstring |
|
29983
1bd6e62fb06f
1. Python Bug 775541: Calltips error when docstring is None. Introduced
Kurt B. Kaiser <kbk@shore.net>
parents:
29841
diff
changeset
|
168 doc = getattr(ob, "__doc__", "") |
| 25282 | 169 if doc: |
|
29983
1bd6e62fb06f
1. Python Bug 775541: Calltips error when docstring is None. Introduced
Kurt B. Kaiser <kbk@shore.net>
parents:
29841
diff
changeset
|
170 doc = doc.lstrip() |
| 25282 | 171 pos = doc.find("\n") |
| 172 if pos < 0 or pos > 70: | |
| 173 pos = 70 | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
174 if arg_text: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
175 arg_text += "\n" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
176 arg_text += doc[:pos] |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
177 return arg_text |
| 13975 | 178 |
| 179 ################################################# | |
| 180 # | |
| 181 # Test code | |
| 182 # | |
| 183 if __name__=='__main__': | |
| 184 | |
| 185 def t1(): "()" | |
| 186 def t2(a, b=None): "(a, b=None)" | |
| 187 def t3(a, *args): "(a, ...)" | |
| 188 def t4(*args): "(...)" | |
| 189 def t5(a, *args): "(a, ...)" | |
| 190 def t6(a, b=None, *args, **kw): "(a, b=None, ..., ***)" | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
191 def t7((a, b), c, (d, e)): "(<tuple>, c, <tuple>)" |
| 13975 | 192 |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
193 class TC(object): |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
194 "(ai=None, ...)" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
195 def __init__(self, ai=None, *b): "(ai=None, ...)" |
| 13975 | 196 def t1(self): "()" |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
197 def t2(self, ai, b=None): "(ai, b=None)" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
198 def t3(self, ai, *args): "(ai, ...)" |
| 13975 | 199 def t4(self, *args): "(...)" |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
200 def t5(self, ai, *args): "(ai, ...)" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
201 def t6(self, ai, b=None, *args, **kw): "(ai, b=None, ..., ***)" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
202 def t7(self, (ai, b), c, (d, e)): "(<tuple>, c, <tuple>)" |
| 13975 | 203 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
204 def test(tests): |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
205 ct = CallTips() |
| 13975 | 206 failed=[] |
| 207 for t in tests: | |
| 208 expected = t.__doc__ + "\n" + t.__doc__ | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
209 name = t.__name__ |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
210 # exercise fetch_tip(), not just get_arg_text() |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
211 try: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
212 qualified_name = "%s.%s" % (t.im_class.__name__, name) |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
213 except AttributeError: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
214 qualified_name = name |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
215 arg_text = ct.fetch_tip(qualified_name) |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
216 if arg_text != expected: |
| 13975 | 217 failed.append(t) |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
218 fmt = "%s - expected %s, but got %s" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
219 print fmt % (t.__name__, expected, get_arg_text(t)) |
| 13975 | 220 print "%d of %d tests failed" % (len(failed), len(tests)) |
| 221 | |
| 222 tc = TC() | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
223 tests = (t1, t2, t3, t4, t5, t6, t7, |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
224 TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6, tc.t7) |
| 13975 | 225 |
| 226 test(tests) |
