Files
dotfiles/emacs/.emacs.d/anaconda-mode/0.1.9/anaconda_mode-0.1.9-py3.6.egg/anaconda_mode.py

111 lines
2.5 KiB
Python

"""
anaconda_mode
~~~~~~~~~~~~~
This is anaconda_mode autocompletion server.
:copyright: (c) 2013-2016 by Artem Malyshev.
:license: GPL3, see LICENSE for more details.
"""
from __future__ import (
absolute_import,
division,
print_function,
unicode_literals,
)
import sys
from functools import wraps
from jedi import Script
from service_factory import service_factory
def script_method(f):
"""Create jedi.Script instance and apply f to it."""
@wraps(f)
def wrapper(source, line, column, path):
return f(Script(source, line, column, path))
return wrapper
def process_definitions(f):
"""Call f and convert it result into json dumpable format."""
@wraps(f)
def wrapper(script):
return [{'name': definition.name,
'type': definition.type,
'module-name': definition.module_name,
'module-path': definition.module_path,
'line': definition.line,
'column': definition.column,
'docstring': definition.docstring(),
'description': definition.description,
'full-name': definition.full_name}
for definition in f(script)]
return wrapper
@script_method
@process_definitions
def complete(script):
"""Select auto-complete candidates for source position."""
return script.completions()
@script_method
@process_definitions
def goto_definitions(script):
"""Get definitions for thing under cursor."""
return script.goto_definitions()
@script_method
@process_definitions
def goto_assignments(script):
"""Get assignments for thing under cursor."""
return script.goto_assignments()
@script_method
@process_definitions
def usages(script):
"""Get usage information for thing under cursor."""
return script.usages()
@script_method
def eldoc(script):
"""Return eldoc format documentation string or ''."""
signatures = script.call_signatures()
if len(signatures) == 1:
signature = signatures[0]
return {
'name': signature.name,
'index': signature.index,
# NOTE: Remove 'param ' prefix from each description.
'params': [param.description[6:] for param in signature.params]
}
app = [complete, goto_definitions, goto_assignments, usages, eldoc]
def main(args):
host = args[0] if len(args) == 1 else '127.0.0.1'
service_factory(app, host, 0, 'anaconda_mode port {port}')
if __name__ == '__main__':
main(sys.argv[1:])