mypy
Mypy Tool Analysis
Overview
Mypy is a static type checker for Python. This analysis compares Lintro’s wrapper with core mypy behavior.
Core Tool Capabilities
- Static type checking with modern typing (PEP 604 unions, PEP 673 Self)
- Config discovery:
pyproject.toml [tool.mypy],mypy.ini,setup.cfg - Flags:
--strict,--ignore-missing-imports,--python-version,--config-file,--cache-dir,--show-error-codes - Output formats: text, JSON (with error codes/columns), JUnit via plugins
- Exclude/include patterns, namespace package support, incremental cache
Lintro Implementation Analysis
✅ Preserved Features
- Invokes mypy with JSON output plus error codes and columns for precise issue data
- Respects native configs and forwards
--config-filewhen discovered - Defaults to
--strictand--ignore-missing-importsunless overridden viamypy:strict/mypy:ignore_missing_imports - Supports
python_version,config_file,cache_dirtool options - File discovery for
*.pyand*.pyi; applies CLI excludes and tool-level excludes
⚠️ Limited / Missing
- No auto-fix (mypy is check-only)
- No pass-through for advanced flags (plugins, namespace packages, incremental tuning, warn-unreachable, warn-unused-* toggles)
- No per-file/namespace overrides beyond what native config provides
- No parallel execution control; uses single mypy invocation
🚀 Enhancements
- Safe timeout handling (default 60s) with structured timeout result
- Default exclude set to avoid tests/samples unless a native config provides its own excludes
- Auto config discovery in
__post_init__, reloaded per run to honor project changes - Normalized
ToolResultwith parsed issues frommypy_parser - Priority 82, tool type
LINTER | TYPE_CHECKER, keeping it after formatters/linters but before tests
Usage Comparison
# Core mypy
mypy --strict --ignore-missing-imports src/
# Lintro wrapper
lintro check src/ --tools mypy
lintro check src/ --tools mypy --tool-options "mypy:strict=False,mypy:python_version=3.13"
Configuration Strategy
- Prefers native configs; if found, Lintro passes them via
--config-file - If no native exclude is defined, applies built-in excludes for tests, samples,
node_modules,dist,build - Tool options override defaults:
mypy:strict(bool)mypy:ignore_missing_imports(bool)mypy:python_version(string)mypy:config_file(path) — takes precedence over discoverymypy:cache_dir(path)
- Uses unified timeout (
mypy:timeoutvia global mechanism) to avoid long runs
Priority and Conflicts
- Priority: 82
- Tool Type: LINTER | TYPE_CHECKER
- Conflicts: None
Recommendations
- Use Lintro when you want strict-by-default type checking with normalized JSON output and project config autodiscovery.
- Use core mypy directly if you need plugin configuration, fine-grained cache/incremental tuning, or advanced warning flags not yet exposed via Lintro options.