--- a/DebugClients/Python/DebugClientBase.py Wed Feb 17 22:11:12 2016 +0100 +++ b/DebugClients/Python/DebugClientBase.py Mon Feb 22 22:26:21 2016 +0100 @@ -1887,8 +1887,7 @@ """ completerDelims = ' \t\n`~!@#$%^&*()-=+[{]}\\|;:\'",<>/?' - completions = [] - state = 0 + completions = set() # find position of last delim character pos = -1 while pos >= -len(text): @@ -1900,20 +1899,38 @@ break pos -= 1 + # Get local and global completions try: - comp = self.complete(text, state) + localdict = self.currentThread.getFrameLocals(self.framenr) + localCompleter = Completer(localdict).complete + self.__getCompletionList(text, localCompleter, completions) + except AttributeError: + pass + self.__getCompletionList(text, self.complete, completions) + + self.write("%s%s||%s\n" % (DebugProtocol.ResponseCompletion, + unicode(list(completions)), text)) + + def __getCompletionList(self, text, completer, completions): + """ + Private method to create a completions list. + + @param text text to complete (string) + @param completer completer methode + @param completions set where to add new completions strings (set) + """ + state = 0 + try: + comp = completer(text, state) except Exception: comp = None while comp is not None: - completions.append(comp) + completions.add(comp) state += 1 try: - comp = self.complete(text, state) + comp = completer(text, state) except Exception: comp = None - - self.write("%s%s||%s\n" % (DebugProtocol.ResponseCompletion, - unicode(completions), text)) def startDebugger(self, filename=None, host=None, port=None, enableTrace=1, exceptions=1, tracePython=0, redirect=1):