예제 #1
0
    def __init__(self, settings):
        """Prepare to call daemon.

        :type settings: dict
        """
        python_virtualenv = settings.get('python_virtualenv')
        python_interpreter = settings.get('python_interpreter')

        logger.debug('Jedi Environment: {0}'.format(
            (python_virtualenv, python_interpreter)))

        if python_virtualenv:
            self.env = environment.create_environment(python_virtualenv,
                                                      safe=False)
        elif python_interpreter:
            self.env = environment.create_environment(python_interpreter,
                                                      safe=False)
        else:
            self.env = jedi.get_default_environment()

        self.sys_path = self.env.get_sys_path()
        # prepare the extra packages if any
        extra_packages = settings.get('extra_packages')
        if extra_packages:
            self.sys_path = extra_packages + self.sys_path

        # how to autocomplete arguments
        self.complete_funcargs = settings.get('complete_funcargs')
예제 #2
0
    def __init__(self, settings):
        """Prepare to call daemon.

        :type settings: dict
        """
        python_virtualenv = settings.get('python_virtualenv')
        python_interpreter = settings.get('python_interpreter')

        logger.debug('Jedi Environment: {0}'.format(
            (python_virtualenv, python_interpreter))
        )

        if python_virtualenv:
            self.env = environment.create_environment(python_virtualenv,
                                                      safe=False)
        elif python_interpreter:
            self.env = environment.Environment(
                environment._get_python_prefix(python_interpreter),
                python_interpreter
            )
        else:
            self.env = jedi.get_default_environment()

        self.sys_path = self.env.get_sys_path()
        # prepare the extra packages if any
        extra_packages = settings.get('extra_packages')
        if extra_packages:
            self.sys_path = extra_packages + self.sys_path

        # how to autocomplete arguments
        self.complete_funcargs = settings.get('complete_funcargs')
예제 #3
0
    def __init__(self, view):
        self.window_id = view.window().id()
        settings = get_settings(view)

        # infer `python_interpreter` and `python_virtualenv`
        python_interpreter = settings.get('python_interpreter')
        python_virtualenv = settings.get('python_virtualenv')

        if python_interpreter and not python_virtualenv:
            python_virtualenv = up(up(python_interpreter))

        if python_virtualenv and not python_interpreter:
            python_interpreter = join(python_virtualenv, 'bin', 'python')

        if python_virtualenv and python_interpreter:
            self.env = Environment(python_virtualenv, python_interpreter)
        else:
            self.env = jedi.get_default_environment()

        # prepare the extra packages if any
        extra_packages = settings.get('extra_packages')
        if extra_packages:
            self.sys_path = self.env.get_sys_path() + extra_packages
        else:
            self.sys_path = None

        # how to autocomplete arguments
        self.complete_funcargs = settings.get('complete_funcargs')
예제 #4
0
    def bf_initialize(
            self, params: types.InitializeParams) -> types.InitializeResult:
        result = super().bf_initialize(params)
        global jediEnvironment
        global jediProject
        global completionFunction
        global documentSymbolFunction
        global hoverMarkup
        global hoverFunction
        if params.initialization_options:
            venv = params.initialization_options.get('venv', None)
        else:
            venv = None
        if venv:
            jediEnvironment = create_environment(venv, safe=False)
        else:
            jediEnvironment = get_default_environment()
        jediProject = get_default_project(getattr(params, 'rootPath', None))
        logging.info(f'Jedi environment python: {jediEnvironment.executable}')
        logging.info('Jedi environment sys_path:')
        for p in jediEnvironment.get_sys_path():
            logging.info(f'  {p}')
        logging.info(f'Jedi project path: {jediProject._path}')

        def get_attr(o, *attrs):
            try:
                for attr in attrs:
                    o = getattr(o, attr)
                return o
            except AttributeError:
                return None

        caps = getattr(params.capabilities, 'text_document', None)

        if get_attr(caps, 'completion', 'completion_item', 'snippet_support'):
            completionFunction = _completions_snippets
        else:
            completionFunction = _completions

        if get_attr(caps, 'document_symbol',
                    'hierarchical_document_symbol_support'):
            documentSymbolFunction = _document_symbol_hierarchy
        else:
            documentSymbolFunction = _document_symbol_plain

        hover = get_attr(caps, 'hover', 'content_format')
        if hover:
            hoverMarkup = hover[0]
        if hoverMarkup == types.MarkupKind.Markdown:
            hoverFunction = _docstring_markdown
        else:
            hoverFunction = _docstring

        # pygls does not currently support serverInfo of LSP v3.15
        result.server_info = types.ServerInfo(
            name='anakinls',
            version=get_version(),
        )
        return result
예제 #5
0
    def bf_initialize(
            self, params: types.InitializeParams) -> types.InitializeResult:
        result = super().bf_initialize(params)
        global jediEnvironment
        global jediProject
        global completionFunction
        global documentSymbolFunction
        venv = getattr(params.initializationOptions, 'venv', None)
        if venv:
            jediEnvironment = create_environment(venv, False)
        else:
            jediEnvironment = get_default_environment()
        jediProject = get_default_project(getattr(params, 'rootPath', None))
        logging.info(f'Jedi environment python: {jediEnvironment.executable}')
        logging.info('Jedi environment sys_path:')
        for p in jediEnvironment.get_sys_path():
            logging.info(f'  {p}')
        logging.info(f'Jedi project path: {jediProject._path}')

        def get_attr(o, *attrs):
            try:
                for attr in attrs:
                    o = getattr(o, attr)
                return o
            except AttributeError:
                return None

        caps = getattr(params.capabilities, 'textDocument', None)

        if get_attr(caps, 'completion', 'completionItem', 'snippetSupport'):
            completionFunction = _completions_snippets
        else:
            completionFunction = _completions

        if get_attr(caps, 'documentSymbol',
                    'hierarchicalDocumentSymbolSupport'):
            documentSymbolFunction = _document_symbol_hierarchy
        else:
            documentSymbolFunction = _document_symbol_plain

        result.capabilities.textDocumentSync = types.TextDocumentSyncOptions(
            open_close=True,
            change=types.TextDocumentSyncKind.INCREMENTAL,
            save=types.SaveOptions())
        result.capabilities.codeActionProvider = types.CodeActionOptions([
            types.CodeActionKind.RefactorInline,
            types.CodeActionKind.RefactorExtract
        ])
        # pygls does not currently support serverInfo of LSP v3.15
        result.serverInfo = {
            'name': 'anakinls',
            'version': get_version(),
        }
        return result
예제 #6
0
    def __init__(self, vim):
        Ncm2Source.__init__(self, vim)

        env = vim.vars['ncm2_jedi#environment']
        if not env:
            self._env = jedi.get_default_environment()
        else:
            self._env = jedi.create_environment(env)

        rc_settings = vim.vars['ncm2_jedi#settings']
        for name in rc_settings:
            setattr(settings, name, rc_settings[name])
예제 #7
0
    def __init__(self, vim):
        Ncm2Source.__init__(self, vim)

        env = vim.vars['ncm2_jedi#environment']
        if not env:
            osenv = os.environ
            if 'VIRTUAL_ENV' not in osenv and 'CONDA_PREFIX' in osenv:
                # if conda is active
                self._env = jedi.create_environment(osenv['CONDA_PREFIX'])
            else:
                # get_default_environment handles VIRTUAL_ENV
                self._env = jedi.get_default_environment()
        else:
            self._env = jedi.create_environment(env)

        rc_settings = vim.vars['ncm2_jedi#settings']
        for name in rc_settings:
            setattr(settings, name, rc_settings[name])
예제 #8
0
  def _EnvironmentForInterpreterPath( self, interpreter_path ):
    if interpreter_path:
      resolved_interpreter_path = FindExecutable(
        ExpandVariablesInPath( interpreter_path ) )
      if not resolved_interpreter_path:
        raise RuntimeError( 'Cannot find Python interpreter path {}.'.format(
          interpreter_path ) )
      interpreter_path = os.path.normpath( resolved_interpreter_path )

    try:
      return self._environment_for_interpreter_path[ interpreter_path ]
    except KeyError:
      pass

    # Assume paths specified by the user are safe.
    environment = ( jedi.get_default_environment() if not interpreter_path else
                    jedi.create_environment( interpreter_path, safe = False ) )
    self._environment_for_interpreter_path[ interpreter_path ] = environment
    return environment
예제 #9
0
  def _EnvironmentForInterpreterPath( self, interpreter_path ):
    if interpreter_path:
      resolved_interpreter_path = FindExecutable(
        ExpandVariablesInPath( interpreter_path ) )
      if not resolved_interpreter_path:
        raise RuntimeError( 'Cannot find Python interpreter path {}.'.format(
          interpreter_path ) )
      interpreter_path = os.path.normpath( resolved_interpreter_path )

    try:
      return self._environment_for_interpreter_path[ interpreter_path ]
    except KeyError:
      pass

    # Assume paths specified by the user are safe.
    environment = ( jedi.get_default_environment() if not interpreter_path else
                    jedi.create_environment( interpreter_path, safe = False ) )
    self._environment_for_interpreter_path[ interpreter_path ] = environment
    return environment
예제 #10
0
    def __init__(self, view, settings):
        """Prepare to call daemon.

        :type settings: dict

        Parameters
        ----------
        settings : TYPE
            Description
        """
        view_context = utils.get_view_context(view)
        python_virtualenv = settings.get("python_virtualenv").get(
            sublime.platform(), "")
        python_interpreter = settings.get("python_interpreter").get(
            sublime.platform(), "")

        if python_virtualenv:
            logger.debug("Jedi Environment: {0}".format(python_virtualenv))
            self.env = environment.create_environment(
                utils.substitute_variables(view_context, python_virtualenv),
                safe=False)
        elif python_interpreter:
            logger.debug("Jedi Environment: {0}".format(python_interpreter))
            self.env = environment.create_environment(
                utils.substitute_variables(view_context, python_interpreter),
                safe=False)
        else:
            self.env = jedi.get_default_environment()

        self.sys_path = self.env.get_sys_path()
        # prepare the extra packages if any
        extra_packages = settings.get("python_package_paths").get(
            sublime.platform(), [])

        if extra_packages:
            logger.debug("Jedi Extra Packages: {0}".format(extra_packages))
            self.sys_path = utils.substitute_variables(
                view_context, extra_packages) + self.sys_path
예제 #11
0
 def setUp(self):
     super(JediBackendTestCase, self).setUp()
     env = jedi.get_default_environment().path
     self.backend = jedibackend.JediBackend(self.project_root, env)