88# : core.mxfiles
99# : core.packages
1010# : docs.sphinx
11- # : qa.coverage
12- # : qa.isort
13- # : qa.mypy
1411# : qa.ruff
1512# : qa.test
13+ # : qa.ty
1614#
1715# SETTINGS (ALL CHANGES MADE BELOW SETTINGS WILL BE LOST)
1816# #############################################################################
@@ -111,12 +109,6 @@ MXMAKE?=-e .
111109# Default: src
112110RUFF_SRC? =src
113111
114- # # qa.isort
115-
116- # Source folder to scan for Python files to run isort on.
117- # Default: src
118- ISORT_SRC? =src
119-
120112# # docs.sphinx
121113
122114# Documentation source folder.
@@ -148,6 +140,17 @@ PROJECT_CONFIG?=mx.ini
148140# Default: false
149141PACKAGES_ALLOW_PRERELEASES? =false
150142
143+ # # qa.ty
144+
145+ # Source folder for type checking.
146+ # Default: src
147+ TY_SRC? =src
148+
149+ # Target Python version for type checking (e.g., 3.12).
150+ # Leave empty to use default detection.
151+ # No default value.
152+ TY_PYTHON_VERSION? =
153+
151154# # qa.test
152155
153156# The command which gets executed. Defaults to the location the
@@ -164,23 +167,6 @@ TEST_REQUIREMENTS?=pytest
164167# No default value.
165168TEST_DEPENDENCY_TARGETS? =
166169
167- # # qa.coverage
168-
169- # The command which gets executed. Defaults to the location the
170- # :ref:`run-coverage` template gets rendered to if configured.
171- # Default: .mxmake/files/run-coverage.sh
172- COVERAGE_COMMAND? =.mxmake/files/run-coverage.sh
173-
174- # # qa.mypy
175-
176- # Source folder for code analysis.
177- # Default: src
178- MYPY_SRC? =src
179-
180- # Mypy Python requirements to be installed (via pip).
181- # Default: types-setuptools
182- MYPY_REQUIREMENTS? =types-setuptools types-docutils types-PyYAML
183-
184170# # core.help
185171
186172# Request to show all targets, descriptions and arguments for a given domain.
@@ -383,45 +369,6 @@ FORMAT_TARGETS+=ruff-format
383369DIRTY_TARGETS+ =ruff-dirty
384370CLEAN_TARGETS+ =ruff-clean
385371
386- # #############################################################################
387- # isort
388- # #############################################################################
389-
390- # Adjust ISORT_SRC to respect PROJECT_PATH_PYTHON if still at default
391- ifeq ($(ISORT_SRC ) ,src)
392- ISORT_SRC: =$(PYTHON_PROJECT_PREFIX ) src
393- endif
394-
395- ISORT_TARGET: =$(SENTINEL_FOLDER ) /isort.sentinel
396- $(ISORT_TARGET ) : $(MXENV_TARGET )
397- @echo " Install isort"
398- @$(PYTHON_PACKAGE_COMMAND ) install isort
399- @touch $(ISORT_TARGET )
400-
401- .PHONY : isort-check
402- isort-check : $(ISORT_TARGET )
403- @echo " Run isort check"
404- @isort --check $(ISORT_SRC )
405-
406- .PHONY : isort-format
407- isort-format : $(ISORT_TARGET )
408- @echo " Run isort format"
409- @isort $(ISORT_SRC )
410-
411- .PHONY : isort-dirty
412- isort-dirty :
413- @rm -f $(ISORT_TARGET )
414-
415- .PHONY : isort-clean
416- isort-clean : isort-dirty
417- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y isort || :
418-
419- INSTALL_TARGETS+ =$(ISORT_TARGET )
420- CHECK_TARGETS+ =isort-check
421- FORMAT_TARGETS+ =isort-format
422- DIRTY_TARGETS+ =isort-dirty
423- CLEAN_TARGETS+ =isort-clean
424-
425372# #############################################################################
426373# sphinx
427374# #############################################################################
@@ -567,6 +514,47 @@ INSTALL_TARGETS+=packages
567514DIRTY_TARGETS+ =packages-dirty
568515CLEAN_TARGETS+ =packages-clean
569516
517+ # #############################################################################
518+ # ty
519+ # #############################################################################
520+
521+ # Adjust TY_SRC to respect PROJECT_PATH_PYTHON if still at default
522+ ifeq ($(TY_SRC ) ,src)
523+ TY_SRC: =$(PYTHON_PROJECT_PREFIX ) src
524+ endif
525+
526+ # Build ty flags
527+ TY_FLAGS: =
528+ ifneq ($(TY_PYTHON_VERSION ) ,)
529+ TY_FLAGS+ =--python-version $(TY_PYTHON_VERSION )
530+ endif
531+
532+ TY_TARGET: =$(SENTINEL_FOLDER ) /ty.sentinel
533+ $(TY_TARGET ) : $(MXENV_TARGET )
534+ @echo " Install ty"
535+ @$(PYTHON_PACKAGE_COMMAND ) install ty
536+ @touch $(TY_TARGET )
537+
538+ .PHONY : ty
539+ ty : $(PACKAGES_TARGET ) $(TY_TARGET )
540+ @echo " Run ty"
541+ @ty check $(TY_FLAGS ) $(TY_SRC )
542+
543+ .PHONY : ty-dirty
544+ ty-dirty :
545+ @rm -f $(TY_TARGET )
546+
547+ .PHONY : ty-clean
548+ ty-clean : ty-dirty
549+ @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y ty || :
550+ @rm -rf .ty
551+
552+ INSTALL_TARGETS+ =$(TY_TARGET )
553+ CHECK_TARGETS+ =ty
554+ TYPECHECK_TARGETS+ =ty
555+ CLEAN_TARGETS+ =ty-clean
556+ DIRTY_TARGETS+ =ty-dirty
557+
570558# #############################################################################
571559# test
572560# #############################################################################
@@ -596,69 +584,6 @@ INSTALL_TARGETS+=$(TEST_TARGET)
596584CLEAN_TARGETS+ =test-clean
597585DIRTY_TARGETS+ =test-dirty
598586
599- # #############################################################################
600- # coverage
601- # #############################################################################
602-
603- COVERAGE_TARGET: =$(SENTINEL_FOLDER ) /coverage.sentinel
604- $(COVERAGE_TARGET ) : $(TEST_TARGET )
605- @echo " Install Coverage"
606- @$(PYTHON_PACKAGE_COMMAND ) install -U coverage
607- @touch $(COVERAGE_TARGET )
608-
609- .PHONY : coverage
610- coverage : $(FILES_TARGET ) $(SOURCES_TARGET ) $(PACKAGES_TARGET ) $(COVERAGE_TARGET )
611- @test -z " $( COVERAGE_COMMAND) " && echo " No coverage command defined" && exit 1 || :
612- @echo " Run coverage using $( COVERAGE_COMMAND) "
613- @/usr/bin/env bash -c " $( COVERAGE_COMMAND) "
614-
615- .PHONY : coverage-dirty
616- coverage-dirty :
617- @rm -f $(COVERAGE_TARGET )
618-
619- .PHONY : coverage-clean
620- coverage-clean : coverage-dirty
621- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y coverage || :
622- @rm -rf .coverage htmlcov
623-
624- INSTALL_TARGETS+ =$(COVERAGE_TARGET )
625- DIRTY_TARGETS+ =coverage-dirty
626- CLEAN_TARGETS+ =coverage-clean
627-
628- # #############################################################################
629- # mypy
630- # #############################################################################
631-
632- # Adjust MYPY_SRC to respect PROJECT_PATH_PYTHON if still at default
633- ifeq ($(MYPY_SRC ) ,src)
634- MYPY_SRC: =$(PYTHON_PROJECT_PREFIX ) src
635- endif
636-
637- MYPY_TARGET: =$(SENTINEL_FOLDER ) /mypy.sentinel
638- $(MYPY_TARGET ) : $(MXENV_TARGET )
639- @echo " Install mypy"
640- @$(PYTHON_PACKAGE_COMMAND ) install mypy $(MYPY_REQUIREMENTS )
641- @touch $(MYPY_TARGET )
642-
643- .PHONY : mypy
644- mypy : $(PACKAGES_TARGET ) $(MYPY_TARGET )
645- @echo " Run mypy"
646- @mypy $(MYPY_SRC )
647-
648- .PHONY : mypy-dirty
649- mypy-dirty :
650- @rm -f $(MYPY_TARGET )
651-
652- .PHONY : mypy-clean
653- mypy-clean : mypy-dirty
654- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y mypy || :
655- @rm -rf .mypy_cache
656-
657- INSTALL_TARGETS+ =$(MYPY_TARGET )
658- TYPECHECK_TARGETS+ =mypy
659- CLEAN_TARGETS+ =mypy-clean
660- DIRTY_TARGETS+ =mypy-dirty
661-
662587# #############################################################################
663588# help
664589# #############################################################################
0 commit comments