--- rlcompleter.py Fri Feb 16 01:15:13 2001 +++ /home/rnd/rlcompleter.py Wed Aug 8 22:40:28 2001 @@ -39,7 +39,7 @@ """ -import readline +import readline, operator, re import __builtin__ import __main__ @@ -74,14 +74,22 @@ import keyword matches = [] n = len(text) - for list in [keyword.kwlist, - __builtin__.__dict__.keys(), - __main__.__dict__.keys()]: + for list in [keyword.kwlist]: for word in list: - if word[:n] == text and word != "__builtins__": + if word[:n] == text: matches.append(word) + for list in [__builtin__.__dict__.items(), + __main__.__dict__.items()]: + for word, val in list: + if word[:n] == text and word != "__builtins__": + if operator.isCallable(val): + matches.append(word+"(") + else: + matches.append(word) return matches + _attr_re = re.compile(r"(\w+(\.\w+)*)\.(\w*)") + def attr_matches(self, text): """Compute matches when text contains a dot. @@ -95,8 +103,7 @@ with a __getattr__ hook is evaluated. """ - import re - m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) + m = self._attr_re.match(text) if not m: return expr, attr = m.group(1, 3) @@ -109,7 +116,10 @@ n = len(attr) for word in words: if word[:n] == attr and word != "__builtins__": - matches.append("%s.%s" % (expr, word)) + if operator.isCallable(getattr(object, word)): + matches.append("%s.%s(" % (expr, word)) + else: + matches.append("%s.%s" % (expr, word)) return matches def get_class_members(klass):