Add MacOS directory naming linting

A new Linter subclass - 'Directory' has been created and integrated into the linting process to handle directory naming conventions, specifically for MacOS. MacOS has issues when signing and notarizing directories with '.' in their names. The new class will trigger an 'Error' level diagnostic if this convention is violated. The linter will become a required check with this update, as its new check configuration was added to '.printer-linter'. The version number in 'pyproject.toml' was also incremented to reflect these changes.

Contributes to CURA-11014
This commit is contained in:
jellespijker 2023-09-22 01:29:22 +02:00
parent d5f4bffb8b
commit b401ecee02
5 changed files with 48 additions and 10 deletions

View file

@ -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:

View file

@ -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" }
]

View file

@ -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)]

View file

@ -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

View file

@ -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: