Update formulas handling

CURA-10901
This commit is contained in:
Saumya Jain 2024-04-08 15:26:55 +02:00
parent 388be81116
commit e15049f2e0
2 changed files with 22 additions and 7 deletions

View File

@ -19,7 +19,7 @@ def getLinter(file: Path, settings: dict) -> Optional[List[Linter]]:
if ".def" in file.suffixes and ".json" in file.suffixes:
if file.stem in ("fdmprinter.def", "fdmextruder.def"):
return None
return [Formulas(file, settings)]
return [Directory(file, settings), Definition(file, settings), Formulas(file, settings)]
if file.parent.stem == "meshes":

View File

@ -1,20 +1,31 @@
import json
import re
import os
from pathlib import Path
from typing import Iterator
from UM.VersionUpgradeManager import VersionUpgradeManager
from unittest.mock import MagicMock
from ..diagnostic import Diagnostic
from .linter import Linter
from configparser import ConfigParser
from ..replacement import Replacement
from cura.CuraApplication import CuraApplication # To compare against the current SettingVersion.
from UM.Settings.DefinitionContainer import DefinitionContainer
class Formulas(Linter):
""" Finds issues in definition files, such as overriding default parameters """
def __init__(self, file: Path, settings: dict) -> None:
super().__init__(file, settings)
self._all_keys = self.collectAllSettingIds()
self._definition = {}
def collectAllSettingIds(self):
VersionUpgradeManager._VersionUpgradeManager__instance = VersionUpgradeManager(MagicMock())
CuraApplication._initializeSettingDefinitions()
definition_container = DefinitionContainer("whatever")
with open(os.path.join(os.path.dirname(__file__), "..", "..","..","..", "resources", "definitions", "fdmprinter.def.json"),
encoding="utf-8") as data:
definition_container.deserialize(data.read())
return definition_container.getAllKeys()
def check(self) -> Iterator[Diagnostic]:
if self._settings["checks"].get("diagnostic-incorrect-formula", False):
@ -33,7 +44,7 @@ class Formulas(Linter):
for key, value_dict in definition["overrides"].items():
for value in value_dict:
if value in ("enable", "resolve", "value", "minimum_value_warning", "maximum_value_warning", "maximum_value", "minimum_value"):
value_incorrect = self.checkValueIncorrect()
value_incorrect = self.checkValueIncorrect(value_dict[value].strip("="))
if value_incorrect:
yield Diagnostic(
@ -77,5 +88,9 @@ class Formulas(Linter):
return file_data
def checkValueIncorrect(self):
return True
def checkValueIncorrect(self, formula:str) -> bool:
try:
compiled_formula = compile(formula, "", "eval")
except SyntaxError:
return True
return False