##// END OF EJS Templates
docstring for _default_arguments_from_docstring
Piti Ongmongkolkul -
Show More
@@ -1,972 +1,976 b''
1 """Word completion for IPython.
1 """Word completion for IPython.
2
2
3 This module is a fork of the rlcompleter module in the Python standard
3 This module is a fork of the rlcompleter module in the Python standard
4 library. The original enhancements made to rlcompleter have been sent
4 library. The original enhancements made to rlcompleter have been sent
5 upstream and were accepted as of Python 2.3, but we need a lot more
5 upstream and were accepted as of Python 2.3, but we need a lot more
6 functionality specific to IPython, so this module will continue to live as an
6 functionality specific to IPython, so this module will continue to live as an
7 IPython-specific utility.
7 IPython-specific utility.
8
8
9 Original rlcompleter documentation:
9 Original rlcompleter documentation:
10
10
11 This requires the latest extension to the readline module (the
11 This requires the latest extension to the readline module (the
12 completes keywords, built-ins and globals in __main__; when completing
12 completes keywords, built-ins and globals in __main__; when completing
13 NAME.NAME..., it evaluates (!) the expression up to the last dot and
13 NAME.NAME..., it evaluates (!) the expression up to the last dot and
14 completes its attributes.
14 completes its attributes.
15
15
16 It's very cool to do "import string" type "string.", hit the
16 It's very cool to do "import string" type "string.", hit the
17 completion key (twice), and see the list of names defined by the
17 completion key (twice), and see the list of names defined by the
18 string module!
18 string module!
19
19
20 Tip: to use the tab key as the completion key, call
20 Tip: to use the tab key as the completion key, call
21
21
22 readline.parse_and_bind("tab: complete")
22 readline.parse_and_bind("tab: complete")
23
23
24 Notes:
24 Notes:
25
25
26 - Exceptions raised by the completer function are *ignored* (and
26 - Exceptions raised by the completer function are *ignored* (and
27 generally cause the completion to fail). This is a feature -- since
27 generally cause the completion to fail). This is a feature -- since
28 readline sets the tty device in raw (or cbreak) mode, printing a
28 readline sets the tty device in raw (or cbreak) mode, printing a
29 traceback wouldn't work well without some complicated hoopla to save,
29 traceback wouldn't work well without some complicated hoopla to save,
30 reset and restore the tty state.
30 reset and restore the tty state.
31
31
32 - The evaluation of the NAME.NAME... form may cause arbitrary
32 - The evaluation of the NAME.NAME... form may cause arbitrary
33 application defined code to be executed if an object with a
33 application defined code to be executed if an object with a
34 __getattr__ hook is found. Since it is the responsibility of the
34 __getattr__ hook is found. Since it is the responsibility of the
35 application (or the user) to enable this feature, I consider this an
35 application (or the user) to enable this feature, I consider this an
36 acceptable risk. More complicated expressions (e.g. function calls or
36 acceptable risk. More complicated expressions (e.g. function calls or
37 indexing operations) are *not* evaluated.
37 indexing operations) are *not* evaluated.
38
38
39 - GNU readline is also used by the built-in functions input() and
39 - GNU readline is also used by the built-in functions input() and
40 raw_input(), and thus these also benefit/suffer from the completer
40 raw_input(), and thus these also benefit/suffer from the completer
41 features. Clearly an interactive application can benefit by
41 features. Clearly an interactive application can benefit by
42 specifying its own completer function and using raw_input() for all
42 specifying its own completer function and using raw_input() for all
43 its input.
43 its input.
44
44
45 - When the original stdin is not a tty device, GNU readline is never
45 - When the original stdin is not a tty device, GNU readline is never
46 used, and this module (and the readline module) are silently inactive.
46 used, and this module (and the readline module) are silently inactive.
47 """
47 """
48
48
49 #*****************************************************************************
49 #*****************************************************************************
50 #
50 #
51 # Since this file is essentially a minimally modified copy of the rlcompleter
51 # Since this file is essentially a minimally modified copy of the rlcompleter
52 # module which is part of the standard Python distribution, I assume that the
52 # module which is part of the standard Python distribution, I assume that the
53 # proper procedure is to maintain its copyright as belonging to the Python
53 # proper procedure is to maintain its copyright as belonging to the Python
54 # Software Foundation (in addition to my own, for all new code).
54 # Software Foundation (in addition to my own, for all new code).
55 #
55 #
56 # Copyright (C) 2008 IPython Development Team
56 # Copyright (C) 2008 IPython Development Team
57 # Copyright (C) 2001 Fernando Perez. <fperez@colorado.edu>
57 # Copyright (C) 2001 Fernando Perez. <fperez@colorado.edu>
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
59 #
59 #
60 # Distributed under the terms of the BSD License. The full license is in
60 # Distributed under the terms of the BSD License. The full license is in
61 # the file COPYING, distributed as part of this software.
61 # the file COPYING, distributed as part of this software.
62 #
62 #
63 #*****************************************************************************
63 #*****************************************************************************
64
64
65 #-----------------------------------------------------------------------------
65 #-----------------------------------------------------------------------------
66 # Imports
66 # Imports
67 #-----------------------------------------------------------------------------
67 #-----------------------------------------------------------------------------
68
68
69 import __builtin__
69 import __builtin__
70 import __main__
70 import __main__
71 import glob
71 import glob
72 import inspect
72 import inspect
73 import itertools
73 import itertools
74 import keyword
74 import keyword
75 import os
75 import os
76 import re
76 import re
77 import shlex
77 import shlex
78 import sys
78 import sys
79 import StringIO
79 import StringIO
80
80
81 from IPython.config.configurable import Configurable
81 from IPython.config.configurable import Configurable
82 from IPython.core.error import TryNext
82 from IPython.core.error import TryNext
83 from IPython.core.inputsplitter import ESC_MAGIC
83 from IPython.core.inputsplitter import ESC_MAGIC
84 from IPython.utils import generics
84 from IPython.utils import generics
85 from IPython.utils import io
85 from IPython.utils import io
86 from IPython.utils.dir2 import dir2
86 from IPython.utils.dir2 import dir2
87 from IPython.utils.process import arg_split
87 from IPython.utils.process import arg_split
88 from IPython.utils.traitlets import CBool, Enum
88 from IPython.utils.traitlets import CBool, Enum
89
89
90 #-----------------------------------------------------------------------------
90 #-----------------------------------------------------------------------------
91 # Globals
91 # Globals
92 #-----------------------------------------------------------------------------
92 #-----------------------------------------------------------------------------
93
93
94 # Public API
94 # Public API
95 __all__ = ['Completer','IPCompleter']
95 __all__ = ['Completer','IPCompleter']
96
96
97 if sys.platform == 'win32':
97 if sys.platform == 'win32':
98 PROTECTABLES = ' '
98 PROTECTABLES = ' '
99 else:
99 else:
100 PROTECTABLES = ' ()[]{}?=\\|;:\'#*"^&'
100 PROTECTABLES = ' ()[]{}?=\\|;:\'#*"^&'
101
101
102 #-----------------------------------------------------------------------------
102 #-----------------------------------------------------------------------------
103 # Main functions and classes
103 # Main functions and classes
104 #-----------------------------------------------------------------------------
104 #-----------------------------------------------------------------------------
105
105
106 def has_open_quotes(s):
106 def has_open_quotes(s):
107 """Return whether a string has open quotes.
107 """Return whether a string has open quotes.
108
108
109 This simply counts whether the number of quote characters of either type in
109 This simply counts whether the number of quote characters of either type in
110 the string is odd.
110 the string is odd.
111
111
112 Returns
112 Returns
113 -------
113 -------
114 If there is an open quote, the quote character is returned. Else, return
114 If there is an open quote, the quote character is returned. Else, return
115 False.
115 False.
116 """
116 """
117 # We check " first, then ', so complex cases with nested quotes will get
117 # We check " first, then ', so complex cases with nested quotes will get
118 # the " to take precedence.
118 # the " to take precedence.
119 if s.count('"') % 2:
119 if s.count('"') % 2:
120 return '"'
120 return '"'
121 elif s.count("'") % 2:
121 elif s.count("'") % 2:
122 return "'"
122 return "'"
123 else:
123 else:
124 return False
124 return False
125
125
126
126
127 def protect_filename(s):
127 def protect_filename(s):
128 """Escape a string to protect certain characters."""
128 """Escape a string to protect certain characters."""
129
129
130 return "".join([(ch in PROTECTABLES and '\\' + ch or ch)
130 return "".join([(ch in PROTECTABLES and '\\' + ch or ch)
131 for ch in s])
131 for ch in s])
132
132
133 def expand_user(path):
133 def expand_user(path):
134 """Expand '~'-style usernames in strings.
134 """Expand '~'-style usernames in strings.
135
135
136 This is similar to :func:`os.path.expanduser`, but it computes and returns
136 This is similar to :func:`os.path.expanduser`, but it computes and returns
137 extra information that will be useful if the input was being used in
137 extra information that will be useful if the input was being used in
138 computing completions, and you wish to return the completions with the
138 computing completions, and you wish to return the completions with the
139 original '~' instead of its expanded value.
139 original '~' instead of its expanded value.
140
140
141 Parameters
141 Parameters
142 ----------
142 ----------
143 path : str
143 path : str
144 String to be expanded. If no ~ is present, the output is the same as the
144 String to be expanded. If no ~ is present, the output is the same as the
145 input.
145 input.
146
146
147 Returns
147 Returns
148 -------
148 -------
149 newpath : str
149 newpath : str
150 Result of ~ expansion in the input path.
150 Result of ~ expansion in the input path.
151 tilde_expand : bool
151 tilde_expand : bool
152 Whether any expansion was performed or not.
152 Whether any expansion was performed or not.
153 tilde_val : str
153 tilde_val : str
154 The value that ~ was replaced with.
154 The value that ~ was replaced with.
155 """
155 """
156 # Default values
156 # Default values
157 tilde_expand = False
157 tilde_expand = False
158 tilde_val = ''
158 tilde_val = ''
159 newpath = path
159 newpath = path
160
160
161 if path.startswith('~'):
161 if path.startswith('~'):
162 tilde_expand = True
162 tilde_expand = True
163 rest = len(path)-1
163 rest = len(path)-1
164 newpath = os.path.expanduser(path)
164 newpath = os.path.expanduser(path)
165 if rest:
165 if rest:
166 tilde_val = newpath[:-rest]
166 tilde_val = newpath[:-rest]
167 else:
167 else:
168 tilde_val = newpath
168 tilde_val = newpath
169
169
170 return newpath, tilde_expand, tilde_val
170 return newpath, tilde_expand, tilde_val
171
171
172
172
173 def compress_user(path, tilde_expand, tilde_val):
173 def compress_user(path, tilde_expand, tilde_val):
174 """Does the opposite of expand_user, with its outputs.
174 """Does the opposite of expand_user, with its outputs.
175 """
175 """
176 if tilde_expand:
176 if tilde_expand:
177 return path.replace(tilde_val, '~')
177 return path.replace(tilde_val, '~')
178 else:
178 else:
179 return path
179 return path
180
180
181
181
182 class Bunch(object): pass
182 class Bunch(object): pass
183
183
184
184
185 DELIMS = ' \t\n`!@#$^&*()=+[{]}\\|;:\'",<>?'
185 DELIMS = ' \t\n`!@#$^&*()=+[{]}\\|;:\'",<>?'
186 GREEDY_DELIMS = ' \r\n'
186 GREEDY_DELIMS = ' \r\n'
187
187
188
188
189 class CompletionSplitter(object):
189 class CompletionSplitter(object):
190 """An object to split an input line in a manner similar to readline.
190 """An object to split an input line in a manner similar to readline.
191
191
192 By having our own implementation, we can expose readline-like completion in
192 By having our own implementation, we can expose readline-like completion in
193 a uniform manner to all frontends. This object only needs to be given the
193 a uniform manner to all frontends. This object only needs to be given the
194 line of text to be split and the cursor position on said line, and it
194 line of text to be split and the cursor position on said line, and it
195 returns the 'word' to be completed on at the cursor after splitting the
195 returns the 'word' to be completed on at the cursor after splitting the
196 entire line.
196 entire line.
197
197
198 What characters are used as splitting delimiters can be controlled by
198 What characters are used as splitting delimiters can be controlled by
199 setting the `delims` attribute (this is a property that internally
199 setting the `delims` attribute (this is a property that internally
200 automatically builds the necessary regular expression)"""
200 automatically builds the necessary regular expression)"""
201
201
202 # Private interface
202 # Private interface
203
203
204 # A string of delimiter characters. The default value makes sense for
204 # A string of delimiter characters. The default value makes sense for
205 # IPython's most typical usage patterns.
205 # IPython's most typical usage patterns.
206 _delims = DELIMS
206 _delims = DELIMS
207
207
208 # The expression (a normal string) to be compiled into a regular expression
208 # The expression (a normal string) to be compiled into a regular expression
209 # for actual splitting. We store it as an attribute mostly for ease of
209 # for actual splitting. We store it as an attribute mostly for ease of
210 # debugging, since this type of code can be so tricky to debug.
210 # debugging, since this type of code can be so tricky to debug.
211 _delim_expr = None
211 _delim_expr = None
212
212
213 # The regular expression that does the actual splitting
213 # The regular expression that does the actual splitting
214 _delim_re = None
214 _delim_re = None
215
215
216 def __init__(self, delims=None):
216 def __init__(self, delims=None):
217 delims = CompletionSplitter._delims if delims is None else delims
217 delims = CompletionSplitter._delims if delims is None else delims
218 self.delims = delims
218 self.delims = delims
219
219
220 @property
220 @property
221 def delims(self):
221 def delims(self):
222 """Return the string of delimiter characters."""
222 """Return the string of delimiter characters."""
223 return self._delims
223 return self._delims
224
224
225 @delims.setter
225 @delims.setter
226 def delims(self, delims):
226 def delims(self, delims):
227 """Set the delimiters for line splitting."""
227 """Set the delimiters for line splitting."""
228 expr = '[' + ''.join('\\'+ c for c in delims) + ']'
228 expr = '[' + ''.join('\\'+ c for c in delims) + ']'
229 self._delim_re = re.compile(expr)
229 self._delim_re = re.compile(expr)
230 self._delims = delims
230 self._delims = delims
231 self._delim_expr = expr
231 self._delim_expr = expr
232
232
233 def split_line(self, line, cursor_pos=None):
233 def split_line(self, line, cursor_pos=None):
234 """Split a line of text with a cursor at the given position.
234 """Split a line of text with a cursor at the given position.
235 """
235 """
236 l = line if cursor_pos is None else line[:cursor_pos]
236 l = line if cursor_pos is None else line[:cursor_pos]
237 return self._delim_re.split(l)[-1]
237 return self._delim_re.split(l)[-1]
238
238
239
239
240 class Completer(Configurable):
240 class Completer(Configurable):
241
241
242 greedy = CBool(False, config=True,
242 greedy = CBool(False, config=True,
243 help="""Activate greedy completion
243 help="""Activate greedy completion
244
244
245 This will enable completion on elements of lists, results of function calls, etc.,
245 This will enable completion on elements of lists, results of function calls, etc.,
246 but can be unsafe because the code is actually evaluated on TAB.
246 but can be unsafe because the code is actually evaluated on TAB.
247 """
247 """
248 )
248 )
249
249
250
250
251 def __init__(self, namespace=None, global_namespace=None, config=None, **kwargs):
251 def __init__(self, namespace=None, global_namespace=None, config=None, **kwargs):
252 """Create a new completer for the command line.
252 """Create a new completer for the command line.
253
253
254 Completer(namespace=ns,global_namespace=ns2) -> completer instance.
254 Completer(namespace=ns,global_namespace=ns2) -> completer instance.
255
255
256 If unspecified, the default namespace where completions are performed
256 If unspecified, the default namespace where completions are performed
257 is __main__ (technically, __main__.__dict__). Namespaces should be
257 is __main__ (technically, __main__.__dict__). Namespaces should be
258 given as dictionaries.
258 given as dictionaries.
259
259
260 An optional second namespace can be given. This allows the completer
260 An optional second namespace can be given. This allows the completer
261 to handle cases where both the local and global scopes need to be
261 to handle cases where both the local and global scopes need to be
262 distinguished.
262 distinguished.
263
263
264 Completer instances should be used as the completion mechanism of
264 Completer instances should be used as the completion mechanism of
265 readline via the set_completer() call:
265 readline via the set_completer() call:
266
266
267 readline.set_completer(Completer(my_namespace).complete)
267 readline.set_completer(Completer(my_namespace).complete)
268 """
268 """
269
269
270 # Don't bind to namespace quite yet, but flag whether the user wants a
270 # Don't bind to namespace quite yet, but flag whether the user wants a
271 # specific namespace or to use __main__.__dict__. This will allow us
271 # specific namespace or to use __main__.__dict__. This will allow us
272 # to bind to __main__.__dict__ at completion time, not now.
272 # to bind to __main__.__dict__ at completion time, not now.
273 if namespace is None:
273 if namespace is None:
274 self.use_main_ns = 1
274 self.use_main_ns = 1
275 else:
275 else:
276 self.use_main_ns = 0
276 self.use_main_ns = 0
277 self.namespace = namespace
277 self.namespace = namespace
278
278
279 # The global namespace, if given, can be bound directly
279 # The global namespace, if given, can be bound directly
280 if global_namespace is None:
280 if global_namespace is None:
281 self.global_namespace = {}
281 self.global_namespace = {}
282 else:
282 else:
283 self.global_namespace = global_namespace
283 self.global_namespace = global_namespace
284
284
285 super(Completer, self).__init__(config=config, **kwargs)
285 super(Completer, self).__init__(config=config, **kwargs)
286
286
287 def complete(self, text, state):
287 def complete(self, text, state):
288 """Return the next possible completion for 'text'.
288 """Return the next possible completion for 'text'.
289
289
290 This is called successively with state == 0, 1, 2, ... until it
290 This is called successively with state == 0, 1, 2, ... until it
291 returns None. The completion should begin with 'text'.
291 returns None. The completion should begin with 'text'.
292
292
293 """
293 """
294 if self.use_main_ns:
294 if self.use_main_ns:
295 self.namespace = __main__.__dict__
295 self.namespace = __main__.__dict__
296
296
297 if state == 0:
297 if state == 0:
298 if "." in text:
298 if "." in text:
299 self.matches = self.attr_matches(text)
299 self.matches = self.attr_matches(text)
300 else:
300 else:
301 self.matches = self.global_matches(text)
301 self.matches = self.global_matches(text)
302 try:
302 try:
303 return self.matches[state]
303 return self.matches[state]
304 except IndexError:
304 except IndexError:
305 return None
305 return None
306
306
307 def global_matches(self, text):
307 def global_matches(self, text):
308 """Compute matches when text is a simple name.
308 """Compute matches when text is a simple name.
309
309
310 Return a list of all keywords, built-in functions and names currently
310 Return a list of all keywords, built-in functions and names currently
311 defined in self.namespace or self.global_namespace that match.
311 defined in self.namespace or self.global_namespace that match.
312
312
313 """
313 """
314 #print 'Completer->global_matches, txt=%r' % text # dbg
314 #print 'Completer->global_matches, txt=%r' % text # dbg
315 matches = []
315 matches = []
316 match_append = matches.append
316 match_append = matches.append
317 n = len(text)
317 n = len(text)
318 for lst in [keyword.kwlist,
318 for lst in [keyword.kwlist,
319 __builtin__.__dict__.keys(),
319 __builtin__.__dict__.keys(),
320 self.namespace.keys(),
320 self.namespace.keys(),
321 self.global_namespace.keys()]:
321 self.global_namespace.keys()]:
322 for word in lst:
322 for word in lst:
323 if word[:n] == text and word != "__builtins__":
323 if word[:n] == text and word != "__builtins__":
324 match_append(word)
324 match_append(word)
325 return matches
325 return matches
326
326
327 def attr_matches(self, text):
327 def attr_matches(self, text):
328 """Compute matches when text contains a dot.
328 """Compute matches when text contains a dot.
329
329
330 Assuming the text is of the form NAME.NAME....[NAME], and is
330 Assuming the text is of the form NAME.NAME....[NAME], and is
331 evaluatable in self.namespace or self.global_namespace, it will be
331 evaluatable in self.namespace or self.global_namespace, it will be
332 evaluated and its attributes (as revealed by dir()) are used as
332 evaluated and its attributes (as revealed by dir()) are used as
333 possible completions. (For class instances, class members are are
333 possible completions. (For class instances, class members are are
334 also considered.)
334 also considered.)
335
335
336 WARNING: this can still invoke arbitrary C code, if an object
336 WARNING: this can still invoke arbitrary C code, if an object
337 with a __getattr__ hook is evaluated.
337 with a __getattr__ hook is evaluated.
338
338
339 """
339 """
340
340
341 #io.rprint('Completer->attr_matches, txt=%r' % text) # dbg
341 #io.rprint('Completer->attr_matches, txt=%r' % text) # dbg
342 # Another option, seems to work great. Catches things like ''.<tab>
342 # Another option, seems to work great. Catches things like ''.<tab>
343 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
343 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
344
344
345 if m:
345 if m:
346 expr, attr = m.group(1, 3)
346 expr, attr = m.group(1, 3)
347 elif self.greedy:
347 elif self.greedy:
348 m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
348 m2 = re.match(r"(.+)\.(\w*)$", self.line_buffer)
349 if not m2:
349 if not m2:
350 return []
350 return []
351 expr, attr = m2.group(1,2)
351 expr, attr = m2.group(1,2)
352 else:
352 else:
353 return []
353 return []
354
354
355 try:
355 try:
356 obj = eval(expr, self.namespace)
356 obj = eval(expr, self.namespace)
357 except:
357 except:
358 try:
358 try:
359 obj = eval(expr, self.global_namespace)
359 obj = eval(expr, self.global_namespace)
360 except:
360 except:
361 return []
361 return []
362
362
363 if self.limit_to__all__ and hasattr(obj, '__all__'):
363 if self.limit_to__all__ and hasattr(obj, '__all__'):
364 words = get__all__entries(obj)
364 words = get__all__entries(obj)
365 else:
365 else:
366 words = dir2(obj)
366 words = dir2(obj)
367
367
368 try:
368 try:
369 words = generics.complete_object(obj, words)
369 words = generics.complete_object(obj, words)
370 except TryNext:
370 except TryNext:
371 pass
371 pass
372 except Exception:
372 except Exception:
373 # Silence errors from completion function
373 # Silence errors from completion function
374 #raise # dbg
374 #raise # dbg
375 pass
375 pass
376 # Build match list to return
376 # Build match list to return
377 n = len(attr)
377 n = len(attr)
378 res = ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
378 res = ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
379 return res
379 return res
380
380
381
381
382 def get__all__entries(obj):
382 def get__all__entries(obj):
383 """returns the strings in the __all__ attribute"""
383 """returns the strings in the __all__ attribute"""
384 try:
384 try:
385 words = getattr(obj, '__all__')
385 words = getattr(obj, '__all__')
386 except:
386 except:
387 return []
387 return []
388
388
389 return [w for w in words if isinstance(w, basestring)]
389 return [w for w in words if isinstance(w, basestring)]
390
390
391
391
392 class IPCompleter(Completer):
392 class IPCompleter(Completer):
393 """Extension of the completer class with IPython-specific features"""
393 """Extension of the completer class with IPython-specific features"""
394
394
395 def _greedy_changed(self, name, old, new):
395 def _greedy_changed(self, name, old, new):
396 """update the splitter and readline delims when greedy is changed"""
396 """update the splitter and readline delims when greedy is changed"""
397 if new:
397 if new:
398 self.splitter.delims = GREEDY_DELIMS
398 self.splitter.delims = GREEDY_DELIMS
399 else:
399 else:
400 self.splitter.delims = DELIMS
400 self.splitter.delims = DELIMS
401
401
402 if self.readline:
402 if self.readline:
403 self.readline.set_completer_delims(self.splitter.delims)
403 self.readline.set_completer_delims(self.splitter.delims)
404
404
405 merge_completions = CBool(True, config=True,
405 merge_completions = CBool(True, config=True,
406 help="""Whether to merge completion results into a single list
406 help="""Whether to merge completion results into a single list
407
407
408 If False, only the completion results from the first non-empty
408 If False, only the completion results from the first non-empty
409 completer will be returned.
409 completer will be returned.
410 """
410 """
411 )
411 )
412 omit__names = Enum((0,1,2), default_value=2, config=True,
412 omit__names = Enum((0,1,2), default_value=2, config=True,
413 help="""Instruct the completer to omit private method names
413 help="""Instruct the completer to omit private method names
414
414
415 Specifically, when completing on ``object.<tab>``.
415 Specifically, when completing on ``object.<tab>``.
416
416
417 When 2 [default]: all names that start with '_' will be excluded.
417 When 2 [default]: all names that start with '_' will be excluded.
418
418
419 When 1: all 'magic' names (``__foo__``) will be excluded.
419 When 1: all 'magic' names (``__foo__``) will be excluded.
420
420
421 When 0: nothing will be excluded.
421 When 0: nothing will be excluded.
422 """
422 """
423 )
423 )
424 limit_to__all__ = CBool(default_value=False, config=True,
424 limit_to__all__ = CBool(default_value=False, config=True,
425 help="""Instruct the completer to use __all__ for the completion
425 help="""Instruct the completer to use __all__ for the completion
426
426
427 Specifically, when completing on ``object.<tab>``.
427 Specifically, when completing on ``object.<tab>``.
428
428
429 When True: only those names in obj.__all__ will be included.
429 When True: only those names in obj.__all__ will be included.
430
430
431 When False [default]: the __all__ attribute is ignored
431 When False [default]: the __all__ attribute is ignored
432 """
432 """
433 )
433 )
434
434
435 def __init__(self, shell=None, namespace=None, global_namespace=None,
435 def __init__(self, shell=None, namespace=None, global_namespace=None,
436 alias_table=None, use_readline=True,
436 alias_table=None, use_readline=True,
437 config=None, **kwargs):
437 config=None, **kwargs):
438 """IPCompleter() -> completer
438 """IPCompleter() -> completer
439
439
440 Return a completer object suitable for use by the readline library
440 Return a completer object suitable for use by the readline library
441 via readline.set_completer().
441 via readline.set_completer().
442
442
443 Inputs:
443 Inputs:
444
444
445 - shell: a pointer to the ipython shell itself. This is needed
445 - shell: a pointer to the ipython shell itself. This is needed
446 because this completer knows about magic functions, and those can
446 because this completer knows about magic functions, and those can
447 only be accessed via the ipython instance.
447 only be accessed via the ipython instance.
448
448
449 - namespace: an optional dict where completions are performed.
449 - namespace: an optional dict where completions are performed.
450
450
451 - global_namespace: secondary optional dict for completions, to
451 - global_namespace: secondary optional dict for completions, to
452 handle cases (such as IPython embedded inside functions) where
452 handle cases (such as IPython embedded inside functions) where
453 both Python scopes are visible.
453 both Python scopes are visible.
454
454
455 - If alias_table is supplied, it should be a dictionary of aliases
455 - If alias_table is supplied, it should be a dictionary of aliases
456 to complete.
456 to complete.
457
457
458 use_readline : bool, optional
458 use_readline : bool, optional
459 If true, use the readline library. This completer can still function
459 If true, use the readline library. This completer can still function
460 without readline, though in that case callers must provide some extra
460 without readline, though in that case callers must provide some extra
461 information on each call about the current line."""
461 information on each call about the current line."""
462
462
463 self.magic_escape = ESC_MAGIC
463 self.magic_escape = ESC_MAGIC
464 self.splitter = CompletionSplitter()
464 self.splitter = CompletionSplitter()
465
465
466 # Readline configuration, only used by the rlcompleter method.
466 # Readline configuration, only used by the rlcompleter method.
467 if use_readline:
467 if use_readline:
468 # We store the right version of readline so that later code
468 # We store the right version of readline so that later code
469 import IPython.utils.rlineimpl as readline
469 import IPython.utils.rlineimpl as readline
470 self.readline = readline
470 self.readline = readline
471 else:
471 else:
472 self.readline = None
472 self.readline = None
473
473
474 # _greedy_changed() depends on splitter and readline being defined:
474 # _greedy_changed() depends on splitter and readline being defined:
475 Completer.__init__(self, namespace=namespace, global_namespace=global_namespace,
475 Completer.__init__(self, namespace=namespace, global_namespace=global_namespace,
476 config=config, **kwargs)
476 config=config, **kwargs)
477
477
478 # List where completion matches will be stored
478 # List where completion matches will be stored
479 self.matches = []
479 self.matches = []
480 self.shell = shell
480 self.shell = shell
481 if alias_table is None:
481 if alias_table is None:
482 alias_table = {}
482 alias_table = {}
483 self.alias_table = alias_table
483 self.alias_table = alias_table
484 # Regexp to split filenames with spaces in them
484 # Regexp to split filenames with spaces in them
485 self.space_name_re = re.compile(r'([^\\] )')
485 self.space_name_re = re.compile(r'([^\\] )')
486 # Hold a local ref. to glob.glob for speed
486 # Hold a local ref. to glob.glob for speed
487 self.glob = glob.glob
487 self.glob = glob.glob
488
488
489 # Determine if we are running on 'dumb' terminals, like (X)Emacs
489 # Determine if we are running on 'dumb' terminals, like (X)Emacs
490 # buffers, to avoid completion problems.
490 # buffers, to avoid completion problems.
491 term = os.environ.get('TERM','xterm')
491 term = os.environ.get('TERM','xterm')
492 self.dumb_terminal = term in ['dumb','emacs']
492 self.dumb_terminal = term in ['dumb','emacs']
493
493
494 # Special handling of backslashes needed in win32 platforms
494 # Special handling of backslashes needed in win32 platforms
495 if sys.platform == "win32":
495 if sys.platform == "win32":
496 self.clean_glob = self._clean_glob_win32
496 self.clean_glob = self._clean_glob_win32
497 else:
497 else:
498 self.clean_glob = self._clean_glob
498 self.clean_glob = self._clean_glob
499
499
500 # All active matcher routines for completion
500 # All active matcher routines for completion
501 self.matchers = [self.python_matches,
501 self.matchers = [self.python_matches,
502 self.file_matches,
502 self.file_matches,
503 self.magic_matches,
503 self.magic_matches,
504 self.alias_matches,
504 self.alias_matches,
505 self.python_func_kw_matches,
505 self.python_func_kw_matches,
506 ]
506 ]
507
507
508 def all_completions(self, text):
508 def all_completions(self, text):
509 """
509 """
510 Wrapper around the complete method for the benefit of emacs
510 Wrapper around the complete method for the benefit of emacs
511 and pydb.
511 and pydb.
512 """
512 """
513 return self.complete(text)[1]
513 return self.complete(text)[1]
514
514
515 def _clean_glob(self,text):
515 def _clean_glob(self,text):
516 return self.glob("%s*" % text)
516 return self.glob("%s*" % text)
517
517
518 def _clean_glob_win32(self,text):
518 def _clean_glob_win32(self,text):
519 return [f.replace("\\","/")
519 return [f.replace("\\","/")
520 for f in self.glob("%s*" % text)]
520 for f in self.glob("%s*" % text)]
521
521
522 def file_matches(self, text):
522 def file_matches(self, text):
523 """Match filenames, expanding ~USER type strings.
523 """Match filenames, expanding ~USER type strings.
524
524
525 Most of the seemingly convoluted logic in this completer is an
525 Most of the seemingly convoluted logic in this completer is an
526 attempt to handle filenames with spaces in them. And yet it's not
526 attempt to handle filenames with spaces in them. And yet it's not
527 quite perfect, because Python's readline doesn't expose all of the
527 quite perfect, because Python's readline doesn't expose all of the
528 GNU readline details needed for this to be done correctly.
528 GNU readline details needed for this to be done correctly.
529
529
530 For a filename with a space in it, the printed completions will be
530 For a filename with a space in it, the printed completions will be
531 only the parts after what's already been typed (instead of the
531 only the parts after what's already been typed (instead of the
532 full completions, as is normally done). I don't think with the
532 full completions, as is normally done). I don't think with the
533 current (as of Python 2.3) Python readline it's possible to do
533 current (as of Python 2.3) Python readline it's possible to do
534 better."""
534 better."""
535
535
536 #io.rprint('Completer->file_matches: <%r>' % text) # dbg
536 #io.rprint('Completer->file_matches: <%r>' % text) # dbg
537
537
538 # chars that require escaping with backslash - i.e. chars
538 # chars that require escaping with backslash - i.e. chars
539 # that readline treats incorrectly as delimiters, but we
539 # that readline treats incorrectly as delimiters, but we
540 # don't want to treat as delimiters in filename matching
540 # don't want to treat as delimiters in filename matching
541 # when escaped with backslash
541 # when escaped with backslash
542 if text.startswith('!'):
542 if text.startswith('!'):
543 text = text[1:]
543 text = text[1:]
544 text_prefix = '!'
544 text_prefix = '!'
545 else:
545 else:
546 text_prefix = ''
546 text_prefix = ''
547
547
548 text_until_cursor = self.text_until_cursor
548 text_until_cursor = self.text_until_cursor
549 # track strings with open quotes
549 # track strings with open quotes
550 open_quotes = has_open_quotes(text_until_cursor)
550 open_quotes = has_open_quotes(text_until_cursor)
551
551
552 if '(' in text_until_cursor or '[' in text_until_cursor:
552 if '(' in text_until_cursor or '[' in text_until_cursor:
553 lsplit = text
553 lsplit = text
554 else:
554 else:
555 try:
555 try:
556 # arg_split ~ shlex.split, but with unicode bugs fixed by us
556 # arg_split ~ shlex.split, but with unicode bugs fixed by us
557 lsplit = arg_split(text_until_cursor)[-1]
557 lsplit = arg_split(text_until_cursor)[-1]
558 except ValueError:
558 except ValueError:
559 # typically an unmatched ", or backslash without escaped char.
559 # typically an unmatched ", or backslash without escaped char.
560 if open_quotes:
560 if open_quotes:
561 lsplit = text_until_cursor.split(open_quotes)[-1]
561 lsplit = text_until_cursor.split(open_quotes)[-1]
562 else:
562 else:
563 return []
563 return []
564 except IndexError:
564 except IndexError:
565 # tab pressed on empty line
565 # tab pressed on empty line
566 lsplit = ""
566 lsplit = ""
567
567
568 if not open_quotes and lsplit != protect_filename(lsplit):
568 if not open_quotes and lsplit != protect_filename(lsplit):
569 # if protectables are found, do matching on the whole escaped name
569 # if protectables are found, do matching on the whole escaped name
570 has_protectables = True
570 has_protectables = True
571 text0,text = text,lsplit
571 text0,text = text,lsplit
572 else:
572 else:
573 has_protectables = False
573 has_protectables = False
574 text = os.path.expanduser(text)
574 text = os.path.expanduser(text)
575
575
576 if text == "":
576 if text == "":
577 return [text_prefix + protect_filename(f) for f in self.glob("*")]
577 return [text_prefix + protect_filename(f) for f in self.glob("*")]
578
578
579 # Compute the matches from the filesystem
579 # Compute the matches from the filesystem
580 m0 = self.clean_glob(text.replace('\\',''))
580 m0 = self.clean_glob(text.replace('\\',''))
581
581
582 if has_protectables:
582 if has_protectables:
583 # If we had protectables, we need to revert our changes to the
583 # If we had protectables, we need to revert our changes to the
584 # beginning of filename so that we don't double-write the part
584 # beginning of filename so that we don't double-write the part
585 # of the filename we have so far
585 # of the filename we have so far
586 len_lsplit = len(lsplit)
586 len_lsplit = len(lsplit)
587 matches = [text_prefix + text0 +
587 matches = [text_prefix + text0 +
588 protect_filename(f[len_lsplit:]) for f in m0]
588 protect_filename(f[len_lsplit:]) for f in m0]
589 else:
589 else:
590 if open_quotes:
590 if open_quotes:
591 # if we have a string with an open quote, we don't need to
591 # if we have a string with an open quote, we don't need to
592 # protect the names at all (and we _shouldn't_, as it
592 # protect the names at all (and we _shouldn't_, as it
593 # would cause bugs when the filesystem call is made).
593 # would cause bugs when the filesystem call is made).
594 matches = m0
594 matches = m0
595 else:
595 else:
596 matches = [text_prefix +
596 matches = [text_prefix +
597 protect_filename(f) for f in m0]
597 protect_filename(f) for f in m0]
598
598
599 #io.rprint('mm', matches) # dbg
599 #io.rprint('mm', matches) # dbg
600
600
601 # Mark directories in input list by appending '/' to their names.
601 # Mark directories in input list by appending '/' to their names.
602 matches = [x+'/' if os.path.isdir(x) else x for x in matches]
602 matches = [x+'/' if os.path.isdir(x) else x for x in matches]
603 return matches
603 return matches
604
604
605 def magic_matches(self, text):
605 def magic_matches(self, text):
606 """Match magics"""
606 """Match magics"""
607 #print 'Completer->magic_matches:',text,'lb',self.text_until_cursor # dbg
607 #print 'Completer->magic_matches:',text,'lb',self.text_until_cursor # dbg
608 # Get all shell magics now rather than statically, so magics loaded at
608 # Get all shell magics now rather than statically, so magics loaded at
609 # runtime show up too.
609 # runtime show up too.
610 lsm = self.shell.magics_manager.lsmagic()
610 lsm = self.shell.magics_manager.lsmagic()
611 line_magics = lsm['line']
611 line_magics = lsm['line']
612 cell_magics = lsm['cell']
612 cell_magics = lsm['cell']
613 pre = self.magic_escape
613 pre = self.magic_escape
614 pre2 = pre+pre
614 pre2 = pre+pre
615
615
616 # Completion logic:
616 # Completion logic:
617 # - user gives %%: only do cell magics
617 # - user gives %%: only do cell magics
618 # - user gives %: do both line and cell magics
618 # - user gives %: do both line and cell magics
619 # - no prefix: do both
619 # - no prefix: do both
620 # In other words, line magics are skipped if the user gives %% explicitly
620 # In other words, line magics are skipped if the user gives %% explicitly
621 bare_text = text.lstrip(pre)
621 bare_text = text.lstrip(pre)
622 comp = [ pre2+m for m in cell_magics if m.startswith(bare_text)]
622 comp = [ pre2+m for m in cell_magics if m.startswith(bare_text)]
623 if not text.startswith(pre2):
623 if not text.startswith(pre2):
624 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
624 comp += [ pre+m for m in line_magics if m.startswith(bare_text)]
625 return comp
625 return comp
626
626
627 def alias_matches(self, text):
627 def alias_matches(self, text):
628 """Match internal system aliases"""
628 """Match internal system aliases"""
629 #print 'Completer->alias_matches:',text,'lb',self.text_until_cursor # dbg
629 #print 'Completer->alias_matches:',text,'lb',self.text_until_cursor # dbg
630
630
631 # if we are not in the first 'item', alias matching
631 # if we are not in the first 'item', alias matching
632 # doesn't make sense - unless we are starting with 'sudo' command.
632 # doesn't make sense - unless we are starting with 'sudo' command.
633 main_text = self.text_until_cursor.lstrip()
633 main_text = self.text_until_cursor.lstrip()
634 if ' ' in main_text and not main_text.startswith('sudo'):
634 if ' ' in main_text and not main_text.startswith('sudo'):
635 return []
635 return []
636 text = os.path.expanduser(text)
636 text = os.path.expanduser(text)
637 aliases = self.alias_table.keys()
637 aliases = self.alias_table.keys()
638 if text == '':
638 if text == '':
639 return aliases
639 return aliases
640 else:
640 else:
641 return [a for a in aliases if a.startswith(text)]
641 return [a for a in aliases if a.startswith(text)]
642
642
643 def python_matches(self,text):
643 def python_matches(self,text):
644 """Match attributes or global python names"""
644 """Match attributes or global python names"""
645
645
646 #io.rprint('Completer->python_matches, txt=%r' % text) # dbg
646 #io.rprint('Completer->python_matches, txt=%r' % text) # dbg
647 if "." in text:
647 if "." in text:
648 try:
648 try:
649 matches = self.attr_matches(text)
649 matches = self.attr_matches(text)
650 if text.endswith('.') and self.omit__names:
650 if text.endswith('.') and self.omit__names:
651 if self.omit__names == 1:
651 if self.omit__names == 1:
652 # true if txt is _not_ a __ name, false otherwise:
652 # true if txt is _not_ a __ name, false otherwise:
653 no__name = (lambda txt:
653 no__name = (lambda txt:
654 re.match(r'.*\.__.*?__',txt) is None)
654 re.match(r'.*\.__.*?__',txt) is None)
655 else:
655 else:
656 # true if txt is _not_ a _ name, false otherwise:
656 # true if txt is _not_ a _ name, false otherwise:
657 no__name = (lambda txt:
657 no__name = (lambda txt:
658 re.match(r'.*\._.*?',txt) is None)
658 re.match(r'.*\._.*?',txt) is None)
659 matches = filter(no__name, matches)
659 matches = filter(no__name, matches)
660 except NameError:
660 except NameError:
661 # catches <undefined attributes>.<tab>
661 # catches <undefined attributes>.<tab>
662 matches = []
662 matches = []
663 else:
663 else:
664 matches = self.global_matches(text)
664 matches = self.global_matches(text)
665
665
666 return matches
666 return matches
667
667
668 def _default_arguments_from_docstring(self,doc):
668 def _default_arguments_from_docstring(self,doc):
669 """Parse first line of docstring of the
670 form 'min(iterable[, key=func])\n' to find
671 keyword argument names.
672 """
669 doc = doc.lstrip()
673 doc = doc.lstrip()
670 sio = StringIO.StringIO(doc)
674 sio = StringIO.StringIO(doc)
671 #care only the firstline
675 #care only the firstline
672 #docstring can be long
676 #docstring can be long
673 line = sio.readline()
677 line = sio.readline()
674 p = re.compile(r'^[\w]+\(([^)]*)\).*')
678 p = re.compile(r'^[\w]+\(([^)]*)\).*')
675 #'min(iterable[, key=func])\n' -> 'iterable[, key=func]'
679 #'min(iterable[, key=func])\n' -> 'iterable[, key=func]'
676 sig = p.search(line)
680 sig = p.search(line)
677 if sig is None: return []
681 if sig is None: return []
678 # iterable[, key=func]' -> ['iterable[' ,' key=func]']
682 # iterable[, key=func]' -> ['iterable[' ,' key=func]']
679 sig = sig.groups()[0].split(',')
683 sig = sig.groups()[0].split(',')
680 #use this if you want iterable to show up too
684 #use this if you want iterable to show up too
681 #q = re.compile('[\s|\[]*(\w+)(?:\s*=?\s*.*)')
685 #q = re.compile('[\s|\[]*(\w+)(?:\s*=?\s*.*)')
682 q = re.compile('[\s|\[]*(\w+)(?:\s*=\s*.*)')
686 q = re.compile('[\s|\[]*(\w+)(?:\s*=\s*.*)')
683 ret = []
687 ret = []
684 for s in sig:
688 for s in sig:
685 tmp = q.match(s)
689 tmp = q.match(s)
686 if tmp is not None:
690 if tmp is not None:
687 ret.append(tmp.groups()[0])
691 ret.append(tmp.groups()[0])
688 return ret
692 return ret
689
693
690 def _default_arguments(self, obj):
694 def _default_arguments(self, obj):
691 """Return the list of default arguments of obj if it is callable,
695 """Return the list of default arguments of obj if it is callable,
692 or empty list otherwise."""
696 or empty list otherwise."""
693 call_obj = obj
697 call_obj = obj
694 ret = []
698 ret = []
695 if inspect.isbuiltin(obj):
699 if inspect.isbuiltin(obj):
696 #parse builtin docstring for signature
700 #parse builtin docstring for signature
697 ret+=self._default_arguments_from_docstring(
701 ret+=self._default_arguments_from_docstring(
698 getattr(obj,'__doc__',''))
702 getattr(obj,'__doc__',''))
699 elif not (inspect.isfunction(obj) or inspect.ismethod(obj)):
703 elif not (inspect.isfunction(obj) or inspect.ismethod(obj)):
700 # for classes, check for __init__,__new__
704 # for classes, check for __init__,__new__
701 if inspect.isclass(obj):
705 if inspect.isclass(obj):
702 #for cython embded signature it puts
706 #for cython embded signature it puts
703 #__init__ signature in class docstring not __init__'s one
707 #__init__ signature in class docstring not __init__'s one
704 ret = self._default_arguments_from_docstring(
708 ret = self._default_arguments_from_docstring(
705 getattr(obj,'__doc__',''))
709 getattr(obj,'__doc__',''))
706 call_obj = (getattr(obj,'__init__',None) or
710 call_obj = (getattr(obj,'__init__',None) or
707 getattr(obj,'__new__',None))
711 getattr(obj,'__new__',None))
708 ret += self._default_arguments_from_docstring(
712 ret += self._default_arguments_from_docstring(
709 getattr(all_obj,'__doc__',''))
713 getattr(all_obj,'__doc__',''))
710 # for all others, check if they are __call__able
714 # for all others, check if they are __call__able
711 elif hasattr(obj, '__call__'):
715 elif hasattr(obj, '__call__'):
712 call_obj = obj.__call__
716 call_obj = obj.__call__
713
717
714 try:
718 try:
715 args,_,_1,defaults = inspect.getargspec(call_obj)
719 args,_,_1,defaults = inspect.getargspec(call_obj)
716 if defaults:
720 if defaults:
717 ret+=args[-len(defaults):]
721 ret+=args[-len(defaults):]
718 except TypeError:
722 except TypeError:
719 pass
723 pass
720
724
721 return list(set(ret))
725 return list(set(ret))
722
726
723 def python_func_kw_matches(self,text):
727 def python_func_kw_matches(self,text):
724 """Match named parameters (kwargs) of the last open function"""
728 """Match named parameters (kwargs) of the last open function"""
725
729
726 if "." in text: # a parameter cannot be dotted
730 if "." in text: # a parameter cannot be dotted
727 return []
731 return []
728 try: regexp = self.__funcParamsRegex
732 try: regexp = self.__funcParamsRegex
729 except AttributeError:
733 except AttributeError:
730 regexp = self.__funcParamsRegex = re.compile(r'''
734 regexp = self.__funcParamsRegex = re.compile(r'''
731 '.*?(?<!\\)' | # single quoted strings or
735 '.*?(?<!\\)' | # single quoted strings or
732 ".*?(?<!\\)" | # double quoted strings or
736 ".*?(?<!\\)" | # double quoted strings or
733 \w+ | # identifier
737 \w+ | # identifier
734 \S # other characters
738 \S # other characters
735 ''', re.VERBOSE | re.DOTALL)
739 ''', re.VERBOSE | re.DOTALL)
736 # 1. find the nearest identifier that comes before an unclosed
740 # 1. find the nearest identifier that comes before an unclosed
737 # parenthesis before the cursor
741 # parenthesis before the cursor
738 # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo"
742 # e.g. for "foo (1+bar(x), pa<cursor>,a=1)", the candidate is "foo"
739 tokens = regexp.findall(self.text_until_cursor)
743 tokens = regexp.findall(self.text_until_cursor)
740 tokens.reverse()
744 tokens.reverse()
741 iterTokens = iter(tokens); openPar = 0
745 iterTokens = iter(tokens); openPar = 0
742
746
743 for token in iterTokens:
747 for token in iterTokens:
744 if token == ')':
748 if token == ')':
745 openPar -= 1
749 openPar -= 1
746 elif token == '(':
750 elif token == '(':
747 openPar += 1
751 openPar += 1
748 if openPar > 0:
752 if openPar > 0:
749 # found the last unclosed parenthesis
753 # found the last unclosed parenthesis
750 break
754 break
751 else:
755 else:
752 return []
756 return []
753 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
757 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
754 ids = []
758 ids = []
755 isId = re.compile(r'\w+$').match
759 isId = re.compile(r'\w+$').match
756
760
757 while True:
761 while True:
758 try:
762 try:
759 ids.append(next(iterTokens))
763 ids.append(next(iterTokens))
760 if not isId(ids[-1]):
764 if not isId(ids[-1]):
761 ids.pop(); break
765 ids.pop(); break
762 if not next(iterTokens) == '.':
766 if not next(iterTokens) == '.':
763 break
767 break
764 except StopIteration:
768 except StopIteration:
765 break
769 break
766 # lookup the candidate callable matches either using global_matches
770 # lookup the candidate callable matches either using global_matches
767 # or attr_matches for dotted names
771 # or attr_matches for dotted names
768 if len(ids) == 1:
772 if len(ids) == 1:
769 callableMatches = self.global_matches(ids[0])
773 callableMatches = self.global_matches(ids[0])
770 else:
774 else:
771 callableMatches = self.attr_matches('.'.join(ids[::-1]))
775 callableMatches = self.attr_matches('.'.join(ids[::-1]))
772 argMatches = []
776 argMatches = []
773 for callableMatch in callableMatches:
777 for callableMatch in callableMatches:
774 try:
778 try:
775 namedArgs = self._default_arguments(eval(callableMatch,
779 namedArgs = self._default_arguments(eval(callableMatch,
776 self.namespace))
780 self.namespace))
777 except:
781 except:
778 continue
782 continue
779
783
780 for namedArg in namedArgs:
784 for namedArg in namedArgs:
781 if namedArg.startswith(text):
785 if namedArg.startswith(text):
782 argMatches.append("%s=" %namedArg)
786 argMatches.append("%s=" %namedArg)
783 return argMatches
787 return argMatches
784
788
785 def dispatch_custom_completer(self, text):
789 def dispatch_custom_completer(self, text):
786 #io.rprint("Custom! '%s' %s" % (text, self.custom_completers)) # dbg
790 #io.rprint("Custom! '%s' %s" % (text, self.custom_completers)) # dbg
787 line = self.line_buffer
791 line = self.line_buffer
788 if not line.strip():
792 if not line.strip():
789 return None
793 return None
790
794
791 # Create a little structure to pass all the relevant information about
795 # Create a little structure to pass all the relevant information about
792 # the current completion to any custom completer.
796 # the current completion to any custom completer.
793 event = Bunch()
797 event = Bunch()
794 event.line = line
798 event.line = line
795 event.symbol = text
799 event.symbol = text
796 cmd = line.split(None,1)[0]
800 cmd = line.split(None,1)[0]
797 event.command = cmd
801 event.command = cmd
798 event.text_until_cursor = self.text_until_cursor
802 event.text_until_cursor = self.text_until_cursor
799
803
800 #print "\ncustom:{%s]\n" % event # dbg
804 #print "\ncustom:{%s]\n" % event # dbg
801
805
802 # for foo etc, try also to find completer for %foo
806 # for foo etc, try also to find completer for %foo
803 if not cmd.startswith(self.magic_escape):
807 if not cmd.startswith(self.magic_escape):
804 try_magic = self.custom_completers.s_matches(
808 try_magic = self.custom_completers.s_matches(
805 self.magic_escape + cmd)
809 self.magic_escape + cmd)
806 else:
810 else:
807 try_magic = []
811 try_magic = []
808
812
809 for c in itertools.chain(self.custom_completers.s_matches(cmd),
813 for c in itertools.chain(self.custom_completers.s_matches(cmd),
810 try_magic,
814 try_magic,
811 self.custom_completers.flat_matches(self.text_until_cursor)):
815 self.custom_completers.flat_matches(self.text_until_cursor)):
812 #print "try",c # dbg
816 #print "try",c # dbg
813 try:
817 try:
814 res = c(event)
818 res = c(event)
815 if res:
819 if res:
816 # first, try case sensitive match
820 # first, try case sensitive match
817 withcase = [r for r in res if r.startswith(text)]
821 withcase = [r for r in res if r.startswith(text)]
818 if withcase:
822 if withcase:
819 return withcase
823 return withcase
820 # if none, then case insensitive ones are ok too
824 # if none, then case insensitive ones are ok too
821 text_low = text.lower()
825 text_low = text.lower()
822 return [r for r in res if r.lower().startswith(text_low)]
826 return [r for r in res if r.lower().startswith(text_low)]
823 except TryNext:
827 except TryNext:
824 pass
828 pass
825
829
826 return None
830 return None
827
831
828 def complete(self, text=None, line_buffer=None, cursor_pos=None):
832 def complete(self, text=None, line_buffer=None, cursor_pos=None):
829 """Find completions for the given text and line context.
833 """Find completions for the given text and line context.
830
834
831 This is called successively with state == 0, 1, 2, ... until it
835 This is called successively with state == 0, 1, 2, ... until it
832 returns None. The completion should begin with 'text'.
836 returns None. The completion should begin with 'text'.
833
837
834 Note that both the text and the line_buffer are optional, but at least
838 Note that both the text and the line_buffer are optional, but at least
835 one of them must be given.
839 one of them must be given.
836
840
837 Parameters
841 Parameters
838 ----------
842 ----------
839 text : string, optional
843 text : string, optional
840 Text to perform the completion on. If not given, the line buffer
844 Text to perform the completion on. If not given, the line buffer
841 is split using the instance's CompletionSplitter object.
845 is split using the instance's CompletionSplitter object.
842
846
843 line_buffer : string, optional
847 line_buffer : string, optional
844 If not given, the completer attempts to obtain the current line
848 If not given, the completer attempts to obtain the current line
845 buffer via readline. This keyword allows clients which are
849 buffer via readline. This keyword allows clients which are
846 requesting for text completions in non-readline contexts to inform
850 requesting for text completions in non-readline contexts to inform
847 the completer of the entire text.
851 the completer of the entire text.
848
852
849 cursor_pos : int, optional
853 cursor_pos : int, optional
850 Index of the cursor in the full line buffer. Should be provided by
854 Index of the cursor in the full line buffer. Should be provided by
851 remote frontends where kernel has no access to frontend state.
855 remote frontends where kernel has no access to frontend state.
852
856
853 Returns
857 Returns
854 -------
858 -------
855 text : str
859 text : str
856 Text that was actually used in the completion.
860 Text that was actually used in the completion.
857
861
858 matches : list
862 matches : list
859 A list of completion matches.
863 A list of completion matches.
860 """
864 """
861 #io.rprint('\nCOMP1 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
865 #io.rprint('\nCOMP1 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
862
866
863 # if the cursor position isn't given, the only sane assumption we can
867 # if the cursor position isn't given, the only sane assumption we can
864 # make is that it's at the end of the line (the common case)
868 # make is that it's at the end of the line (the common case)
865 if cursor_pos is None:
869 if cursor_pos is None:
866 cursor_pos = len(line_buffer) if text is None else len(text)
870 cursor_pos = len(line_buffer) if text is None else len(text)
867
871
868 # if text is either None or an empty string, rely on the line buffer
872 # if text is either None or an empty string, rely on the line buffer
869 if not text:
873 if not text:
870 text = self.splitter.split_line(line_buffer, cursor_pos)
874 text = self.splitter.split_line(line_buffer, cursor_pos)
871
875
872 # If no line buffer is given, assume the input text is all there was
876 # If no line buffer is given, assume the input text is all there was
873 if line_buffer is None:
877 if line_buffer is None:
874 line_buffer = text
878 line_buffer = text
875
879
876 self.line_buffer = line_buffer
880 self.line_buffer = line_buffer
877 self.text_until_cursor = self.line_buffer[:cursor_pos]
881 self.text_until_cursor = self.line_buffer[:cursor_pos]
878 #io.rprint('COMP2 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
882 #io.rprint('COMP2 %r %r %r' % (text, line_buffer, cursor_pos)) # dbg
879
883
880 # Start with a clean slate of completions
884 # Start with a clean slate of completions
881 self.matches[:] = []
885 self.matches[:] = []
882 custom_res = self.dispatch_custom_completer(text)
886 custom_res = self.dispatch_custom_completer(text)
883 if custom_res is not None:
887 if custom_res is not None:
884 # did custom completers produce something?
888 # did custom completers produce something?
885 self.matches = custom_res
889 self.matches = custom_res
886 else:
890 else:
887 # Extend the list of completions with the results of each
891 # Extend the list of completions with the results of each
888 # matcher, so we return results to the user from all
892 # matcher, so we return results to the user from all
889 # namespaces.
893 # namespaces.
890 if self.merge_completions:
894 if self.merge_completions:
891 self.matches = []
895 self.matches = []
892 for matcher in self.matchers:
896 for matcher in self.matchers:
893 try:
897 try:
894 self.matches.extend(matcher(text))
898 self.matches.extend(matcher(text))
895 except:
899 except:
896 # Show the ugly traceback if the matcher causes an
900 # Show the ugly traceback if the matcher causes an
897 # exception, but do NOT crash the kernel!
901 # exception, but do NOT crash the kernel!
898 sys.excepthook(*sys.exc_info())
902 sys.excepthook(*sys.exc_info())
899 else:
903 else:
900 for matcher in self.matchers:
904 for matcher in self.matchers:
901 self.matches = matcher(text)
905 self.matches = matcher(text)
902 if self.matches:
906 if self.matches:
903 break
907 break
904 # FIXME: we should extend our api to return a dict with completions for
908 # FIXME: we should extend our api to return a dict with completions for
905 # different types of objects. The rlcomplete() method could then
909 # different types of objects. The rlcomplete() method could then
906 # simply collapse the dict into a list for readline, but we'd have
910 # simply collapse the dict into a list for readline, but we'd have
907 # richer completion semantics in other evironments.
911 # richer completion semantics in other evironments.
908 self.matches = sorted(set(self.matches))
912 self.matches = sorted(set(self.matches))
909 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
913 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
910 return text, self.matches
914 return text, self.matches
911
915
912 def rlcomplete(self, text, state):
916 def rlcomplete(self, text, state):
913 """Return the state-th possible completion for 'text'.
917 """Return the state-th possible completion for 'text'.
914
918
915 This is called successively with state == 0, 1, 2, ... until it
919 This is called successively with state == 0, 1, 2, ... until it
916 returns None. The completion should begin with 'text'.
920 returns None. The completion should begin with 'text'.
917
921
918 Parameters
922 Parameters
919 ----------
923 ----------
920 text : string
924 text : string
921 Text to perform the completion on.
925 Text to perform the completion on.
922
926
923 state : int
927 state : int
924 Counter used by readline.
928 Counter used by readline.
925 """
929 """
926 if state==0:
930 if state==0:
927
931
928 self.line_buffer = line_buffer = self.readline.get_line_buffer()
932 self.line_buffer = line_buffer = self.readline.get_line_buffer()
929 cursor_pos = self.readline.get_endidx()
933 cursor_pos = self.readline.get_endidx()
930
934
931 #io.rprint("\nRLCOMPLETE: %r %r %r" %
935 #io.rprint("\nRLCOMPLETE: %r %r %r" %
932 # (text, line_buffer, cursor_pos) ) # dbg
936 # (text, line_buffer, cursor_pos) ) # dbg
933
937
934 # if there is only a tab on a line with only whitespace, instead of
938 # if there is only a tab on a line with only whitespace, instead of
935 # the mostly useless 'do you want to see all million completions'
939 # the mostly useless 'do you want to see all million completions'
936 # message, just do the right thing and give the user his tab!
940 # message, just do the right thing and give the user his tab!
937 # Incidentally, this enables pasting of tabbed text from an editor
941 # Incidentally, this enables pasting of tabbed text from an editor
938 # (as long as autoindent is off).
942 # (as long as autoindent is off).
939
943
940 # It should be noted that at least pyreadline still shows file
944 # It should be noted that at least pyreadline still shows file
941 # completions - is there a way around it?
945 # completions - is there a way around it?
942
946
943 # don't apply this on 'dumb' terminals, such as emacs buffers, so
947 # don't apply this on 'dumb' terminals, such as emacs buffers, so
944 # we don't interfere with their own tab-completion mechanism.
948 # we don't interfere with their own tab-completion mechanism.
945 if not (self.dumb_terminal or line_buffer.strip()):
949 if not (self.dumb_terminal or line_buffer.strip()):
946 self.readline.insert_text('\t')
950 self.readline.insert_text('\t')
947 sys.stdout.flush()
951 sys.stdout.flush()
948 return None
952 return None
949
953
950 # Note: debugging exceptions that may occur in completion is very
954 # Note: debugging exceptions that may occur in completion is very
951 # tricky, because readline unconditionally silences them. So if
955 # tricky, because readline unconditionally silences them. So if
952 # during development you suspect a bug in the completion code, turn
956 # during development you suspect a bug in the completion code, turn
953 # this flag on temporarily by uncommenting the second form (don't
957 # this flag on temporarily by uncommenting the second form (don't
954 # flip the value in the first line, as the '# dbg' marker can be
958 # flip the value in the first line, as the '# dbg' marker can be
955 # automatically detected and is used elsewhere).
959 # automatically detected and is used elsewhere).
956 DEBUG = False
960 DEBUG = False
957 #DEBUG = True # dbg
961 #DEBUG = True # dbg
958 if DEBUG:
962 if DEBUG:
959 try:
963 try:
960 self.complete(text, line_buffer, cursor_pos)
964 self.complete(text, line_buffer, cursor_pos)
961 except:
965 except:
962 import traceback; traceback.print_exc()
966 import traceback; traceback.print_exc()
963 else:
967 else:
964 # The normal production version is here
968 # The normal production version is here
965
969
966 # This method computes the self.matches array
970 # This method computes the self.matches array
967 self.complete(text, line_buffer, cursor_pos)
971 self.complete(text, line_buffer, cursor_pos)
968
972
969 try:
973 try:
970 return self.matches[state]
974 return self.matches[state]
971 except IndexError:
975 except IndexError:
972 return None
976 return None
General Comments 0
You need to be logged in to leave comments. Login now