Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/CallTips.py @ 58925:eecf1bef052d 2.6
Merged revisions 78207 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78207 | ezio.melotti | 2010-02-17 01:26:09 +0200 (Wed, 17 Feb 2010) | 1 line
#7930: fix stripid
........
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Tue, 16 Feb 2010 23:29:44 +0000 |
| parents | 74c0a78114ae |
| children | eab361617f6a |
| 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 | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
12 import CallTipWindow |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
13 from 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]) |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
74 name = hp.get_expression() |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
75 if not name or (not evalfuncs and name.find('(') != -1): |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
76 return |
|
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
77 arg_text = self.fetch_tip(name) |
|
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 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
83 def fetch_tip(self, name): |
| 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 | |
| 99 except: | |
| 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", |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
103 (name,), {}) |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
104 else: |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
105 entity = self.get_entity(name) |
|
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 |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
108 def get_entity(self, name): |
| 26623 | 109 "Lookup name in a namespace spanning sys.modules and __main.dict__" |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
110 if name: |
| 13975 | 111 namespace = sys.modules.copy() |
| 112 namespace.update(__main__.__dict__) | |
| 113 try: | |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
114 return eval(name, namespace) |
|
40754
499bf3040af7
Handle AttributeError during calltip lookup
Kurt B. Kaiser <kbk@shore.net>
parents:
40744
diff
changeset
|
115 except (NameError, AttributeError): |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
116 return None |
| 13975 | 117 |
| 118 def _find_constructor(class_ob): | |
| 119 # Given a class object, return a function object used for the | |
| 120 # constructor (ie, __init__() ) or None if we can't find one. | |
| 121 try: | |
| 122 return class_ob.__init__.im_func | |
| 123 except AttributeError: | |
| 124 for base in class_ob.__bases__: | |
| 125 rc = _find_constructor(base) | |
| 126 if rc is not None: return rc | |
| 127 return None | |
| 128 | |
| 129 def get_arg_text(ob): | |
|
35891
8fd46b660e66
Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents:
31966
diff
changeset
|
130 """Get a string describing the arguments for the given object""" |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
131 arg_text = "" |
| 13975 | 132 if ob is not None: |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
133 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
|
134 if type(ob) in (types.ClassType, types.TypeType): |
| 13975 | 135 # Look for the highest __init__ in the class chain. |
| 136 fob = _find_constructor(ob) | |
| 137 if fob is None: | |
| 138 fob = lambda: None | |
| 139 else: | |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
140 arg_offset = 1 |
| 13975 | 141 elif type(ob)==types.MethodType: |
| 142 # bit of a hack for methods - turn it into a function | |
| 143 # but we drop the "self" param. | |
| 144 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
|
145 arg_offset = 1 |
| 13975 | 146 else: |
| 147 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
|
148 # Try to build one for Python defined functions |
| 13975 | 149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 items.append("...") |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
158 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
|
159 items.append("***") |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
160 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
|
161 arg_text = "(%s)" % re.sub("\.\d+", "<tuple>", arg_text) |
| 13975 | 162 # 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
|
163 doc = getattr(ob, "__doc__", "") |
| 25282 | 164 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
|
165 doc = doc.lstrip() |
| 25282 | 166 pos = doc.find("\n") |
| 167 if pos < 0 or pos > 70: | |
| 168 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
|
169 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
|
170 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
|
171 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
|
172 return arg_text |
| 13975 | 173 |
| 174 ################################################# | |
| 175 # | |
| 176 # Test code | |
| 177 # | |
| 178 if __name__=='__main__': | |
| 179 | |
| 180 def t1(): "()" | |
| 181 def t2(a, b=None): "(a, b=None)" | |
| 182 def t3(a, *args): "(a, ...)" | |
| 183 def t4(*args): "(...)" | |
| 184 def t5(a, *args): "(a, ...)" | |
| 185 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
|
186 def t7((a, b), c, (d, e)): "(<tuple>, c, <tuple>)" |
| 13975 | 187 |
|
40744
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
188 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
|
189 "(ai=None, ...)" |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
190 def __init__(self, ai=None, *b): "(ai=None, ...)" |
| 13975 | 191 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
|
192 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
|
193 def t3(self, ai, *args): "(ai, ...)" |
| 13975 | 194 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
|
195 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
|
196 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
|
197 def t7(self, (ai, b), c, (d, e)): "(<tuple>, c, <tuple>)" |
| 13975 | 198 |
|
25691
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
199 def test(tests): |
|
b39bd03a8dab
M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents:
25282
diff
changeset
|
200 ct = CallTips() |
| 13975 | 201 failed=[] |
| 202 for t in tests: | |
| 203 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
|
204 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
|
205 # 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
|
206 try: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
207 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
|
208 except AttributeError: |
|
6d9ca90d8bf7
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Kurt B. Kaiser <kbk@shore.net>
parents:
39138
diff
changeset
|
209 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
|
210 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
|
211 if arg_text != expected: |
| 13975 | 212 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
|
213 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
|
214 print fmt % (t.__name__, expected, get_arg_text(t)) |
| 13975 | 215 print "%d of %d tests failed" % (len(failed), len(tests)) |
| 216 | |
| 217 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
|
218 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
|
219 TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6, tc.t7) |
| 13975 | 220 |
| 221 test(tests) |
