Skip to content

Check python code for potentially undefined references

License

Notifications You must be signed in to change notification settings

brexhq/pyrefchecker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyRefChecker

Py-Ref checker checks for potential undefined references in Python code.

Installation

git clone [email protected]:brexhq/pyrefchecker.git
cd pyrefchecker
pip install --upgrade pip
pip install .

Usage

pyrefchecker .

Pyrefchecker checks all files and recursively checks all directories. It returns an exit code of 0 if no files have problems, and 1 otherwise. Files containing import * statements cannot be checked, so they are ignored by default. This can be changed with --disallow-import-star.

Configuration

> poetry run pyrefchecker --help

Usage: pyrefchecker [OPTIONS] [PATHS]...

  Check python files for potentially undefined references.

  Example:

      pyrefchecker .

Options:
  --show-successes / --hide-successes
                                  When set, show checks for good files
                                  [default: (hide)]

  --timeout INTEGER               Maximum processing time for a single file
                                  [default: 5]

  --allow-import-star / --disallow-import-star
                                  Whether or not to consider `import *` a
                                  failure  [default: (allowed)]

  --exclude REGEX                 Regex for paths to exclude  [default: (\.egg
                                  s|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv
                                  |\.svn|_build|buck-out|build|dist)]

  --include REGEX                 Regex for paths to include  [default:
                                  \.pyi?$]

  --help                          Show this message and exit.

Commandline options can also be configured in pyproject.toml under tool.pyrefchecker. For example

[tool.pyrefchecker]
allow_import_star = False
exclude = "_pb2"

Examples

Here are some examples, which tools like mypy, pylint and pyflakes do not catch:

if False:
    a = "Hello!"

print(a)
try:
    assert False
    a = "Hello!"
except Exception:
    pass

print(a)
for _ in range(0):
    a = "Hello!"

print(a)

However, this is a difficult problem. Since pyrefchecker does not check semantics, it does produce 'false positives'. Often, though, the false positives are pretty weird code anyway. For example, it will warn about this, unless you include a ref: ignore comment:

if True:
    a = "Hello!"

if True:
    print(a)  # ref: ignore

Library usage

You can also use pyrefchecker as a library:

import pyrefchecker

print(pyrefchecker.check("""
if True:
    a = "hello"
print(a)
"""))

# [RefWarning(line=4, column=6, reference='a')]

About

Check python code for potentially undefined references

Resources

License

Stars

Watchers

Forks

Packages

No packages published