diff --git a/CHANGES.md b/CHANGES.md index 2b1d40e..e3808f2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,10 @@ # Changelog +## 2.2.0 + +- Feature: Add optional `ruff check --fix` support to ruff-format target + [jensens, 2025-11-11] + ## 2.1.0 - Enhancement: Use tables in the generated sphinx code for topic/domains. diff --git a/Makefile b/Makefile index 59bf154..f0ca981 100644 --- a/Makefile +++ b/Makefile @@ -111,6 +111,16 @@ MXMAKE?=-e . # Default: src RUFF_SRC?=src +# Enable ruff check --fix when running ruff-format. +# Set to `true` to enable automatic fixes. +# Default: false +RUFF_FIXES?=false + +# Enable unsafe fixes when RUFF_FIXES is enabled. +# Set to `true` to enable unsafe fixes. +# Default: false +RUFF_UNSAFE_FIXES?=false + ## qa.isort # Source folder to scan for Python files to run isort on. @@ -352,6 +362,15 @@ ifeq ($(RUFF_SRC),src) RUFF_SRC:=$(PYTHON_PROJECT_PREFIX)src endif +# Build ruff check flags based on settings +ifeq ("$(RUFF_FIXES)","true") +ifeq ("$(RUFF_UNSAFE_FIXES)","true") +RUFF_FIX_FLAGS=--fix --unsafe-fixes +else +RUFF_FIX_FLAGS=--fix +endif +endif + RUFF_TARGET:=$(SENTINEL_FOLDER)/ruff.sentinel $(RUFF_TARGET): $(MXENV_TARGET) @echo "Install Ruff" @@ -367,6 +386,10 @@ ruff-check: $(RUFF_TARGET) ruff-format: $(RUFF_TARGET) @echo "Run ruff format" @ruff format $(RUFF_SRC) +ifeq ("$(RUFF_FIXES)","true") + @echo "Run ruff check $(RUFF_FIX_FLAGS)" + @ruff check $(RUFF_FIX_FLAGS) $(RUFF_SRC) +endif .PHONY: ruff-dirty ruff-dirty: diff --git a/src/mxmake/tests/test_topics.py b/src/mxmake/tests/test_topics.py index b95e26e..1ea7341 100644 --- a/src/mxmake/tests/test_topics.py +++ b/src/mxmake/tests/test_topics.py @@ -86,6 +86,28 @@ def test_get_domain(self): domain = topics.get_domain("core.mxenv") self.assertEqual(domain.fqn, "core.mxenv") + def test_ruff_domain_settings(self): + """Test ruff domain has correct settings for check --fix feature.""" + domain = topics.get_domain("qa.ruff") + self.assertEqual(domain.fqn, "qa.ruff") + + settings = {s.name: s for s in domain.settings} + + # Verify RUFF_FIXES setting + self.assertIn("RUFF_FIXES", settings) + ruff_fixes = settings["RUFF_FIXES"] + self.assertEqual(ruff_fixes.default, "false") + self.assertIn("ruff check --fix", ruff_fixes.description) + + # Verify RUFF_UNSAFE_FIXES setting + self.assertIn("RUFF_UNSAFE_FIXES", settings) + ruff_unsafe = settings["RUFF_UNSAFE_FIXES"] + self.assertEqual(ruff_unsafe.default, "false") + self.assertIn("unsafe fixes", ruff_unsafe.description) + + # Verify RUFF_SRC setting still exists + self.assertIn("RUFF_SRC", settings) + @testing.temp_directory def test_Domain(self, tmpdir): domain_path = tmpdir / "domain.mk" diff --git a/src/mxmake/topics/qa/ruff.mk b/src/mxmake/topics/qa/ruff.mk index adda762..2b53c10 100644 --- a/src/mxmake/topics/qa/ruff.mk +++ b/src/mxmake/topics/qa/ruff.mk @@ -6,10 +6,23 @@ #:[target.ruff] #:description = Run ruff. #: +#:[target.ruff-format] +#:description = Run ruff format. Optionally apply fixes with RUFF_FIXES=true. +#: #:[setting.RUFF_SRC] #:description = Source folder to scan for Python files to run ruff on. #:default = src #: +#:[setting.RUFF_FIXES] +#:description = Enable ruff check --fix when running ruff-format. +#: Set to `true` to enable automatic fixes. +#:default = false +#: +#:[setting.RUFF_UNSAFE_FIXES] +#:description = Enable unsafe fixes when RUFF_FIXES is enabled. +#: Set to `true` to enable unsafe fixes. +#:default = false +#: #:[target.ruff-dirty] #:description = Marks ruff dirty #: @@ -25,6 +38,15 @@ ifeq ($(RUFF_SRC),src) RUFF_SRC:=$(PYTHON_PROJECT_PREFIX)src endif +# Build ruff check flags based on settings +ifeq ("$(RUFF_FIXES)","true") +ifeq ("$(RUFF_UNSAFE_FIXES)","true") +RUFF_FIX_FLAGS=--fix --unsafe-fixes +else +RUFF_FIX_FLAGS=--fix +endif +endif + RUFF_TARGET:=$(SENTINEL_FOLDER)/ruff.sentinel $(RUFF_TARGET): $(MXENV_TARGET) @echo "Install Ruff" @@ -40,6 +62,10 @@ ruff-check: $(RUFF_TARGET) ruff-format: $(RUFF_TARGET) @echo "Run ruff format" @ruff format $(RUFF_SRC) +ifeq ("$(RUFF_FIXES)","true") + @echo "Run ruff check $(RUFF_FIX_FLAGS)" + @ruff check $(RUFF_FIX_FLAGS) $(RUFF_SRC) +endif .PHONY: ruff-dirty ruff-dirty: