From 388df5ccfce895d5b0b6afc0362193d6afdccf5f Mon Sep 17 00:00:00 2001 From: Fabio Zadrozny Date: Tue, 8 Mar 2022 14:49:04 -0300 Subject: [PATCH] Ignore None when used as keyword call. Fixes #597 --- .../src/robotframework_ls/impl/ast_utils.py | 23 +++++++++++-------- .../test_code_analysis.py | 22 ++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/robotframework-ls/src/robotframework_ls/impl/ast_utils.py b/robotframework-ls/src/robotframework_ls/impl/ast_utils.py index 40f5697ac3..e11d226ebe 100644 --- a/robotframework-ls/src/robotframework_ls/impl/ast_utils.py +++ b/robotframework-ls/src/robotframework_ls/impl/ast_utils.py @@ -763,19 +763,22 @@ def _create_keyword_usage_info(stack, node) -> Optional[KeywordUsageInfo]: from robot.api import Token if node.__class__.__name__ == "KeywordCall": - token = _strip_token_bdd_prefix(node.get_token(Token.KEYWORD)) - if token is not None: - node = _copy_of_node_replacing_token(node, token, Token.KEYWORD) - keyword_name = token.value - return KeywordUsageInfo(tuple(stack), node, token, keyword_name) + token_type = Token.KEYWORD elif node.__class__.__name__ in CLASSES_WITH_ARGUMENTS_AS_KEYWORD_CALLS_AS_SET: - node, token = _strip_node_and_token_bdd_prefix(node, Token.NAME) - if token is not None: - keyword_name = token.value - return KeywordUsageInfo(tuple(stack), node, token, keyword_name) + token_type = Token.NAME - return None + else: + return None + + node, token = _strip_node_and_token_bdd_prefix(node, token_type) + if token is None: + return None + + keyword_name = token.value + if keyword_name.lower() == "none": + return None + return KeywordUsageInfo(tuple(stack), node, token, keyword_name) def create_keyword_usage_info_from_token( diff --git a/robotframework-ls/tests/robotframework_ls_tests/test_code_analysis.py b/robotframework-ls/tests/robotframework_ls_tests/test_code_analysis.py index 7c657a7ef7..1bb51c1841 100644 --- a/robotframework-ls/tests/robotframework_ls_tests/test_code_analysis.py +++ b/robotframework-ls/tests/robotframework_ls_tests/test_code_analysis.py @@ -861,3 +861,25 @@ def test_code_analysis_deprecated_keyword(workspace, libspec_manager, data_regre """ _collect_errors(workspace, doc, data_regression) + + +def test_code_analysis_none(workspace, libspec_manager, data_regression): + workspace.set_root("case1", libspec_manager=libspec_manager) + doc = workspace.put_doc("case1.robot") + doc.source = """ +*** Settings *** +Test Setup none +Test Template None +Test Timeout NONE + +*** Test Cases *** +My Test Case + [Setup] none + [Template] NONE + [Tags] NONE + [Timeout] NONE + Should Be True ${TRUE} + +""" + + _collect_errors(workspace, doc, data_regression, basename="no_error")