Add documentation for flake8-quotes rules (#2650)

This commit is contained in:
Charlie Marsh 2023-02-07 21:20:24 -05:00 committed by GitHub
parent 367f115d83
commit a9aa96b24f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 192 additions and 8 deletions

View file

@ -1162,10 +1162,10 @@ For more, see [flake8-quotes](https://pypi.org/project/flake8-quotes/) on PyPI.
| Code | Name | Message | Fix | | Code | Name | Message | Fix |
| ---- | ---- | ------- | --- | | ---- | ---- | ------- | --- |
| Q000 | bad-quotes-inline-string | Double quotes found but single quotes preferred | 🛠 | | [Q000](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-inline-string.md) | [bad-quotes-inline-string](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-inline-string.md) | Double quotes found but single quotes preferred | 🛠 |
| Q001 | bad-quotes-multiline-string | Double quote multiline found but single quotes preferred | 🛠 | | [Q001](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-multiline-string.md) | [bad-quotes-multiline-string](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-multiline-string.md) | Double quote multiline found but single quotes preferred | 🛠 |
| Q002 | bad-quotes-docstring | Double quote docstring found but single quotes preferred | 🛠 | | [Q002](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-docstring.md) | [bad-quotes-docstring](https://github.com/charliermarsh/ruff/blob/main/docs/rules/bad-quotes-docstring.md) | Double quote docstring found but single quotes preferred | 🛠 |
| Q003 | avoid-quote-escape | Change outer quotes to avoid escaping inner quotes | 🛠 | | [Q003](https://github.com/charliermarsh/ruff/blob/main/docs/rules/avoid-quote-escape.md) | [avoid-quote-escape](https://github.com/charliermarsh/ruff/blob/main/docs/rules/avoid-quote-escape.md) | Change outer quotes to avoid escaping inner quotes | 🛠 |
### flake8-return (RET) ### flake8-return (RET)

View file

@ -12,6 +12,24 @@ use crate::source_code::Locator;
use crate::violation::AlwaysAutofixableViolation; use crate::violation::AlwaysAutofixableViolation;
define_violation!( define_violation!(
/// ### What it does
/// Checks for inline strings that use single quotes or double quotes,
/// depending on the value of the [`inline-quotes`](https://github.com/charliermarsh/ruff#inline-quotes)
/// setting.
///
/// ### Why is this bad?
/// Consistency is good. Use either single or double quotes for inline
/// strings, but be consistent.
///
/// ### Example
/// ```python
/// foo = 'bar'
/// ```
///
/// Assuming `inline-quotes` is set to `double`, use instead:
/// ```python
/// foo = "bar"
/// ```
pub struct BadQuotesInlineString { pub struct BadQuotesInlineString {
pub quote: Quote, pub quote: Quote,
} }
@ -36,6 +54,28 @@ impl AlwaysAutofixableViolation for BadQuotesInlineString {
} }
define_violation!( define_violation!(
/// ### What it does
/// Checks for multiline strings that use single quotes or double quotes,
/// depending on the value of the [`multiline-quotes`](https://github.com/charliermarsh/ruff#multiline-quotes)
/// setting.
///
/// ### Why is this bad?
/// Consistency is good. Use either single or double quotes for multiline
/// strings, but be consistent.
///
/// ### Example
/// ```python
/// foo = '''
/// bar
/// '''
/// ```
///
/// Assuming `multiline-quotes` is set to `double`, use instead:
/// ```python
/// foo = """
/// bar
/// """
/// ```
pub struct BadQuotesMultilineString { pub struct BadQuotesMultilineString {
pub quote: Quote, pub quote: Quote,
} }
@ -60,6 +100,27 @@ impl AlwaysAutofixableViolation for BadQuotesMultilineString {
} }
define_violation!( define_violation!(
/// ### What it does
/// Checks for docstrings that use single quotes or double quotes, depending on the value of the [`docstring-quotes`](https://github.com/charliermarsh/ruff#docstring-quotes)
/// setting.
///
/// ### Why is this bad?
/// Consistency is good. Use either single or double quotes for docstring
/// strings, but be consistent.
///
/// ### Example
/// ```python
/// '''
/// bar
/// '''
/// ```
///
/// Assuming `docstring-quotes` is set to `double`, use instead:
/// ```python
/// """
/// bar
/// """
/// ```
pub struct BadQuotesDocstring { pub struct BadQuotesDocstring {
pub quote: Quote, pub quote: Quote,
} }
@ -84,6 +145,23 @@ impl AlwaysAutofixableViolation for BadQuotesDocstring {
} }
define_violation!( define_violation!(
/// ### What it does
/// Checks for strings that include escaped quotes, and suggests changing
/// the quote style to avoid the need to escape them.
///
/// ### Why is this bad?
/// It's preferable to avoid escaped quotes in strings. By changing the
/// outer quote style, you can avoid escaping inner quotes.
///
/// ### Example
/// ```python
/// foo = 'bar\'s'
/// ```
///
/// Use instead:
/// ```python
/// foo = "bar's"
/// ```
pub struct AvoidQuoteEscape; pub struct AvoidQuoteEscape;
); );
impl AlwaysAutofixableViolation for AvoidQuoteEscape { impl AlwaysAutofixableViolation for AvoidQuoteEscape {

View file

@ -1,11 +1,11 @@
use std::fmt; use std::fmt;
use crate::ast::helpers::unparse_constant;
use itertools::Itertools; use itertools::Itertools;
use ruff_macros::{define_violation, derive_message_formats}; use ruff_macros::{define_violation, derive_message_formats};
use rustpython_parser::ast::{Cmpop, Expr, ExprKind, Located}; use rustpython_parser::ast::{Cmpop, Expr, ExprKind, Located};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::ast::helpers::unparse_constant;
use crate::ast::types::Range; use crate::ast::types::Range;
use crate::checkers::ast::Checker; use crate::checkers::ast::Checker;
use crate::registry::Diagnostic; use crate::registry::Diagnostic;

View file

@ -1,8 +1,8 @@
use crate::ast::helpers::unparse_constant;
use itertools::Itertools; use itertools::Itertools;
use ruff_macros::{define_violation, derive_message_formats}; use ruff_macros::{define_violation, derive_message_formats};
use rustpython_parser::ast::{Constant, Expr, ExprKind}; use rustpython_parser::ast::{Constant, Expr, ExprKind};
use crate::ast::helpers::unparse_constant;
use crate::ast::types::Range; use crate::ast::types::Range;
use crate::checkers::ast::Checker; use crate::checkers::ast::Checker;
use crate::registry::Diagnostic; use crate::registry::Diagnostic;

View file

@ -4,11 +4,10 @@
use std::fs; use std::fs;
use anyhow::Result; use anyhow::Result;
use ruff::registry::{Linter, Rule, RuleNamespace};
use ruff::AutofixAvailability; use ruff::AutofixAvailability;
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use ruff::registry::{Linter, Rule, RuleNamespace};
#[derive(clap::Args)] #[derive(clap::Args)]
pub struct Args { pub struct Args {
/// Write the generated docs to stdout (rather than to the filesystem). /// Write the generated docs to stdout (rather than to the filesystem).
@ -22,10 +21,12 @@ pub fn main(args: &Args) -> Result<()> {
let mut output = String::new(); let mut output = String::new();
output.push_str(&format!("# {} ({})", rule.as_ref(), rule.code())); output.push_str(&format!("# {} ({})", rule.as_ref(), rule.code()));
output.push('\n'); output.push('\n');
output.push('\n');
let (linter, _) = Linter::parse_code(rule.code()).unwrap(); let (linter, _) = Linter::parse_code(rule.code()).unwrap();
output.push_str(&format!("Derived from the **{}** linter.", linter.name())); output.push_str(&format!("Derived from the **{}** linter.", linter.name()));
output.push('\n'); output.push('\n');
output.push('\n');
if let Some(autofix) = rule.autofixable() { if let Some(autofix) = rule.autofixable() {
output.push_str(match autofix.available { output.push_str(match autofix.available {
@ -33,6 +34,7 @@ pub fn main(args: &Args) -> Result<()> {
AutofixAvailability::Always => "Autofix is always available.", AutofixAvailability::Always => "Autofix is always available.",
}); });
output.push('\n'); output.push('\n');
output.push('\n');
} }
output.push_str(explanation.trim()); output.push_str(explanation.trim());

View file

@ -1,5 +1,7 @@
# assert-raises-exception (B017) # assert-raises-exception (B017)
Derived from the **flake8-bugbear** linter. Derived from the **flake8-bugbear** linter.
### What it does ### What it does
Checks for `self.assertRaises(Exception)`. Checks for `self.assertRaises(Exception)`.

View file

@ -0,0 +1,23 @@
# avoid-quote-escape (Q003)
Derived from the **flake8-quotes** linter.
Autofix is always available.
### What it does
Checks for strings that include escaped quotes, and suggests changing
the quote style to avoid the need to escape them.
### Why is this bad?
It's preferable to avoid escaped quotes in strings. By changing the
outer quote style, you can avoid escaping inner quotes.
### Example
```python
foo = 'bar\'s'
```
Use instead:
```python
foo = "bar's"
```

View file

@ -0,0 +1,27 @@
# bad-quotes-docstring (Q002)
Derived from the **flake8-quotes** linter.
Autofix is always available.
### What it does
Checks for docstrings that use single quotes or double quotes, depending on the value of the [`docstring-quotes`](https://github.com/charliermarsh/ruff#docstring-quotes)
setting.
### Why is this bad?
Consistency is good. Use either single or double quotes for docstring
strings, but be consistent.
### Example
```python
'''
bar
'''
```
Assuming `docstring-quotes` is set to `double`, use instead:
```python
"""
bar
"""
```

View file

@ -0,0 +1,24 @@
# bad-quotes-inline-string (Q000)
Derived from the **flake8-quotes** linter.
Autofix is always available.
### What it does
Checks for inline strings that use single quotes or double quotes,
depending on the value of the [`inline-quotes`](https://github.com/charliermarsh/ruff#inline-quotes)
setting.
### Why is this bad?
Consistency is good. Use either single or double quotes for inline
strings, but be consistent.
### Example
```python
foo = 'bar'
```
Assuming `inline-quotes` is set to `double`, use instead:
```python
foo = "bar"
```

View file

@ -0,0 +1,28 @@
# bad-quotes-multiline-string (Q001)
Derived from the **flake8-quotes** linter.
Autofix is always available.
### What it does
Checks for multiline strings that use single quotes or double quotes,
depending on the value of the [`multiline-quotes`](https://github.com/charliermarsh/ruff#multiline-quotes)
setting.
### Why is this bad?
Consistency is good. Use either single or double quotes for multiline
strings, but be consistent.
### Example
```python
foo = '''
bar
'''
```
Assuming `multiline-quotes` is set to `double`, use instead:
```python
foo = """
bar
"""
```