RobertCraigie / pyright-python

Python command line wrapper for pyright, a static type checker
https://pypi.org/project/pyright/
MIT License
164 stars 22 forks source link

`pyproject.toml` config not respected when run with pre-commit (but `pyrightconfig.json` works if created) #280

Closed linde12 closed 2 months ago

linde12 commented 2 months ago

I'm having issues with pyright-python where the settings under [tool.pyright] are not being picked up when run via pre-commit. Works fine if i add a pyrightconfig.json (although this just seems to pass? no debug output from either pyright or pyright-python is shown), but when using pyproject.toml it is unable to find my pyright configuration.

My .pre-commit-config.yaml looks like this:

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.4.10
    hooks:
      - id: ruff
        exclude: some_dir
      - id: ruff-format
        exclude: some_dir

  - repo: https://github.com/RobertCraigie/pyright-python
    rev: v1.1.369
    hooks:
      - id: pyright
        # args: ["--project=/home/REDACTEDNAME/src/REDACTED", "--verbose"] # changes nothing
        args: ["--verbose"]

Output from poetry run pyright --verbose with PYRIGHT_PYTHON_DEBUG env var set (correct, respects my settings in pyproject.toml and ignores errors in some_dir):

2024-06-27 12:18:01,835 - DEBUG - pyright.utils - Latest pyright-python version is: 1.1.369
2024-06-27 12:18:01,836 - DEBUG - pyright.node - Checking for global target binary: node
2024-06-27 12:18:01,837 - DEBUG - pyright.node - Found global binary at: /usr/local/bin/node
2024-06-27 12:18:01,838 - DEBUG - pyright.node - Global binary exists at: /usr/local/bin/node
2024-06-27 12:18:01,838 - DEBUG - pyright.node - Running node command with args: ['/usr/local/bin/node', '/home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/index.js', '--verbose']
Loading pyproject.toml file at /home/REDACTEDNAME/src/REDACTED/pyproject.toml
Assuming Python version 3.12.0.final.0
Search paths for file:///home/REDACTEDNAME/src/REDACTED
  /home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stdlib
  /home/REDACTEDNAME/src/REDACTED
  /home/REDACTEDNAME/src/REDACTED/typings
  /home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stubs/...
  /home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages
  /home/REDACTEDNAME/src/REDACTED
Found 90 source files
Could not import 'h2' in file '/home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages/httpx/_client.py'
  Looking in stubPath 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Looking in root directory of execution environment 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Looking for typeshed stdlib path
  Looking for typeshed stdlib path
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stdlib'
  Typeshed path not found
  Finding python search paths
  Found path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib'; looking for site-packages
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/site-packages', so looking for python subdirectory
  Found path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib64'
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/Lib'
  Found the following 'site-packages' dirs
    file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages
    file:///home/REDACTEDNAME/src/REDACTED
  Looking in python search path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Looking in python search path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Looking for typeshed third-party path
  Looking for typeshed stubs path
  Typeshed path not found
Could not import 'h2' in file '/home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages/httpx/_client.py'
  Looking in stubPath 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED/typings'
  Looking in root directory of execution environment 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Looking for typeshed stdlib path
  Looking for typeshed stdlib path
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stdlib'
  Typeshed path not found
  Finding python search paths
  Found path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib'; looking for site-packages
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/site-packages', so looking for python subdirectory
  Found path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib64'
  Did not find 'file:///home/REDACTEDNAME/src/REDACTED/.venv/Lib'
  Found the following 'site-packages' dirs
    file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages
    file:///home/REDACTEDNAME/src/REDACTED
  Looking in python search path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED/.venv/lib/python3.12/site-packages'
  Looking in python search path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve stub package using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Attempting to resolve using root path 'file:///home/REDACTEDNAME/src/REDACTED'
  Looking for typeshed third-party path
  Looking for typeshed stubs path
  Typeshed path not found
Heap stats: total_heap_size=91MB, used_heap_size=59MB, cross_worker_used_heap_size=59MB, total_physical_size=91MB, total_available_size=2035MB, heap_size_limit=2096MB
Heap stats: total_heap_size=115MB, used_heap_size=95MB, cross_worker_used_heap_size=95MB, total_physical_size=115MB, total_available_size=1999MB, heap_size_limit=2096MB
pyright 1.1.369
0 errors, 0 warnings, 0 informations
Completed in 2.635sec

Output from poetry run pre-commit with PYRIGHT_PYTHON_DEBUG env var set (incorrect, does not ignore some_dir):

2024-06-27 12:19:40,088 - DEBUG - pyright.utils - Latest pyright-python version is: 1.1.369
2024-06-27 12:19:40,089 - DEBUG - pyright.node - Checking for global target binary: node
2024-06-27 12:19:40,090 - DEBUG - pyright.node - Found global binary at: /usr/local/bin/node
2024-06-27 12:19:40,091 - DEBUG - pyright.node - Global binary exists at: /usr/local/bin/node
2024-06-27 12:19:40,091 - DEBUG - pyright.node - Running node command with args: ['/usr/local/bin/node', '/home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/index.js', '--verbose', 'REDACTED/REDACTED.py']
Loading pyproject.toml file at /home/REDACTEDNAME/src/REDACTED/pyproject.toml
Assuming Python version 3.12.0.final.0
No include entries specified; assuming /home/REDACTEDNAME/src/REDACTED
Auto-excluding **/node_modules
Auto-excluding **/__pycache__
Auto-excluding **/.*
Search paths for file:///home/REDACTEDNAME/src/REDACTED
  /home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stdlib
  /home/REDACTEDNAME/src/REDACTED
  /home/REDACTEDNAME/src/REDACTED/typings
  /home/REDACTEDNAME/.cache/pyright-python/1.1.369/node_modules/pyright/dist/typeshed-fallback/stubs/...
  /home/REDACTEDNAME/.pyenv/versions/3.12.0/lib/python3.12
  /home/REDACTEDNAME/.pyenv/versions/3.12.0/lib/python3.12/lib-dynload
  /home/REDACTEDNAME/.cache/pre-commit/repolk8y0b8c/py_env-python3.12/lib/python3.12/site-packages
Found 1 source file
Could not import 'httpx' in file '/home/REDACTEDNAME/src/REDACTED/REDACTED/some_dir/client.py'
  **...redacted**
Could not import 'attrs' in file '/home/REDACTEDNAME/src/REDACTED/REDACTED/some_dir/redacted1/redacted2.py'
  **...redacted**
  Looking for typeshed third-party path
  Looking for typeshed stubs path
  Typeshed path not found
pyright 1.1.369
/home/REDACTEDNAME/src/REDACTED/REDACTED/REDACTED.py
  /home/REDACTEDNAME/src/REDACTED/REDACTED/REDACTED.py:24:23 - error: Expected no arguments to "Redacted" constructor (reportCallIssue)
  /home/REDACTEDNAME/src/REDACTED/REDACTED/REDACTED.py:35:22 - error: Expected no arguments to "Redacted2" constructor (reportCallIssue)
  /home/REDACTEDNAME/src/REDACTED/REDACTED/REDACTED.py:66:22 - error: Expected no arguments to "Redacted3" constructor (reportCallIssue)
3 errors, 0 warnings, 0 informations
Completed in 0.726sec

I have a poetry.toml containing this:

[virtualenvs]
in-project = true

and my pyproject.toml contains this section:

[tool.pyright]
include = ["REDACTED"]
exclude = ["REDACTED/some_dir"]
venvPath = "."
venv = ".venv"

What could be the issue here? Again, if i move the config from pyproject.toml to a pyrightconfig.json everything pre-commit seems to just pass without actually caring about the configuration at all (no debug output from either pyright-python or pyright itself)

linde12 commented 2 months ago

Funny thing is that it finds the pyproject.toml file according to:

Loading pyproject.toml file at /home/REDACTEDNAME/src/REDACTED/pyproject.toml
Assuming Python version 3.12.0.final.0
No include entries specified; assuming /home/REDACTEDNAME/src/REDACTED
linde12 commented 2 months ago

Sorry, i see now that pre-commit only ran for REDACTED/REDACTED.py whereas pyright ran for all files (i forgot to add --all-files to my pre-commit run)