diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index 1eee9a9..0c9d10c 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -6,7 +6,7 @@ on: branches: [main] jobs: - pyright: + ty: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -18,5 +18,5 @@ jobs: - name: Install dependencies run: uv sync --dev - - name: Run Pyright - run: uv run pyright + - name: Run Ty + run: uv run ty check diff --git a/.zed/settings.json b/.zed/settings.json index d5747be..80cd3d2 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -1,6 +1,6 @@ { "file_types": { - "jinja2": ["*.html"] + "jinja2": ["*.html"], }, "lsp": { "jinja-lsp": { @@ -12,4 +12,9 @@ }, }, }, + "languages": { + "Python": { + "language_servers": ["ty", "ruff"], + }, + }, } diff --git a/car/app.py b/car/app.py index 26a2a91..6a57118 100644 --- a/car/app.py +++ b/car/app.py @@ -10,7 +10,7 @@ from typing import Any, TypedDict, cast # 3p -from flask import ( # type: ignore # we ignore this so we can better type it later +from flask import ( Flask, abort, flash, @@ -72,7 +72,7 @@ class Session(TypedDict, total=False): voters_searched: list[ID] -session: Session +session: Session # type: ignore SETTINGS_KEYS: Session = { "use_map": 1, diff --git a/car/model.py b/car/model.py index 9f30ad8..e1b1c32 100644 --- a/car/model.py +++ b/car/model.py @@ -295,8 +295,8 @@ def sort_key(self): class _DoorWithGeoCode(Door): - lat: float = 0 # type: ignore - lon: float = 0 # type: ignore + lat: float = 0 + lon: float = 0 def has_geocode(d: Door) -> TypeIs[_DoorWithGeoCode]: diff --git a/car/script/geocode_doors.py b/car/script/geocode_doors.py index 5b3086f..453d06f 100644 --- a/car/script/geocode_doors.py +++ b/car/script/geocode_doors.py @@ -7,7 +7,7 @@ sys.path.insert( 0, os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../../geocode") ) -from geocode import get_geocoder # pyright: ignore +from geocode import get_geocoder # type: ignore geocoder = get_geocoder() database = Database.get() diff --git a/car/script/targeting_universe.py b/car/script/targeting_universe.py index cc75636..4344378 100644 --- a/car/script/targeting_universe.py +++ b/car/script/targeting_universe.py @@ -163,14 +163,14 @@ def elections(self): ] elections = [(x, y) for (x, y) in elections if x is not None] - elections.sort(key=lambda k: k[0].date, reverse=True) # type: ignore + elections.sort(key=lambda k: k[0].date, reverse=True) return elections @property @functools.cache def last_voted(self): if self.elections: - return self.elections[0][0].date # type: ignore + return self.elections[0][0].date return None @@ -185,7 +185,7 @@ def last_voted_party_code(self): code = code.strip() if code in r and r[code] is None: - r[code] = elec.date # type: ignore + r[code] = elec.date return r diff --git a/pyproject.toml b/pyproject.toml index ba6a2a2..c5d2b86 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,13 +10,18 @@ dependencies = [ ] [dependency-groups] -dev = ["black>=26.5.1", "pyright>=1.1.411", "typing-extensions>=4.16.0"] +dev = [ + "black>=26.5.1", + "ty>=0.0.72", + "typing-extensions>=4.16.0", +] [tool.setuptools] packages = ["car"] -[tool.pyright] -ignore = ["car/_jinja_globals_stub.py"] +[tool.ty.src] +include = ["car"] +exclude = ["car/_jinja_globals_stub.py"] [tool.ruff] exclude = ["car/_jinja_globals_stub.py"]