Exemplo n.º 1
0
    def do_complete(self, data):
        completion = loads(data)
        source = completion.pop('source')
        pos = completion.pop('pos')
        try:
            script = Interpreter(source, [
                self.current_locals, self.get_globals()], **completion)
            with timeout_of(.75):
                completions = script.completions()
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion failed for %s' % data)
            return

        try:
            with timeout_of(.25):
                funs = script.call_signatures() or []
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion of function failed for %s' % data)
            return

        before = source[:pos]
        after = source[pos:]
        like = ''
        if len(completions):
            completion = completions[0]
            base = completion.name[
                :len(completion.name) - len(completion.complete)]
            if len(base):
                like = before[-len(base):]
                if len(like):
                    before = before[:-len(like)]
        try:
            suggest_obj = {
                'data': {
                    'start': before,
                    'end': after,
                    'like': like
                },
                'params': [{
                    'params': [p.description.replace('\n', '')
                               for p in fun.params],
                    'index': fun.index,
                    'module': fun.module_name,
                    'call_name': fun.name} for fun in funs],
                'completions': [{
                    'base': comp.name[
                        :len(comp.name) - len(comp.complete)],
                    'complete': comp.complete,
                    'description': comp.description
                } for comp in completions if comp.name.endswith(
                    comp.complete)]
            }
            self.db.send('Suggest|%s' % dump(suggest_obj))
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion generation failed for %s' % data)
Exemplo n.º 2
0
    def do_complete(self, data):
        script = Interpreter(data, [self.current_locals, self.get_globals()])
        try:
            with timeout_of(.75):
                completions = script.completions()
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion failed for %s' % data)
            return

        try:
            with timeout_of(.25):
                funs = script.call_signatures() or []
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion of function failed for %s' % data)
            return

        try:
            suggest_obj = {
                'params': [{
                    'params':
                    [p.get_code().replace('\n', '') for p in fun.params],
                    'index':
                    fun.index,
                    'module':
                    fun.module_name,
                    'call_name':
                    fun.name
                } for fun in funs],
                'completions': [{
                    'base':
                    comp.name[:len(comp.name) - len(comp.complete)],
                    'complete':
                    comp.complete,
                    'description':
                    comp.description
                } for comp in completions if comp.name.endswith(comp.complete)]
            }
            self.db.send('Suggest|%s' % dump(suggest_obj))
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion generation failed for %s' % data)
Exemplo n.º 3
0
Arquivo: ui.py Projeto: elyzabeth/wdb
    def do_complete(self, data):
        script = Interpreter(data, [self.current_locals, self.get_globals()])
        try:
            with timeout_of(.75):
                completions = script.completions()
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion failed for %s' % data)
            return

        try:
            with timeout_of(.25):
                funs = script.call_signatures() or []
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion of function failed for %s' % data)
            return

        try:
            suggest_obj = {
                'params': [{
                    'params': [p.get_code().replace('\n', '')
                               for p in fun.params],
                    'index': fun.index,
                    'module': fun.module_name,
                    'call_name': fun.name} for fun in funs],
                'completions': [{
                    'base': comp.name[
                        :len(comp.name) - len(comp.complete)],
                    'complete': comp.complete,
                    'description': comp.description
                } for comp in completions if comp.name.endswith(
                    comp.complete)]
            }
            self.db.send('Suggest|%s' % dump(suggest_obj))
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion generation failed for %s' % data)
Exemplo n.º 4
0
    def do_complete(self, data):
        completion = loads(data)
        source = completion.pop('source')
        pos = completion.pop('pos')
        try:
            script = Interpreter(
                source,
                [self.current_locals, self.get_globals()], **completion)
            with timeout_of(.75):
                completions = script.completions()
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion failed for %s' % data)
            return

        try:
            with timeout_of(.25):
                funs = script.call_signatures() or []
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion of function failed for %s' % data)
            return

        before = source[:pos]
        after = source[pos:]
        like = ''
        if len(completions):
            completion = completions[0]
            base = completion.name[:len(completion.name) -
                                   len(completion.complete)]
            if len(base):
                like = before[-len(base):]
                if len(like):
                    before = before[:-len(like)]
        try:
            suggest_obj = {
                'data': {
                    'start': before,
                    'end': after,
                    'like': like
                },
                'params': [{
                    'params':
                    [p.description.replace('\n', '') for p in fun.params],
                    'index':
                    fun.index,
                    'module':
                    fun.module_name,
                    'call_name':
                    fun.name
                } for fun in funs],
                'completions': [{
                    'base':
                    comp.name[:len(comp.name) - len(comp.complete)],
                    'complete':
                    comp.complete,
                    'description':
                    comp.description
                } for comp in completions if comp.name.endswith(comp.complete)]
            }
            self.db.send('Suggest|%s' % dump(suggest_obj))
        except Exception:
            self.db.send('Suggest')
            self.notify_exc('Completion generation failed for %s' % data)