コード例 #1
0
def test_completion_not_duplicated(workspace, cases, libspec_manager, workspace_dir):
    from robocorp_ls_core.lsp import TextDocumentItem
    import os.path
    from robocorp_ls_core import uris
    from robotframework_ls.robot_config import RobotConfig
    from robotframework_ls.impl.collect_keywords import (
        collect_keyword_name_to_keyword_found,
    )
    from robotframework_ls.impl.protocols import IKeywordFound

    cases.copy_to("case_inner_keywords", workspace_dir)

    workspace.set_root(workspace_dir, libspec_manager=libspec_manager)
    config = RobotConfig()
    config.update({"robot.pythonpath": [workspace_dir]})
    libspec_manager.config = config

    uri = uris.from_fs_path(os.path.join(workspace_dir, "inner", "case_inner.robot"))
    workspace.ws.put_document(
        TextDocumentItem(
            uri,
            text="""*** Settings ***
Resource    case_root.robot

*** Keywords ***
Check with keyword at inner
    [Arguments]         ${arg1}     ${arg2}
    Should Be Equal     ${arg1}     ${arg2}

*** Test Cases ***
Testing Completion Here
    Check with ke""",
        )
    )
    doc = workspace.ws.get_document(uri, accept_from_file=False)

    from robotframework_ls.impl.completion_context import CompletionContext
    from robotframework_ls.impl import auto_import_completions

    workspace.ws.wait_for_check_done(5)
    context = CompletionContext(doc, workspace=workspace.ws, config=config)

    keyword_name_to_keyword_found: Dict[
        str, List[IKeywordFound]
    ] = collect_keyword_name_to_keyword_found(context)

    completions = auto_import_completions.complete(
        context, keyword_name_to_keyword_found
    )

    # I.e.: all the related symbols are already imported and will be shown
    # in the regular completion.
    assert len(completions) == 0
コード例 #2
0
def test_completion_with_auto_import_duplicated(workspace,
                                                setup_case2_in_dir_doc):
    from robotframework_ls.impl.completion_context import CompletionContext
    from robotframework_ls.impl import auto_import_completions
    from robotframework_ls.impl.protocols import IKeywordFound
    from robotframework_ls.impl.collect_keywords import (
        collect_keyword_name_to_keyword_found, )
    from robocorp_ls_core.lsp import TextDocumentItem

    doc = workspace.get_doc("case1.robot")

    doc.source = """
*** Keywords ***
KeywordInCase1
    In Lib 2
"""

    # Just create a dummy entry for KeywordInCase1.
    doc_foobar = workspace.ws.put_document(
        TextDocumentItem(
            "foobar",
            text="""
*** Keywords ***
KeywordInCase1
    In Lib 2
""",
        ))

    keyword_name_to_keyword_found: Dict[
        str, List[IKeywordFound]] = collect_keyword_name_to_keyword_found(
            CompletionContext(doc_foobar, workspace=workspace.ws))

    doc2 = setup_case2_in_dir_doc
    doc2.source = """
*** Test Cases ***
User can call library
    KeywordInCa"""

    completions = auto_import_completions.complete(
        CompletionContext(doc2, workspace=workspace.ws),
        keyword_name_to_keyword_found)

    assert len(completions) == 1
    apply_completion(doc2, completions[0])

    assert (doc2.source == """*** Settings ***
Resource    ../case1.robot

*** Test Cases ***
User can call library
    case1.KeywordInCase1""")
コード例 #3
0
ファイル: server.py プロジェクト: pkouliev/robotframework-lsp
    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
コード例 #4
0
ファイル: server.py プロジェクト: robocorp/robotframework-lsp
    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