def get_resource_import_name_token(ast, token): """ If the given ast node is a library import and the token is its name, return the name token, otherwise, return None. """ from robocorp_ls_core.basic import isinstance_name if (token.type == token.NAME and isinstance_name(ast, "ResourceImport") and ast.name == token.value # I.e.: match the name, not the alias. ): return token return None
def get_keyword_name_token(ast, token): """ If the given token is a keyword, return the token, otherwise return None. :note: this goes hand-in-hand with iter_keyword_usage_tokens. """ from robocorp_ls_core.basic import isinstance_name if token.type == token.KEYWORD or ( token.type == token.NAME and isinstance_name(ast, ("Fixture", "TestTemplate")) ): return _strip_token_bdd_prefix(token) return None
def create_keyword_usage_info(stack, node) -> Optional[KeywordUsageInfo]: """ If this is a keyword usage node, return information on it, otherwise, returns None. :note: this goes hand-in-hand with get_keyword_name_token. """ from robot.api import Token from robocorp_ls_core.basic import isinstance_name 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) elif isinstance_name(node, ("Fixture", "TestTemplate")): node, token = _strip_node_and_token_bdd_prefix(node, Token.NAME) keyword_name = token.value return KeywordUsageInfo(tuple(stack), node, token, keyword_name) return None
def test_isinstance_name(): from robocorp_ls_core.basic import isinstance_name class A(object): pass class B(A): pass class C(B): pass for _ in range(2): assert isinstance_name(B(), "B") assert isinstance_name(B(), "A") assert isinstance_name(B(), "object") assert isinstance_name(B(), ("A", "C")) assert not isinstance_name(B(), "C") assert not isinstance_name(B(), ("C", "D"))