mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-30 08:35:09 +08:00
Update formulas handling
CURA-10901
This commit is contained in:
parent
388be81116
commit
e15049f2e0
@ -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":
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user