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
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
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
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
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
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)
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
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)
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'])