From cb73473971c874afa1f812572895c540a514caae Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Wed, 19 Jul 2023 16:27:22 +0100 Subject: [PATCH] ArgSizeMismatchRule: targets now retrieved in GenericRule.check --- loki/bulk/scheduler.py | 3 +-- loki/lint/rules.py | 8 +++++++- tests/test_lint/test_linter.py | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/loki/bulk/scheduler.py b/loki/bulk/scheduler.py index eba859888..52819df62 100644 --- a/loki/bulk/scheduler.py +++ b/loki/bulk/scheduler.py @@ -629,8 +629,7 @@ def process(self, transformation, reverse=False, item_filter=SubroutineItem, use if use_file_graph: for node in traversal: items = graph.nodes[node]['items'] - transformation.apply(items[0].source, item=items[0], items=items, - targets=items[0].targets) + transformation.apply(items[0].source, item=items[0], items=items) else: for item in traversal: if item_filter and not isinstance(item, item_filter): diff --git a/loki/lint/rules.py b/loki/lint/rules.py index b76e0c0c0..6ed1b5f59 100644 --- a/loki/lint/rules.py +++ b/loki/lint/rules.py @@ -132,6 +132,7 @@ def check(cls, ast, rule_report, config, **kwargs): The rule configuration, filled with externally provided configuration values or the rule's default configuration. """ + # Perform checks on source file level if isinstance(ast, Sourcefile): cls.check_file(ast, rule_report, config) @@ -161,7 +162,12 @@ def check(cls, ast, rule_report, config, **kwargs): if is_rule_disabled(ast.ir, cls.identifiers()): return - cls.check_subroutine(ast, rule_report, config, **kwargs) + if not (targets := kwargs.pop('targets', None)): + items = kwargs.get('items', ()) + item = [item for item in items if item.local_name.lower() == ast.name.lower()] + if len(item) > 0: + targets = item[0].targets + cls.check_subroutine(ast, rule_report, config, targets=targets, **kwargs) # Recurse for any procedures contained in a subroutine if hasattr(ast, 'members') and ast.members is not None: diff --git a/tests/test_lint/test_linter.py b/tests/test_lint/test_linter.py index 985b2d0f6..ab53ece30 100644 --- a/tests/test_lint/test_linter.py +++ b/tests/test_lint/test_linter.py @@ -156,7 +156,7 @@ class AlwaysComplainRule(GenericRule): docs = {'id': '13.37'} @classmethod - def check_file(cls, sourcefile, rule_report, config): # pylint: disable=unused-argument + def check_file(cls, sourcefile, rule_report, config, **kwargs): # pylint: disable=unused-argument rule_report.add(cls.__name__, sourcefile) check_module = check_file