Skip to content

Lowercase and CamelCase checking of module imports in UMDP3 checker #220

Description

During the runtime of umdp3_conformance.py it was noted that changing module imports to be uppercase did not result in a failure being registered in the output of the script as expected. umdp3_conformance.py calls the following code in umdp3_checker_rules.py

    def lowercase_variable_names(self, lines: List[str]) -> TestResult:
        """Check for lowercase or CamelCase variable names only"""
        """
    TODO: This is a very simplistic check and will not detect many
        cases which break UMDP3. I suspect the Perl Predecessor concatenated
        continuation lines prior to 'cleaning' and checking. Having identified
        a declaration, it also then scanned the rest of the file for that
        variable name in any case."""
        failures = 0
        error_log = {}
        count = -1
        for count, line in enumerate(lines):
            clean_line = self.remove_quoted(line)
            clean_line = re.sub(r"!.*$", "", clean_line)

            # Simple check for UPPERCASE variable declarations
            if re.search(
                r"^\s*(INTEGER|REAL|LOGICAL|CHARACTER|TYPE)\s*.*::\s*[A-Z_]+",
                clean_line,
                re.IGNORECASE,
            ):
                clean_line = re.sub(
                    r"^\s*(INTEGER|REAL|LOGICAL|CHARACTER|TYPE)\s*.*::\s*",
                    "",
                    clean_line,
                )
                if match := re.search(r"([A-Z]{2,})", clean_line):
                    self.add_extra_error(f"UPPERCASE variable name : {match[1]}")
                    failures += 1
                    error_log = self.add_error_log(
                        error_log, f"UPPERCASE variable name {match[1]}", count +1
                    )

        output = f"Checked {count + 1} lines, found {failures} failures."
        return TestResult(
            checker_name="Lowercase or CamelCase variable names only",
            failure_count=failures,
            passed=(failures == 0),
            output=output,
            errors=error_log,
        )

addressing this issue will involve a refactor of this function to ensure module level imports are checked.

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions