예제 #1
0
    def _validate_import(self, module_line, lineno):
        """Try to validate the given iport line
        """

        if 'noqa' in module_line:
            return True

        jedi_project = get_default_project(self.filename)

        error = []
        error_string = 'can\'t import {0}'
        valid = True
        for word in module_line.split():
            if word in ('from', 'import', 'as'):
                continue

            offset = int(module_line.find(word) + len(word) / 2)
            s = Script(self.source,
                       lineno,
                       offset,
                       self.filename,
                       project=jedi_project)
            if not self.filename:
                s = Script(module_line, 1, offset, project=jedi_project)

            if not s.goto_assignments():
                if valid is True:
                    valid = False
                error.append(word)

        err = '' if valid else error_string.format(' '.join(error))
        return err, valid
예제 #2
0
파일: jedi_vim.py 프로젝트: hrtshu/vimrc
def get_project():
    try:
        vim_environment_path = vim_eval("b:jedi_environment_path")
    except VimError:
        vim_environment_path = ""

    if vim_environment_path in ("", None):
        vim_environment_path = vim_eval("g:jedi#environment_path")
    vim_project_path = vim_eval("g:jedi#project_path")
    vim_added_sys_path = vim_eval("g:jedi#added_sys_path")

    global _current_project_cache
    cache_key = dict(project_path=vim_project_path,
                     environment_path=vim_environment_path)
    if cache_key == _current_project_cache[0]:
        return _current_project_cache[1]

    if vim_environment_path in ("auto", "", None):
        environment_path = None
    else:
        environment_path = vim_environment_path

    if vim_project_path in ("auto", "", None):
        project_path = jedi.get_default_project().path
    else:
        project_path = vim_project_path

    project = jedi.Project(project_path,
                           environment_path=environment_path,
                           added_sys_path=vim_added_sys_path)

    _current_project_cache = cache_key, project
    return project
예제 #3
0
def get_project():
    vim_environment_path = vim_eval(
        "get(b:, 'jedi_environment_path', g:jedi#environment_path)")
    vim_project_path = vim_eval("g:jedi#project_path")

    vim_added_sys_path = vim_eval("get(g:, 'jedi#added_sys_path', [])")
    vim_added_sys_path += vim_eval("get(b:, 'jedi_added_sys_path', [])")

    global _current_project_cache
    cache_key = dict(project_path=vim_project_path,
                     environment_path=vim_environment_path,
                     added_sys_path=vim_added_sys_path)
    if cache_key == _current_project_cache[0]:
        return _current_project_cache[1]

    if vim_environment_path in ("auto", "", None):
        environment_path = None
    else:
        environment_path = vim_environment_path

    if vim_project_path in ("auto", "", None):
        project_path = jedi.get_default_project().path
    else:
        project_path = vim_project_path

    project = jedi.Project(project_path,
                           environment_path=environment_path,
                           added_sys_path=vim_added_sys_path)

    _current_project_cache = cache_key, project
    return project
예제 #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 jedi_script(self,
                    source,
                    line,
                    offset,
                    filename='',
                    encoding='utf8',
                    **kw):
        """Generate an usable Jedi Script
        """
        jedi_project = jedi.get_default_project(filename)

        return jedi.Script(source,
                           int(line),
                           int(offset),
                           filename,
                           encoding,
                           project=jedi_project)
예제 #7
0
def load_project():
    path = vim.eval('a:args')
    vim.vars['jedi#project_path'] = path
    env_path = vim_eval("g:jedi#environment_path")
    if env_path == 'auto':
        env_path = None
    if path:
        try:
            project = jedi.Project.load(path)
        except FileNotFoundError:
            project = jedi.Project(path, environment_path=env_path)
            project.save()
    else:
        project = jedi.get_default_project()
        path = project.path
        project.save()

    global _current_project_cache
    cache_key = dict(project_path=path, environment_path=env_path)
    _current_project_cache = cache_key, project
예제 #8
0
    def jedi_script(self,
                    source,
                    line,
                    offset,
                    filename='',
                    encoding='utf8',
                    **kw):
        """Generate an usable Jedi Script
        """
        jedi_project = jedi.get_default_project(filename)
        if self.settings.get("python_interpreter", "") != "":
            jedi_project._environment_path = self.settings.get(
                "python_interpreter")

        return jedi.Script(source,
                           int(line),
                           int(offset),
                           filename,
                           encoding,
                           project=jedi_project)
예제 #9
0
    def _GetJediProject(self, request_data, environment):
        settings = {'sys_path': []}
        settings.update(self._SettingsForRequest(request_data))
        settings['interpreter_path'] = environment.executable
        settings['sys_path'].extend(environment.get_sys_path())

        filepath = request_data['filepath']
        module = extra_conf_store.ModuleForSourceFile(filepath)
        # We don't warn the user if no extra conf file is found.
        if module:
            if hasattr(module, 'PythonSysPath'):
                settings['sys_path'] = module.PythonSysPath(**settings)
            LOGGER.debug('No PythonSysPath function defined in %s',
                         module.__file__)

        project_directory = settings.get('project_directory')
        if not project_directory:
            default_project = jedi.get_default_project(
                os.path.dirname(request_data['filepath']))
            project_directory = default_project._path
        return jedi.Project(project_directory,
                            sys_path=settings['sys_path'],
                            environment_path=settings['interpreter_path'])