Fixit
Fixit copied to clipboard
Advanced Python linting framework with auto-fixes and hierarchical configuration that makes it easy to write custom in-repo lint rules.
.. image:: docs/source/_static/logo/logo.svg :width: 600 px :alt: Fixit
|readthedocs-badge| |codecov-badge| |pypi-badge| |pypi-download|
.. |readthedocs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest&style=flat :target: https://fixit.readthedocs.io/en/latest/ :alt: Documentation
.. |codecov-badge| image:: https://codecov.io/gh/Instagram/Fixit/branch/main/graph/badge.svg :target: https://codecov.io/gh/Instagram/Fixit/branch/main
.. |pypi-badge| image:: https://img.shields.io/pypi/v/fixit.svg :target: https://pypi.org/project/fixit :alt: PYPI
.. |pypi-download| image:: https://pepy.tech/badge/fixit/month :target: https://pepy.tech/project/fixit/month :alt: PYPI Download
.. intro-start
:title:A lint framework that writes better Python code for you.
Fixit is a lint framework that complements Flake8 <https://github.com/PyCQA/flake8>
.
It’s based on LibCST <https://github.com/Instagram/LibCST/>
which makes it possible
to provide auto-fixes.
Lint rules are made easy to build through pattern matching, a test toolkit,
and utility helpers (e.g. scope analysis) for non-trivial boilerplate.
It is optimized for efficiency, easy to customize and comes with many builtin lint rules.
.. intro-end
Getting Started
To install Fixit::
pip install fixit
Fixit provides CLI commands. To run built-in Fixit rules on existing code to get code quality suggestions::
python -m fixit.cli.run_rules
To apply autofix on existing code::
python -m fixit.cli.apply_fix
You can learn more about how to configure Fixit <https://fixit.readthedocs.io/en/latest/getting_started.html#Configuration-File>
,
build a lint rule <https://fixit.readthedocs.io/en/latest/build_a_lint_rule.html>
,
test a lint rule <https://fixit.readthedocs.io/en/latest/test_a_lint_rule.html>
_ from our tutorials.
Try it out with our notebook examples <https://fixit.readthedocs.io/en/latest/getting_started.html>
_.
Further Reading
-
Static Analysis at Scale: An Instagram Story. <https://instagram-engineering.com/static-analysis-at-scale-an-instagram-story-8f498ab71a0c>
_
Development
Start by setting up and activating a virtualenv:
.. code-block:: shell
git clone [email protected]:Instagram/Fixit.git fixit
cd fixit
python3 -m venv ../fixit-env/ # just an example, put this wherever you want
source ../fixit-env/bin/activate
pip install --upgrade pip # optional, if you have an old system version of pip
pip install -r requirements.txt -r requirements-dev.txt
# If you're done with the virtualenv, you can leave it by running:
deactivate
We use ufmt <https://ufmt.omnilib.dev/en/stable/>
_ to format code. To format
changes to be conformant, run the following in the root:
.. code-block:: shell
tox -e autofix
To run all tests, you'll need to install tox <https://tox.readthedocs.io/en/latest/>
_
and do the following in the root: (use py37, py38 to choose from Python version 3.7 or 3.8)::
tox -e py38
You can also run individual unit tests by specifying a module like this::
tox -e py38 -- fixit.common.tests.test_report
To run all test cases of a specific rule (e.g. NoInheritFromObjectRule
)::
tox -e py38 -- fixit.tests.NoInheritFromObjectRule
See the unittest documentation <https://docs.python.org/3/library/unittest.html>
_
for more examples of how to run tests.
We use Pyre <https://github.com/facebook/pyre-check>
_ for type-checking. To
verify types for the library, do the following in the root::
pyre --preserve-pythonpath check
To generate documentation, do the following in the root:
.. code-block:: shell
tox -e docs
License
Fixit is MIT licensed <LICENSE>
_, as found in the LICENSE file.
.. fb-docs-start
Privacy Policy and Terms of Use
-
Privacy Policy <https://opensource.facebook.com/legal/privacy>
_ -
Terms of Use <https://opensource.facebook.com/legal/terms>
_
.. fb-docs-end