Commit 646f88b2 authored by Luke Mewburn's avatar Luke Mewburn
Browse files

testing: convert asn_ignore*.txt to asn_config.json

Add new fields to asn_config.json:
  lint_ignore_patterns:
	List of patterns to exclude from lint phase.
	Matched with pathlib.Path.full_match(), so a recursive '**'
	glob is required.
	Replaces asn_ignore_lint.txt (which contained substring matches).
	Note: Doesn't implicitly exclude patterns in
	parse_ignore_patterns, unlike the previous behaviour.
  parse_ignore_patterns:
	List of patterns to exclude from parse phase,
	Similar structure to lint_ignore_patterns.
	Replaces asn_ignore.txt (which contained substring matches).

Sort list of *.asn1 and *.asn before processing for consistent output.

Add filterIgnoredFiles() to reuse ignore logic, instead of copyPasta.
parent 5c67a920
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -19,5 +19,12 @@
        "testing/dependencies/asn/stubs/LI-PS-PDU.asn"
      ]
    }
  }
  },
  "lint_ignore_patterns": [
    "33108/**",
    "testing/dependencies/**"
  ],
  "parse_ignore_patterns": [
    "33108/**"
  ]
}

testing/asn_ignore.txt

deleted100644 → 0
+0 −1
Original line number Diff line number Diff line
33108

testing/asn_ignore_lint.txt

deleted100644 → 0
+0 −1
Original line number Diff line number Diff line
dependencies
+27 −32
Original line number Diff line number Diff line
@@ -25,6 +25,23 @@ asn1c_path = ""
change_path_to_unix = False


def filterIgnoredFiles(pathList, ignoreList):
    """Return pathList with paths matching those in ignoreList removed."""
    ignoredFiles = set()
    for ignore in ignoreList:
        logging.debug(f"Ignoring pattern {ignore} for parsing")
        for file in pathList:
            if file.full_match(ignore):
                ignoredFiles.add(file)
                logging.debug(f" Ignoring {str(file)} for parsing as matches {ignore}")
    logging.info(f"{len(ignoredFiles)} files ignored")
    for file in ignoredFiles:
        logging.debug(f"  {file}")

    result = [file for file in pathList if file not in ignoredFiles]
    return result


def fix_path(path):
    if change_path_to_unix:
        return "./" + path.replace("\\", "/")
@@ -160,35 +177,22 @@ if __name__ == "__main__":
    asnConfig = json.loads(Path("testing/asn_config.json").read_text())

    logging.info("Searching for ASN.1 files")
    fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn"))
    fileList = sorted(list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")))
    logging.info(f"{len(fileList)} ASN.1 files found")
    for file in fileList:
        logging.debug(f"  {file}")

    ignoreList = Path("testing/asn_ignore.txt").read_text().splitlines()
    ignoredFiles = []
    for ignore in ignoreList:
        logging.debug(f"Ignoring pattern {ignore}")
        for file in fileList:
            if ignore in str(file):
                ignoredFiles.append(file)
                logging.debug(f" Ignoring {str(file)} as contains {ignore}")
    ignoredFiles = list(set(ignoredFiles))
    logging.info(f"{len(ignoredFiles)} files ignored")
    for file in ignoredFiles:
        logging.debug(f"  {file}")

    fileList = [file for file in fileList if file not in ignoredFiles]
    logging.info(f"{len(fileList)} files to process")
    for file in fileList:
    parseFileList = filterIgnoredFiles(fileList, asnConfig["parse_ignore_patterns"])
    logging.info(f"{len(parseFileList)} files to parse")
    for file in parseFileList:
        logging.debug(f"  {file}")

    if len(fileList) == 0:
    if len(parseFileList) == 0:
        logging.warning("No files specified")
        exit(0)

    logging.info("Parsing ASN1 files")
    parseResults = syntaxCheckASN(fileList)
    parseResults = syntaxCheckASN(parseFileList)
    if processResults(parseResults, "Parsing") > 0:
        exit(-1)

@@ -201,21 +205,12 @@ if __name__ == "__main__":
        exit(1)

    logging.info("Linting files")
    ignoreLintingList = Path("testing/asn_ignore_lint.txt").read_text().splitlines()
    ignoredFiles = []
    for ignore in ignoreLintingList:
        logging.debug(f"Ignoring pattern {ignore} for linting")
        for file in fileList:
            if ignore in str(file):
                ignoredFiles.append(file)
                logging.debug(f" Ignoring {str(file)} for linting as contains {ignore}")
    ignoredFiles = list(set(ignoredFiles))
    logging.info(f"{len(ignoredFiles)} files ignored for linting")
    for file in ignoredFiles:
    lintFileList = filterIgnoredFiles(fileList, asnConfig["lint_ignore_patterns"])
    logging.info(f"{len(lintFileList)} files to lint")
    for file in lintFileList:
        logging.debug(f"  {file}")
    fileList = [file for file in fileList if file not in ignoredFiles]
    lintExceptions = json.loads(Path("testing/asn_lint_exceptions.json").read_text())
    lintResults = lint_asn1.lintASN1Files(fileList, lintExceptions)
    lintResults = lint_asn1.lintASN1Files(lintFileList, lintExceptions)
    if processResults(lintResults, "Linting") > 0:
        exit(1)