def find_definition(completion_context): """ :param CompletionContext completion_context: :rtype: list(IDefinition) :note: Definitions may be found even if a given source file no longer exists at this place (callers are responsible for validating entries). """ from robotframework_ls.impl import ast_utils from robotframework_ls.impl.collect_keywords import collect_keywords from robotframework_ls.impl.string_matcher import RobotStringMatcher from robotframework_ls.impl.variable_completions import collect_variables token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token(token_info.node, token_info.token) if token is not None: collector = _FindDefinitionKeywordCollector(token.value) collect_keywords(completion_context, collector) return collector.matches token = ast_utils.get_library_import_name_token( token_info.node, token_info.token) if token is not None: libspec_manager = completion_context.workspace.libspec_manager library_doc = libspec_manager.get_library_info( token.value, create=True, current_doc_uri=completion_context.doc.uri) if library_doc is not None: definition = _DefinitionFromLibrary(library_doc) return [definition] token = ast_utils.get_resource_import_name_token( token_info.node, token_info.token) if token is not None: resource_import_as_doc = completion_context.get_resource_import_as_doc( token_info.node) if resource_import_as_doc is not None: return [_DefinitionFromResource(resource_import_as_doc)] token_info = completion_context.get_current_variable() if token_info is not None: token = token_info.token value = token.value collector = _FindDefinitionVariablesCollector( completion_context.sel, token, RobotStringMatcher(value)) collect_variables(completion_context, collector) return collector.matches return []
def complete(completion_context: ICompletionContext) -> List[dict]: from robotframework_ls.impl.collect_keywords import collect_keywords from robotframework_ls.impl import ast_utils token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token(token_info.node, token_info.token) if token is not None: collector = _Collector(completion_context.sel, token) collect_keywords(completion_context, collector) return collector.completion_items return []
def _threaded_complete_all(self, doc_uri, line, col, monitor: IMonitor): from robotframework_ls.impl import section_name_completions from robotframework_ls.impl import keyword_completions from robotframework_ls.impl import variable_completions from robotframework_ls.impl import filesystem_section_completions from robotframework_ls.impl import keyword_parameter_completions from robotframework_ls.impl import auto_import_completions from robotframework_ls.impl.collect_keywords import ( collect_keyword_name_to_keyword_found, ) from robotframework_ls.impl import ast_utils completion_context = self._create_completion_context( doc_uri, line, col, monitor ) if completion_context is None: return [] ret = section_name_completions.complete(completion_context) if not ret: ret.extend(filesystem_section_completions.complete(completion_context)) if not ret: token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token( token_info.node, token_info.token ) if token is not None: keyword_name_to_keyword_found: Dict[ str, List[IKeywordFound] ] = collect_keyword_name_to_keyword_found(completion_context) ret.extend(keyword_completions.complete(completion_context)) ret.extend( auto_import_completions.complete( completion_context, keyword_name_to_keyword_found ) ) return ret if not ret: ret.extend(variable_completions.complete(completion_context)) if not ret: ret.extend(keyword_parameter_completions.complete(completion_context)) return ret
def _complete_from_completion_context(self, completion_context): from robotframework_ls.impl import section_name_completions from robotframework_ls.impl import keyword_completions from robotframework_ls.impl import variable_completions from robotframework_ls.impl import dictionary_completions from robotframework_ls.impl import filesystem_section_completions from robotframework_ls.impl import keyword_parameter_completions from robotframework_ls.impl import auto_import_completions from robotframework_ls.impl.collect_keywords import ( collect_keyword_name_to_keyword_found, ) from robotframework_ls.impl import ast_utils ret = section_name_completions.complete(completion_context) if not ret: ret.extend(filesystem_section_completions.complete(completion_context)) if not ret: token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token( token_info.node, token_info.token ) if token is not None: keyword_name_to_keyword_found: Dict[ str, List[IKeywordFound] ] = collect_keyword_name_to_keyword_found(completion_context) ret.extend(keyword_completions.complete(completion_context)) ret.extend( auto_import_completions.complete( completion_context, keyword_name_to_keyword_found ) ) return ret if not ret: ret.extend(variable_completions.complete(completion_context)) if not ret: ret.extend(dictionary_completions.complete(completion_context)) if not ret: ret.extend(keyword_parameter_completions.complete(completion_context)) return ret
def find_keyword_definition( completion_context: ICompletionContext, token_info: TokenInfo) -> Optional[Sequence[IKeywordDefinition]]: """ Find a definition only considering Keywords. The token info must be already computed and must match the completion context location. """ from robotframework_ls.impl.collect_keywords import collect_keywords from robotframework_ls.impl import ast_utils token = ast_utils.get_keyword_name_token(token_info.node, token_info.token) if token is not None: collector = _FindDefinitionKeywordCollector(token.value) collect_keywords(completion_context, collector) return collector.matches return None
def find_definition(completion_context): """ :param CompletionContext completion_context: :rtype: list(IDefinition) :note: Definitions may be found even if a given source file no longer exists at this place (callers are responsible for validating entries). """ from robotframework_ls.impl.collect_keywords import collect_keywords from robotframework_ls.impl import ast_utils token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token(token_info.node, token_info.token) if token is not None: collector = _Collector(token.value) collect_keywords(completion_context, collector) return collector.matches return []
def complete( completion_context: ICompletionContext, imported_keyword_name_to_keyword: Dict[str, List[IKeywordFound]], ): from robotframework_ls.impl import ast_utils token_info = completion_context.get_current_token() if token_info is not None: token = ast_utils.get_keyword_name_token(token_info.node, token_info.token) if token is not None: import_location_info = _obtain_import_location_info( completion_context) collector = _Collector( completion_context.sel, token, import_location_info, imported_keyword_name_to_keyword, ) _collect_auto_import_completions(completion_context, collector) return collector.completion_items return []