111 lines
2.5 KiB
Python
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:])
|