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# #############################################################################
@@ -158,6 +156,17 @@ PROJECT_CONFIG?=mx.ini
158156# Default: false
159157PACKAGES_ALLOW_PRERELEASES? =false
160158
159+ # # qa.ty
160+
161+ # Source folder for type checking.
162+ # Default: src
163+ TY_SRC? =src
164+
165+ # Target Python version for type checking (e.g., 3.12).
166+ # Leave empty to use default detection.
167+ # No default value.
168+ TY_PYTHON_VERSION? =
169+
161170# # qa.test
162171
163172# The command which gets executed. Defaults to the location the
@@ -174,23 +183,6 @@ TEST_REQUIREMENTS?=pytest
174183# No default value.
175184TEST_DEPENDENCY_TARGETS? =
176185
177- # # qa.coverage
178-
179- # The command which gets executed. Defaults to the location the
180- # :ref:`run-coverage` template gets rendered to if configured.
181- # Default: .mxmake/files/run-coverage.sh
182- COVERAGE_COMMAND? =.mxmake/files/run-coverage.sh
183-
184- # # qa.mypy
185-
186- # Source folder for code analysis.
187- # Default: src
188- MYPY_SRC? =src
189-
190- # Mypy Python requirements to be installed (via pip).
191- # Default: types-setuptools
192- MYPY_REQUIREMENTS? =types-setuptools types-docutils types-PyYAML
193-
194186# # core.help
195187
196188# Request to show all targets, descriptions and arguments for a given domain.
@@ -406,45 +398,6 @@ FORMAT_TARGETS+=ruff-format
406398DIRTY_TARGETS+ =ruff-dirty
407399CLEAN_TARGETS+ =ruff-clean
408400
409- # #############################################################################
410- # isort
411- # #############################################################################
412-
413- # Adjust ISORT_SRC to respect PROJECT_PATH_PYTHON if still at default
414- ifeq ($(ISORT_SRC ) ,src)
415- ISORT_SRC: =$(PYTHON_PROJECT_PREFIX ) src
416- endif
417-
418- ISORT_TARGET: =$(SENTINEL_FOLDER ) /isort.sentinel
419- $(ISORT_TARGET ) : $(MXENV_TARGET )
420- @echo " Install isort"
421- @$(PYTHON_PACKAGE_COMMAND ) install isort
422- @touch $(ISORT_TARGET )
423-
424- .PHONY : isort-check
425- isort-check : $(ISORT_TARGET )
426- @echo " Run isort check"
427- @isort --check $(ISORT_SRC )
428-
429- .PHONY : isort-format
430- isort-format : $(ISORT_TARGET )
431- @echo " Run isort format"
432- @isort $(ISORT_SRC )
433-
434- .PHONY : isort-dirty
435- isort-dirty :
436- @rm -f $(ISORT_TARGET )
437-
438- .PHONY : isort-clean
439- isort-clean : isort-dirty
440- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y isort || :
441-
442- INSTALL_TARGETS+ =$(ISORT_TARGET )
443- CHECK_TARGETS+ =isort-check
444- FORMAT_TARGETS+ =isort-format
445- DIRTY_TARGETS+ =isort-dirty
446- CLEAN_TARGETS+ =isort-clean
447-
448401# #############################################################################
449402# sphinx
450403# #############################################################################
@@ -590,6 +543,47 @@ INSTALL_TARGETS+=packages
590543DIRTY_TARGETS+ =packages-dirty
591544CLEAN_TARGETS+ =packages-clean
592545
546+ # #############################################################################
547+ # ty
548+ # #############################################################################
549+
550+ # Adjust TY_SRC to respect PROJECT_PATH_PYTHON if still at default
551+ ifeq ($(TY_SRC ) ,src)
552+ TY_SRC: =$(PYTHON_PROJECT_PREFIX ) src
553+ endif
554+
555+ # Build ty flags
556+ TY_FLAGS: =
557+ ifneq ($(TY_PYTHON_VERSION ) ,)
558+ TY_FLAGS+ =--python-version $(TY_PYTHON_VERSION )
559+ endif
560+
561+ TY_TARGET: =$(SENTINEL_FOLDER ) /ty.sentinel
562+ $(TY_TARGET ) : $(MXENV_TARGET )
563+ @echo " Install ty"
564+ @$(PYTHON_PACKAGE_COMMAND ) install ty
565+ @touch $(TY_TARGET )
566+
567+ .PHONY : ty
568+ ty : $(PACKAGES_TARGET ) $(TY_TARGET )
569+ @echo " Run ty"
570+ @ty check $(TY_FLAGS ) $(TY_SRC )
571+
572+ .PHONY : ty-dirty
573+ ty-dirty :
574+ @rm -f $(TY_TARGET )
575+
576+ .PHONY : ty-clean
577+ ty-clean : ty-dirty
578+ @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y ty || :
579+ @rm -rf .ty
580+
581+ INSTALL_TARGETS+ =$(TY_TARGET )
582+ CHECK_TARGETS+ =ty
583+ TYPECHECK_TARGETS+ =ty
584+ CLEAN_TARGETS+ =ty-clean
585+ DIRTY_TARGETS+ =ty-dirty
586+
593587# #############################################################################
594588# test
595589# #############################################################################
@@ -619,69 +613,6 @@ INSTALL_TARGETS+=$(TEST_TARGET)
619613CLEAN_TARGETS+ =test-clean
620614DIRTY_TARGETS+ =test-dirty
621615
622- # #############################################################################
623- # coverage
624- # #############################################################################
625-
626- COVERAGE_TARGET: =$(SENTINEL_FOLDER ) /coverage.sentinel
627- $(COVERAGE_TARGET ) : $(TEST_TARGET )
628- @echo " Install Coverage"
629- @$(PYTHON_PACKAGE_COMMAND ) install -U coverage
630- @touch $(COVERAGE_TARGET )
631-
632- .PHONY : coverage
633- coverage : $(FILES_TARGET ) $(SOURCES_TARGET ) $(PACKAGES_TARGET ) $(COVERAGE_TARGET )
634- @test -z " $( COVERAGE_COMMAND) " && echo " No coverage command defined" && exit 1 || :
635- @echo " Run coverage using $( COVERAGE_COMMAND) "
636- @/usr/bin/env bash -c " $( COVERAGE_COMMAND) "
637-
638- .PHONY : coverage-dirty
639- coverage-dirty :
640- @rm -f $(COVERAGE_TARGET )
641-
642- .PHONY : coverage-clean
643- coverage-clean : coverage-dirty
644- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y coverage || :
645- @rm -rf .coverage htmlcov
646-
647- INSTALL_TARGETS+ =$(COVERAGE_TARGET )
648- DIRTY_TARGETS+ =coverage-dirty
649- CLEAN_TARGETS+ =coverage-clean
650-
651- # #############################################################################
652- # mypy
653- # #############################################################################
654-
655- # Adjust MYPY_SRC to respect PROJECT_PATH_PYTHON if still at default
656- ifeq ($(MYPY_SRC ) ,src)
657- MYPY_SRC: =$(PYTHON_PROJECT_PREFIX ) src
658- endif
659-
660- MYPY_TARGET: =$(SENTINEL_FOLDER ) /mypy.sentinel
661- $(MYPY_TARGET ) : $(MXENV_TARGET )
662- @echo " Install mypy"
663- @$(PYTHON_PACKAGE_COMMAND ) install mypy $(MYPY_REQUIREMENTS )
664- @touch $(MYPY_TARGET )
665-
666- .PHONY : mypy
667- mypy : $(PACKAGES_TARGET ) $(MYPY_TARGET )
668- @echo " Run mypy"
669- @mypy $(MYPY_SRC )
670-
671- .PHONY : mypy-dirty
672- mypy-dirty :
673- @rm -f $(MYPY_TARGET )
674-
675- .PHONY : mypy-clean
676- mypy-clean : mypy-dirty
677- @test -e $(MXENV_PYTHON ) && $(MXENV_PYTHON ) -m pip uninstall -y mypy || :
678- @rm -rf .mypy_cache
679-
680- INSTALL_TARGETS+ =$(MYPY_TARGET )
681- TYPECHECK_TARGETS+ =mypy
682- CLEAN_TARGETS+ =mypy-clean
683- DIRTY_TARGETS+ =mypy-dirty
684-
685616# #############################################################################
686617# help
687618# #############################################################################
0 commit comments