diff --git a/.printer-linter b/.printer-linter index 2ead01ffb17..3a42a5c0333 100644 --- a/.printer-linter +++ b/.printer-linter @@ -2,6 +2,7 @@ checks: diagnostic-mesh-file-extension: true diagnostic-mesh-file-size: true diagnostic-definition-redundant-override: true + diagnostic-resources-macos-app-directory-name: true fixes: diagnostic-definition-redundant-override: true format: diff --git a/printer-linter/pyproject.toml b/printer-linter/pyproject.toml index 74c6531c870..c346dc0496e 100644 --- a/printer-linter/pyproject.toml +++ b/printer-linter/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "printerlinter" description = "Cura UltiMaker printer linting tool" -version = "0.1.0" +version = "0.1.1" authors = [ { name = "UltiMaker", email = "cura@ultimaker.com" } ] diff --git a/printer-linter/src/printerlinter/factory.py b/printer-linter/src/printerlinter/factory.py index d27f82244b6..4473fb9a4ed 100644 --- a/printer-linter/src/printerlinter/factory.py +++ b/printer-linter/src/printerlinter/factory.py @@ -1,26 +1,27 @@ from pathlib import Path -from typing import Optional +from typing import Optional, List from .linters.profile import Profile from .linters.defintion import Definition from .linters.linter import Linter from .linters.meshes import Meshes +from .linters.directory import Directory -def getLinter(file: Path, settings: dict) -> Optional[Linter]: +def getLinter(file: Path, settings: dict) -> Optional[List[Linter]]: """ Returns a Linter depending on the file format """ if not file.exists(): return None if ".inst" in file.suffixes and ".cfg" in file.suffixes: - return Profile(file, settings) + return [Directory(file, settings), Profile(file, settings)] if ".def" in file.suffixes and ".json" in file.suffixes: if file.stem in ("fdmprinter.def", "fdmextruder.def"): return None - return Definition(file, settings) + return [Directory(file, settings), Definition(file, settings)] if file.parent.stem == "meshes": - return Meshes(file, settings) + return [Meshes(file, settings)] - return None + return [Directory(file, settings)] diff --git a/printer-linter/src/printerlinter/linters/directory.py b/printer-linter/src/printerlinter/linters/directory.py new file mode 100644 index 00000000000..1e81be4ded4 --- /dev/null +++ b/printer-linter/src/printerlinter/linters/directory.py @@ -0,0 +1,32 @@ +from pathlib import Path +from typing import Iterator + +from ..diagnostic import Diagnostic +from .linter import Linter + + +class Directory(Linter): + def __init__(self, file: Path, settings: dict) -> None: + """ Finds issues in the parent directory""" + super().__init__(file, settings) + + def check(self) -> Iterator[Diagnostic]: + if self._settings["checks"].get("diagnostic-resources-macos-app-directory-name", False): + for check in self.checkForDotInDirName(): + yield check + + yield + + def checkForDotInDirName(self) -> Iterator[Diagnostic]: + """ Check if there is a dot in the directory name, MacOS has trouble signing and notarizing otherwise """ + if any("." in p for p in self._file.parent.parts): + print("bghkgh") + yield Diagnostic( + file = self._file, + diagnostic_name = "diagnostic-resources-macos-app-directory-name", + message = f"Directory name containing a `.` not allowed {self._file.suffix}, rename directory containing this file e.q: `_`", + level = "Error", + offset = 1 + ) + yield + diff --git a/printer-linter/src/terminal.py b/printer-linter/src/terminal.py index 71103a0db2d..fb5ee36bd08 100644 --- a/printer-linter/src/terminal.py +++ b/printer-linter/src/terminal.py @@ -71,12 +71,16 @@ def main() -> None: def diagnoseIssuesWithFile(file: Path, settings: dict) -> List[Diagnostic]: """ For file, runs all diagnostic checks in settings and returns a list of diagnostics """ - linter = factory.getLinter(file, settings) + linters = factory.getLinter(file, settings) - if not linter: + if not linters: return [] - return list(filter(lambda d: d is not None, linter.check())) + linter_results = [] + for linter in linters: + linter_results.extend(list(filter(lambda d: d is not None, linter.check()))) + + return linter_results def applyFixesToFile(file, settings, full_body_check) -> None: