示例#1
0
    def test_reference_reachability_with_referenced_all(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'g:explicit_global_var': False,
            'b:buffer_local_var': False,
            'w:window_local_var': False,
            't:tab_local_var': False,
            's:script_local_var': False,
            'implicit_global_var': False,
            'g:implicit_global_var': False,
            '$ENV_VAR': False,
            '@"': False,
            '&opt_var': False,
            'v:count': False,
            'count': False,
            'g:': False,
            'b:': False,
            'w:': False,
            't:': False,
            'v:': False,
            'v:key': False,
            'v:val': False,
            'filter': False,
            'g:dict': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin,
                                       ast)
示例#2
0
    def test_reference_reachability_with_referenced_all_params(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_PARAMS)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'a:': False,
            'l:': False,
            'a:0': False,
            'a:000': False,

            'a:param': False,

            'a:param1': False,
            'a:param2': False,

            'a:param_var': False,

            'a:param_with_range': False,
            'a:firstline': False,
            'a:lastline': False,
        }

        self.assertVariablesUndeclared(expected_variables_unused,
                                       scope_plugin,
                                       ast)
示例#3
0
    def test_reference_reachability_with_referenced_all(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'g:explicit_global_var': False,
            'b:buffer_local_var': False,
            'w:window_local_var': False,
            't:tab_local_var': False,
            's:script_local_var': False,
            'implicit_global_var': False,
            'g:implicit_global_var': False,
            '$ENV_VAR': False,
            '@"': False,
            '&opt_var': False,
            'v:count': False,
            'count': False,
            'g:': False,
            'b:': False,
            'w:': False,
            't:': False,
            'v:': False,
            'v:key': False,
            'v:val': False,
            'filter': False,
            'g:dict': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin, ast)
示例#4
0
    def assertProcessing(self, file_path, expected_scope_tree):
        parser = Parser()
        ast = parser.parse_file(file_path)

        plugin = ScopePlugin()
        plugin.process(ast)

        self.assertScopeTree(ast['vint_scope_tree'], expected_scope_tree)
示例#5
0
    def assertProcessing(self, file_path, expected_scope_tree):
        parser = Parser()
        ast = parser.parse_file(file_path)

        plugin = ScopePlugin()
        plugin.process(ast)

        self.assertScopeTree(ast['vint_scope_tree'], expected_scope_tree)
示例#6
0
    def test_reference_reachability_with_unreferenced_var(self):
        ast = self.create_ast(Fixtures.UNREFERENCED_VAR)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            's:implicit_global_var': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin, ast)
示例#7
0
    def test_reference_reachability_with_unreferenced_var(self):
        ast = self.create_ast(Fixtures.UNREFERENCED_VAR)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            's:implicit_global_var': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin,
                                       ast)
示例#8
0
    def test_reference_reachability_with_unanalyzable(self):
        ast = self.create_ast(Fixtures.UNANALYZABLE)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'list_slice': True,
            'dict': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin, ast)
示例#9
0
    def test_reference_reachability_with_unanalyzable(self):
        ast = self.create_ast(Fixtures.UNANALYZABLE)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'list_slice': True,
            'dict': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin,
                                       ast)
示例#10
0
    def test_declarative_identifiers_referenced_with_referenced_all_func(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'g:ExplicitGlobalFunc': False,
            's:ScriptLocalFunc': False,
            'ImplicitGlobalFunc': False,
        }

        self.assertVariablesUnused(expected_variables_unused, scope_plugin,
                                   ast)
示例#11
0
    def test_reference_reachability_with_referenced_all_funcs_in_func(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_FUNC_IN_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'g:ExplicitGlobalFunc': False,
            'ImplicitGlobalFunc': False,
            's:ExplicitScriptLocalFunc': False,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin, ast)
示例#12
0
    def test_declarative_identifiers_referenced_with_referenced_all_func(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'g:ExplicitGlobalFunc': False,
            's:ScriptLocalFunc': False,
            'ImplicitGlobalFunc': False,
        }

        self.assertVariablesUnused(expected_variables_unused,
                                   scope_plugin,
                                   ast)
示例#13
0
    def test_reference_reachability_with_referenced_all_funcs_in_func(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_FUNC_IN_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'g:ExplicitGlobalFunc': False,
            'ImplicitGlobalFunc': False,
            's:ExplicitScriptLocalFunc': False,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin,
                                       ast)
示例#14
0
    def test_declarative_identifiers_referenced_with_unreferenced_func_in_func(
            self):
        ast = self.create_ast(Fixtures.UNREFERENCED_FUNC_IN_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'FuncContext': True,
            'g:ExplicitGlobalFunc': True,
            'ImplicitGlobalFunc': True,
            's:ExplicitScriptLocalFunc': True,
        }

        self.assertVariablesUnused(expected_variables_unused, scope_plugin,
                                   ast)
示例#15
0
    def test_declarative_identifiers_referenced_with_unreferenced_func_in_func(self):
        ast = self.create_ast(Fixtures.UNREFERENCED_FUNC_IN_FUNC)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'FuncContext': True,
            'g:ExplicitGlobalFunc': True,
            'ImplicitGlobalFunc': True,
            's:ExplicitScriptLocalFunc': True,
        }

        self.assertVariablesUnused(expected_variables_unused,
                                   scope_plugin,
                                   ast)
示例#16
0
    def test_reference_reachability_with_unreferenced_params(self):
        ast = self.create_ast(Fixtures.UNREFERENCED_PARAMS)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'param': True,
            'a:1': True,
            'a:firstline': True,
            'a:lastline': True,
            'a:18': True,
            'a:19': True,
            'a:20': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin, ast)
示例#17
0
    def test_process_with_builtin(self):
        parser = Parser()
        ast = parser.parse_file(Fixtures['BUILTIN'])

        plugin = ScopePlugin()
        plugin.process(ast)

        expected_builtin_flags = {
            'abs': True,
            'sin': True,
            'strlen': True,
            'g:MyFunction': False,
        }

        # Keep identifier name that traverser visited
        identifiers_checking_map = {
            'abs': False,
            'sin': False,
            'strlen': False,
            'g:MyFunction': False,
        }

        def test_identifier(node):
            if NodeType(node['type']) is not NodeType.IDENTIFIER:
                return

            identifier = node

            # We focus to non-definition identifier
            if identifier[ScopePlugin.DEFINITION_IDENTIFIER_FLAG_KEY]:
                return

            identifier_name = identifier['value']
            identifiers_checking_map[identifier_name] = True

            is_builtin_identifier = identifier[
                ScopePlugin.BUILTIN_IDENTIFIER_FLAG_KEY]
            expected_builtin_flag = expected_builtin_flags[identifier_name]

            self.assertEqual(is_builtin_identifier, expected_builtin_flag)

        traverse(ast, on_enter=test_identifier)
        self.assertTrue(all(identifiers_checking_map.values()))
示例#18
0
    def test_process_with_builtin(self):
        parser = Parser()
        ast = parser.parse_file(Fixtures['BUILTIN'])

        plugin = ScopePlugin()
        plugin.process(ast)

        expected_builtin_flags = {
            'abs': True,
            'sin': True,
            'strlen': True,
            'g:MyFunction': False,
        }

        # Keep identifier name that traverser visited
        identifiers_checking_map = {
            'abs': False,
            'sin': False,
            'strlen': False,
            'g:MyFunction': False,
        }

        def test_identifier(node):
            if NodeType(node['type']) is not NodeType.IDENTIFIER:
                return

            identifier = node

            # We focus to non-definition identifier
            if identifier[ScopePlugin.DEFINITION_IDENTIFIER_FLAG_KEY]:
                return

            identifier_name = identifier['value']
            identifiers_checking_map[identifier_name] = True

            is_builtin_identifier = identifier[ScopePlugin.BUILTIN_IDENTIFIER_FLAG_KEY]
            expected_builtin_flag = expected_builtin_flags[identifier_name]

            self.assertEqual(is_builtin_identifier, expected_builtin_flag)

        traverse(ast, on_enter=test_identifier)
        self.assertTrue(all(identifiers_checking_map.values()))
示例#19
0
    def test_reference_reachability_with_unreferenced_params(self):
        ast = self.create_ast(Fixtures.UNREFERENCED_PARAMS)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_undeclared = {
            'param': True,
            'a:1': True,
            'a:firstline': True,
            'a:lastline': True,

            'a:18': True,
            'a:19': True,
            'a:20': True,
        }

        self.assertVariablesUndeclared(expected_variables_undeclared,
                                       scope_plugin,
                                       ast)
示例#20
0
    def test_declarative_identifiers_referenced_with_referenced_all(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'g:explicit_global_var': False,
            'b:buffer_local_var': False,
            'w:window_local_var': False,
            't:tab_local_var': False,
            's:script_local_var': False,
            'implicit_global_var': False,
            '$ENV_VAR': False,
            '@"': False,
            '&opt_var': False,
            'v:count': False,
        }

        self.assertVariablesUnused(expected_variables_unused, scope_plugin,
                                   ast)
示例#21
0
    def test_declarative_identifiers_referenced_with_referenced_all(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'g:explicit_global_var': False,
            'b:buffer_local_var': False,
            'w:window_local_var': False,
            't:tab_local_var': False,
            's:script_local_var': False,
            'implicit_global_var': False,
            '$ENV_VAR': False,
            '@"': False,
            '&opt_var': False,
            'v:count': False,
        }

        self.assertVariablesUnused(expected_variables_unused,
                                   scope_plugin,
                                   ast)
示例#22
0
    def test_reference_reachability_with_referenced_all_params(self):
        ast = self.create_ast(Fixtures.REFERENCED_ALL_PARAMS)

        scope_plugin = ScopePlugin()
        scope_plugin.process(ast)

        expected_variables_unused = {
            'a:': False,
            'l:': False,
            'a:0': False,
            'a:000': False,
            'a:param': False,
            'a:param1': False,
            'a:param2': False,
            'a:param_var': False,
            'a:param_with_range': False,
            'a:firstline': False,
            'a:lastline': False,
        }

        self.assertVariablesUndeclared(expected_variables_unused, scope_plugin,
                                       ast)