pynudger¶
Features¶
pynudger is an opinionated linter for Python projects, focused on naming conventions and making your code "more Pythonic".
- Length rules: Too long class/function names are flagged.
- Setters/getters: Discourages usage of setters/getters, encourages properties instead.
- No helpers/utils/commons: Incentivizes more descriptive and semantically coherent names for functionalities.
Table of contents¶
Quick start¶
Installation¶
Usage¶
To check against the rules run the following from the command line:
You can pass additional arguments to pynudger check
, like files to check (by default all Python files in the current directory):
Advanced¶
Configuration¶
You can configure pynudger in pyproject.toml
(or .pynudger.toml
in the root of your project, just remove the [tool.pynudger]
section), for example:
[tool.pynudger]
# include rules by their code
include_codes = [1, 2, 5] # default: all rules included
# exclude rules by their code (takes precedence over include)
exclude_codes = [4, 5, 6] # default: no rules excluded
# whether to exit after first error or all errors
end_mode = "first" # default: "all"
Tip
Rule-specific configuration can be found in the section below.
Run as a pre-commit hook¶
pynudger
can be used as a pre-commit hook, to add as a plugin:
repos:
- repo: "https://github.com/open-nudge/pynudger"
rev: ... # select the tag or revision you want, or run `pre-commit autoupdate`
hooks:
- id: "pynudger"
Disable in code¶
You can disable pynudger
on a line-by-line basis (you have to specify exact code), e.g.:
or a line span:
# noqa-start: PYNUDGER0, PYNUDGER16
def set_my_too_long_function_name():
pass
def set_another_long_function():
pass
# noqa-end: PYNUDGER0, PYNUDGER16
def set_will_error_out_this_time():
pass
It is also possible to disable all checks in a file by placing the following somewhere in the file (preferably at the top):
Note
If you are running pynudger
with ruff
⧉ you should add lint.external = ["PYNUDGER"]
to [tool.ruff]
section in pyproject.toml
to avoid removing # noqa: PYNUDGER
comments.
Rules¶
Tip
Run pynudger rules
to see the list of available rules.
pynudger
provides the following rules:
Name | Description |
---|---|
PYNUDGER0 | Avoid using setters in class names. Use properties instead. |
PYNUDGER1 | Avoid using setters in function names. Use properties instead. |
PYNUDGER2 | Avoid using setters in file names. Define file name without it. |
PYNUDGER3 | Avoid using getters in class names. Use properties instead. |
PYNUDGER4 | Avoid using getters in function names. Use properties instead. |
PYNUDGER5 | Avoid using getters in file names. Define file name without it. |
PYNUDGER6 | Avoid using utils in class names. Name the class appropriately. |
PYNUDGER7 | Avoid using utils in function names. Name the function appropriately. |
PYNUDGER8 | Avoid defining utils modules. Move functionality to appropriate modules. |
PYNUDGER9 | Avoid using helpers in class names. Name the class appropriately. |
PYNUDGER10 | Avoid using helpers in function names. Name the function appropriately. |
PYNUDGER11 | Avoid defining utils modules. Move functionality to appropriate modules. |
PYNUDGER12 | Avoid using common in class names. Name the class appropriately. |
PYNUDGER13 | Avoid using common in function names. Name the function appropriately. |
PYNUDGER14 | Avoid defining common modules. Move functionality to appropriate modules. |
PYNUDGER15 | Avoid long class names. Specify intent by nesting modules/packages. |
PYNUDGER16 | Avoid long function names. Specify intent by nesting modules/packages. |
PYNUDGER17 | Avoid long path names. Specify intent by nesting modules/packages. |
with the following configurable options (in pyproject.toml
or .pynudger.toml
):
Option | Description | Affected rules | Default |
---|---|---|---|
pascal_length | Maximum allowed length of PascalCase names | PYNUDGER15 | 3 |
snake_length | Maximum allowed length of snake_case names | PYNUDGER16, PYNUDGER17 | 3 |
pascal_excludes | List of words to exclude from PascalCase length check | PYNUDGER15 | [] |
snake_excludes | List of words to exclude from snake_case length check | PYNUDGER16, PYNUDGER17 | [] |