From 3597a9481819518c8d8c42a0cdf44402317526a6 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sat, 5 Nov 2022 16:18:27 -0400 Subject: [PATCH] Add a README link to each plugin (#611) --- README.md | 52 ++++++++++++++++-------- ruff_dev/src/generate_rules_table.rs | 10 +++++ src/checks.rs | 61 +++++++++++++++++++--------- 3 files changed, 85 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 024c5dbf40695..81afb163e40f6 100644 --- a/README.md +++ b/README.md @@ -43,18 +43,17 @@ Read the [launch blog post](https://notes.crmarsh.com/python-tooling-could-be-mu 2. [Configuration](#configuration) 3. [Supported Rules](#supported-rules) 1. [Pyflakes](#pyflakes) - 2. [pycodestyle (error)](#pycodestyle-error) - 3. [pycodestyle (warning)](#pycodestyle-warning) - 4. [pydocstyle](#pydocstyle) - 5. [pyupgrade](#pyupgrade) - 6. [pep8-naming](#pep8-naming) - 7. [flake8-comprehensions](#flake8-comprehensions) - 8. [flake8-bugbear](#flake8-bugbear) - 9. [flake8-builtins](#flake8-builtins) - 10. [flake8-print](#flake8-print) - 11. [flake8-quotes](#flake8-quotes) - 12. [Ruff-specific rules](#ruff-specific-rules) - 13. [Meta rules](#meta-rules) + 2. [pycodestyle](#pycodestyle) + 3. [pydocstyle](#pydocstyle) + 4. [pyupgrade](#pyupgrade) + 5. [pep8-naming](#pep8-naming) + 6. [flake8-comprehensions](#flake8-comprehensions) + 7. [flake8-bugbear](#flake8-bugbear) + 8. [flake8-builtins](#flake8-builtins) + 9. [flake8-print](#flake8-print) + 10. [flake8-quotes](#flake8-quotes) + 11. [Ruff-specific rules](#ruff-specific-rules) + 12. [Meta rules](#meta-rules) 5. [Editor Integrations](#editor-integrations) 6. [FAQ](#faq) 7. [Development](#development) @@ -295,6 +294,8 @@ add `noqa` directives to all failing lines, with the appropriate error codes.** ## Supported Rules +Regardless of the rule's origin, Ruff re-implements every rule in Rust as a first-party feature. + By default, Ruff enables all `E` and `F` error codes, which correspond to those built-in to Flake8. The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` command-line option. @@ -304,6 +305,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### Pyflakes +For more, see [Pyflakes](https://pypi.org/project/pyflakes/2.5.0/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | F401 | UnusedImport | `...` imported but unused | 🛠 | @@ -335,7 +338,9 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com | F841 | UnusedVariable | Local variable `...` is assigned to but never used | | | F901 | RaiseNotImplemented | `raise NotImplemented` should be `raise NotImplementedError` | 🛠 | -### pycodestyle (error) +### pycodestyle + +For more, see [pycodestyle](https://pypi.org/project/pycodestyle/2.9.1/) on PyPI. | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | @@ -353,16 +358,13 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com | E743 | AmbiguousFunctionName | Ambiguous function name: `...` | | | E902 | IOError | IOError: `...` | | | E999 | SyntaxError | SyntaxError: `...` | | - -### pycodestyle (warning) - -| Coade | Name | Message | Fix | -| ---- | ---- | ------- | --- | | W292 | NoNewLineAtEndOfFile | No newline at end of file | | | W605 | InvalidEscapeSequence | Invalid escape sequence: '\c' | | ### pydocstyle +For more, see [pydocstyle](https://pypi.org/project/pydocstyle/6.1.1/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | D100 | PublicModule | Missing docstring in public module | | @@ -412,6 +414,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### pyupgrade +For more, see [pyupgrade](https://pypi.org/project/pyupgrade/3.2.0/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | U001 | UselessMetaclassType | `__metaclass__ = type` is implied | 🛠 | @@ -425,6 +429,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### pep8-naming +For more, see [pep8-naming](https://pypi.org/project/pep8-naming/0.13.2/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | N801 | InvalidClassName | Class name `...` should use CapWords convention | | @@ -445,6 +451,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### flake8-comprehensions +For more, see [flake8-comprehensions](https://pypi.org/project/flake8-comprehensions/3.10.1/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | C400 | UnnecessaryGeneratorList | Unnecessary generator (rewrite as a `list` comprehension) | 🛠 | @@ -466,6 +474,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### flake8-bugbear +For more, see [flake8-bugbear](https://pypi.org/project/flake8-bugbear/22.10.27/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | B002 | UnaryPrefixIncrement | Python does not support the unary prefix increment. | | @@ -484,6 +494,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### flake8-builtins +For more, see [flake8-builtins](https://pypi.org/project/flake8-builtins/2.0.1/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | A001 | BuiltinVariableShadowing | Variable `...` is shadowing a python builtin | | @@ -492,6 +504,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### flake8-print +For more, see [flake8-print](https://pypi.org/project/flake8-print/5.0.0/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | T201 | PrintFound | `print` found | 🛠 | @@ -499,6 +513,8 @@ The 🛠 emoji indicates that a rule is automatically fixable by the `--fix` com ### flake8-quotes +For more, see [flake8-quotes](https://pypi.org/project/flake8-quotes/3.3.1/) on PyPI. + | Coade | Name | Message | Fix | | ---- | ---- | ------- | --- | | Q000 | BadQuotesInlineString | Single quotes found but double quotes preferred | | diff --git a/ruff_dev/src/generate_rules_table.rs b/ruff_dev/src/generate_rules_table.rs index e87a8b1368997..cb6369e185394 100644 --- a/ruff_dev/src/generate_rules_table.rs +++ b/ruff_dev/src/generate_rules_table.rs @@ -28,6 +28,16 @@ pub fn main(cli: &Cli) -> Result<()> { output.push('\n'); output.push('\n'); + if let Some(url) = check_category.url() { + output.push_str(&format!( + "For more, see [{}]({}) on PyPI.", + check_category.title(), + url + )); + output.push('\n'); + output.push('\n'); + } + output.push_str("| Coade | Name | Message | Fix |"); output.push('\n'); output.push_str("| ---- | ---- | ------- | --- |"); diff --git a/src/checks.rs b/src/checks.rs index be81c17d584e2..bdc5209aa23a2 100644 --- a/src/checks.rs +++ b/src/checks.rs @@ -195,8 +195,7 @@ pub enum CheckCode { #[derive(EnumIter, Debug, PartialEq, Eq)] pub enum CheckCategory { Pyflakes, - PycodestyleError, - PycodestyleWarning, + Pycodestyle, Pydocstyle, Pyupgrade, PEP8Naming, @@ -212,8 +211,7 @@ pub enum CheckCategory { impl CheckCategory { pub fn title(&self) -> &'static str { match self { - CheckCategory::PycodestyleError => "pycodestyle (error)", - CheckCategory::PycodestyleWarning => "pycodestyle (warning)", + CheckCategory::Pycodestyle => "pycodestyle", CheckCategory::Pyflakes => "Pyflakes", CheckCategory::Flake8Builtins => "flake8-builtins", CheckCategory::Flake8Bugbear => "flake8-bugbear", @@ -227,6 +225,29 @@ impl CheckCategory { CheckCategory::Meta => "Meta rules", } } + + pub fn url(&self) -> Option<&'static str> { + match self { + CheckCategory::Pycodestyle => Some("https://pypi.org/project/pycodestyle/2.9.1/"), + CheckCategory::Pyflakes => Some("https://pypi.org/project/pyflakes/2.5.0/"), + CheckCategory::Flake8Builtins => { + Some("https://pypi.org/project/flake8-builtins/2.0.1/") + } + CheckCategory::Flake8Bugbear => { + Some("https://pypi.org/project/flake8-bugbear/22.10.27/") + } + CheckCategory::Flake8Comprehensions => { + Some("https://pypi.org/project/flake8-comprehensions/3.10.1/") + } + CheckCategory::Flake8Print => Some("https://pypi.org/project/flake8-print/5.0.0/"), + CheckCategory::Flake8Quotes => Some("https://pypi.org/project/flake8-quotes/3.3.1/"), + CheckCategory::Pyupgrade => Some("https://pypi.org/project/pyupgrade/3.2.0/"), + CheckCategory::Pydocstyle => Some("https://pypi.org/project/pydocstyle/6.1.1/"), + CheckCategory::PEP8Naming => Some("https://pypi.org/project/pep8-naming/0.13.2/"), + CheckCategory::Ruff => None, + CheckCategory::Meta => None, + } + } } #[allow(clippy::upper_case_acronyms)] @@ -639,22 +660,22 @@ impl CheckCode { pub fn category(&self) -> CheckCategory { match self { - CheckCode::E402 => CheckCategory::PycodestyleError, - CheckCode::E501 => CheckCategory::PycodestyleError, - CheckCode::E711 => CheckCategory::PycodestyleError, - CheckCode::E712 => CheckCategory::PycodestyleError, - CheckCode::E713 => CheckCategory::PycodestyleError, - CheckCode::E714 => CheckCategory::PycodestyleError, - CheckCode::E721 => CheckCategory::PycodestyleError, - CheckCode::E722 => CheckCategory::PycodestyleError, - CheckCode::E731 => CheckCategory::PycodestyleError, - CheckCode::E741 => CheckCategory::PycodestyleError, - CheckCode::E742 => CheckCategory::PycodestyleError, - CheckCode::E743 => CheckCategory::PycodestyleError, - CheckCode::E902 => CheckCategory::PycodestyleError, - CheckCode::E999 => CheckCategory::PycodestyleError, - CheckCode::W292 => CheckCategory::PycodestyleWarning, - CheckCode::W605 => CheckCategory::PycodestyleWarning, + CheckCode::E402 => CheckCategory::Pycodestyle, + CheckCode::E501 => CheckCategory::Pycodestyle, + CheckCode::E711 => CheckCategory::Pycodestyle, + CheckCode::E712 => CheckCategory::Pycodestyle, + CheckCode::E713 => CheckCategory::Pycodestyle, + CheckCode::E714 => CheckCategory::Pycodestyle, + CheckCode::E721 => CheckCategory::Pycodestyle, + CheckCode::E722 => CheckCategory::Pycodestyle, + CheckCode::E731 => CheckCategory::Pycodestyle, + CheckCode::E741 => CheckCategory::Pycodestyle, + CheckCode::E742 => CheckCategory::Pycodestyle, + CheckCode::E743 => CheckCategory::Pycodestyle, + CheckCode::E902 => CheckCategory::Pycodestyle, + CheckCode::E999 => CheckCategory::Pycodestyle, + CheckCode::W292 => CheckCategory::Pycodestyle, + CheckCode::W605 => CheckCategory::Pycodestyle, CheckCode::F401 => CheckCategory::Pyflakes, CheckCode::F402 => CheckCategory::Pyflakes, CheckCode::F403 => CheckCategory::Pyflakes,