Add links to missing related options within rule documentations (#13971)

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
This commit is contained in:
Matt Norton 2024-11-03 19:15:57 +00:00 committed by GitHub
parent 1de36cfe4c
commit 3ca24785ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 33 additions and 2 deletions

View file

@ -85,6 +85,7 @@ else:
## Options ## Options
- `lint.ignore-init-module-imports` - `lint.ignore-init-module-imports`
- `lint.pyflakes.allowed-unused-imports`
## References ## References
- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement) - [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)

View file

@ -81,7 +81,7 @@ expression: value
"rules": [ "rules": [
{ {
"fullDescription": { "fullDescription": {
"text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Options\n- `lint.ignore-init-module-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.readthedocs.io/en/latest/source/libraries.html#library-interface-public-and-private-symbols)\n" "text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Options\n- `lint.ignore-init-module-imports`\n- `lint.pyflakes.allowed-unused-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.readthedocs.io/en/latest/source/libraries.html#library-interface-public-and-private-symbols)\n"
}, },
"help": { "help": {
"text": "`{name}` imported but unused; consider using `importlib.util.find_spec` to test for availability" "text": "`{name}` imported but unused; consider using `importlib.util.find_spec` to test for availability"

View file

@ -31,6 +31,9 @@ use crate::checkers::ast::Checker;
/// ... /// ...
/// ``` /// ```
/// ///
/// ## Options
/// - `lint.flake8-bandit.hardcoded-tmp-directory`
///
/// ## References /// ## References
/// - [Common Weakness Enumeration: CWE-377](https://cwe.mitre.org/data/definitions/377.html) /// - [Common Weakness Enumeration: CWE-377](https://cwe.mitre.org/data/definitions/377.html)
/// - [Common Weakness Enumeration: CWE-379](https://cwe.mitre.org/data/definitions/379.html) /// - [Common Weakness Enumeration: CWE-379](https://cwe.mitre.org/data/definitions/379.html)

View file

@ -67,6 +67,7 @@ use crate::rules::isort::{categorize, ImportSection, ImportType};
/// - `lint.flake8-type-checking.quote-annotations` /// - `lint.flake8-type-checking.quote-annotations`
/// - `lint.flake8-type-checking.runtime-evaluated-base-classes` /// - `lint.flake8-type-checking.runtime-evaluated-base-classes`
/// - `lint.flake8-type-checking.runtime-evaluated-decorators` /// - `lint.flake8-type-checking.runtime-evaluated-decorators`
/// - `lint.flake8-type-checking.strict`
/// - `lint.typing-modules` /// - `lint.typing-modules`
/// ///
/// ## References /// ## References
@ -141,6 +142,7 @@ impl Violation for TypingOnlyFirstPartyImport {
/// - `lint.flake8-type-checking.quote-annotations` /// - `lint.flake8-type-checking.quote-annotations`
/// - `lint.flake8-type-checking.runtime-evaluated-base-classes` /// - `lint.flake8-type-checking.runtime-evaluated-base-classes`
/// - `lint.flake8-type-checking.runtime-evaluated-decorators` /// - `lint.flake8-type-checking.runtime-evaluated-decorators`
/// - `lint.flake8-type-checking.strict`
/// - `lint.typing-modules` /// - `lint.typing-modules`
/// ///
/// ## References /// ## References
@ -215,6 +217,7 @@ impl Violation for TypingOnlyThirdPartyImport {
/// - `lint.flake8-type-checking.quote-annotations` /// - `lint.flake8-type-checking.quote-annotations`
/// - `lint.flake8-type-checking.runtime-evaluated-base-classes` /// - `lint.flake8-type-checking.runtime-evaluated-base-classes`
/// - `lint.flake8-type-checking.runtime-evaluated-decorators` /// - `lint.flake8-type-checking.runtime-evaluated-decorators`
/// - `lint.flake8-type-checking.strict`
/// - `lint.typing-modules` /// - `lint.typing-modules`
/// ///
/// ## References /// ## References

View file

@ -48,6 +48,14 @@ use crate::registry::Rule;
/// """ /// """
/// ``` /// ```
/// ///
/// ## Options
/// - `lint.pydocstyle.convention`
///
/// ## References
/// - [PEP 257 Docstring Conventions](https://peps.python.org/pep-0257/)
/// - [NumPy Style Guide](https://numpydoc.readthedocs.io/en/latest/format.html)
/// - [Google Python Style Guide - Docstrings](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings)
///
/// [D213]: https://docs.astral.sh/ruff/rules/multi-line-summary-second-line /// [D213]: https://docs.astral.sh/ruff/rules/multi-line-summary-second-line
/// [PEP 257]: https://peps.python.org/pep-0257 /// [PEP 257]: https://peps.python.org/pep-0257
#[violation] #[violation]
@ -103,6 +111,14 @@ impl AlwaysFixableViolation for MultiLineSummaryFirstLine {
/// """ /// """
/// ``` /// ```
/// ///
/// ## Options
/// - `lint.pydocstyle.convention`
///
/// ## References
/// - [PEP 257 Docstring Conventions](https://peps.python.org/pep-0257/)
/// - [NumPy Style Guide](https://numpydoc.readthedocs.io/en/latest/format.html)
/// - [Google Python Style Guide - Docstrings](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings)
///
/// [D212]: https://docs.astral.sh/ruff/rules/multi-line-summary-first-line /// [D212]: https://docs.astral.sh/ruff/rules/multi-line-summary-first-line
/// [PEP 257]: https://peps.python.org/pep-0257 /// [PEP 257]: https://peps.python.org/pep-0257
#[violation] #[violation]

View file

@ -43,6 +43,8 @@ static MOOD: LazyLock<Mood> = LazyLock::new(Mood::new);
/// ///
/// ## Options /// ## Options
/// - `lint.pydocstyle.convention` /// - `lint.pydocstyle.convention`
/// - `lint.pydocstyle.property-decorators`
/// - `lint.pydocstyle.ignore-decorators`
/// ///
/// ## References /// ## References
/// - [PEP 257 Docstring Conventions](https://peps.python.org/pep-0257/) /// - [PEP 257 Docstring Conventions](https://peps.python.org/pep-0257/)

View file

@ -88,6 +88,7 @@ use crate::rules::{isort, isort::ImportSection, isort::ImportType};
/// ///
/// ## Options /// ## Options
/// - `lint.ignore-init-module-imports` /// - `lint.ignore-init-module-imports`
/// - `lint.pyflakes.allowed-unused-imports`
/// ///
/// ## References /// ## References
/// - [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement) /// - [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)

View file

@ -41,6 +41,9 @@ use crate::rules::pylint::settings::ConstantType;
/// return price /// return price
/// ``` /// ```
/// ///
/// ## Options
/// - `lint.pylint.allow-magic-value-types`
///
/// [PEP 8]: https://peps.python.org/pep-0008/#constants /// [PEP 8]: https://peps.python.org/pep-0008/#constants
#[violation] #[violation]
pub struct MagicValueComparison { pub struct MagicValueComparison {

View file

@ -34,7 +34,9 @@ use crate::{checkers::ast::Checker, settings::types::PythonVersion};
/// directions = {(0, 1): "North", (1, 0): "East", (0, -1): "South", (-1, 0): "West"} /// directions = {(0, 1): "North", (1, 0): "East", (0, -1): "South", (-1, 0): "West"}
/// directions[0, 1] /// directions[0, 1]
/// ``` /// ```
///
/// ## Options
/// - `lint.ruff.parenthesize-tuple-in-subscript`
#[violation] #[violation]
pub struct IncorrectlyParenthesizedTupleInSubscript { pub struct IncorrectlyParenthesizedTupleInSubscript {
prefer_parentheses: bool, prefer_parentheses: bool,