From a5a66f25c54e576f5d67e5c87ed2d934f55519ff Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 11 Nov 2025 08:34:09 +0100 Subject: [PATCH 1/3] Add optional ruff check --fix support to ruff-format target Introduces RUFF_FIXES and RUFF_UNSAFE_FIXES settings to enable auto-fixing linting issues. Default is false (non-breaking). Echo output shows actual flags used for transparency. Addresses #61 --- src/mxmake/tests/test_topics.py | 22 ++++++++++++++++++++++ src/mxmake/topics/qa/ruff.mk | 26 ++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) 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: From 7c1fe1f93c602f9ac43d77c400b46c19201a62e1 Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 11 Nov 2025 08:56:47 +0100 Subject: [PATCH 2/3] add line to changelog --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) 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. From 4bcbd062316caa57fcdae2a79c5da558a8772b0e Mon Sep 17 00:00:00 2001 From: "Jens W. Klein" Date: Tue, 11 Nov 2025 09:01:46 +0100 Subject: [PATCH 3/3] update own Makefile --- Makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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: