The TypeChecker class provides a type-safe wrapper around Ty, Astral’s extremely fast Python type checker written in Rust. Ty provides type checking capabilities to catch type-related errors before runtime.
from pyrig.rig.tools.type_checker import TypeChecker# Check entire projectTypeChecker.I.check_args().run()# Check specific directoryTypeChecker.I.check_args("src/").run()# Check specific filesTypeChecker.I.check_args("src/main.py", "tests/test_main.py").run()
from pyrig.rig.tools.type_checker import TypeCheckerdef pre_commit_type_check() -> bool: """Run type checking before commit.""" result = TypeChecker.I.check_args().run(check=False) if result.returncode != 0: print("Type checking failed:") print(result.stdout) return False print("✓ Type checking passed") return Trueif not pre_commit_type_check(): print("Please fix type errors before committing")
from pyrig.rig.tools.type_checker import TypeCheckerimport sysdef ci_type_check(): """Run type checking in CI/CD pipeline.""" print("Running type checker...") result = TypeChecker.I.check_args().run(check=False) if result.returncode != 0: print("✗ Type checking failed") print(result.stdout) sys.exit(1) print("✓ Type checking passed")ci_type_check()
from pyrig.rig.tools.type_checker import TypeCheckerfrom pyrig.rig.tools.version_controller import VersionControllerdef check_changed_files(): """Type check only modified files.""" # Get list of changed files result = VersionController.I.diff_args("--name-only").run() changed_files = [ f for f in result.stdout.strip().split('\n') if f.endswith('.py') ] if not changed_files: print("No Python files changed") return print(f"Checking {len(changed_files)} changed files...") result = TypeChecker.I.check_args(*changed_files).run(check=False) if result.returncode != 0: print("Type errors found in changed files") else: print("✓ All changed files pass type checking")check_changed_files()
from pyrig.rig.tools.type_checker import TypeCheckerfrom pyrig.rig.tools.package_manager import PackageManager# Ensure ty is installedPackageManager.I.add_dev_dependencies_args("ty").run()# Run type checker via uv run (ensures correct environment)PackageManager.I.run_args("ty", "check").run()# Or use the TypeChecker wrapper directlyTypeChecker.I.check_args().run()
from pyrig.rig.tools.type_checker import TypeCheckerfrom pyrig.rig.tools.project_tester import ProjectTesterdef test_with_type_check(): """Run tests and type checking.""" # Type check first print("Type checking...") type_result = TypeChecker.I.check_args().run(check=False) # Run tests print("Running tests...") test_result = ProjectTester.I.run_tests_in_ci_args().run(check=False) # Report results if type_result.returncode == 0 and test_result.returncode == 0: print("✓ Type checking and tests passed") else: if type_result.returncode != 0: print("✗ Type checking failed") if test_result.returncode != 0: print("✗ Tests failed")test_with_type_check()
from pyrig.rig.tools.type_checker import TypeCheckerdef analyze_type_errors(): """Analyze and report type errors.""" result = TypeChecker.I.check_args().run(check=False) if result.returncode == 0: print("No type errors found!") return # Parse output errors = result.stdout.strip().split('\n') print(f"Found {len(errors)} type errors:") for error in errors: print(f" - {error}")analyze_type_errors()
from pyrig.rig.tools.type_checker import TypeCheckerimport osdef check_source_only(): """Type check only source code, not tests.""" if os.path.exists("src"): print("Checking src/ directory...") TypeChecker.I.check_args("src/").run() else: print("Checking all .py files...") TypeChecker.I.check_args().run()check_source_only()
# Type check with verbose outputTypeChecker.I.check_args("--verbose").run()# Type check with specific Python versionTypeChecker.I.check_args("--python-version", "3.11").run()# Type check with strict modeTypeChecker.I.check_args("--strict").run()