Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add documentation for flake8-quotes rules #2650

Merged
merged 1 commit into from
Feb 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1162,10 +1162,10 @@ For more, see [flake8-quotes](https://pypi.org/project/flake8-quotes/) on PyPI.

| Code | Name | Message | Fix |
| ---- | ---- | ------- | --- |
| Q000 | bad-quotes-inline-string | Double quotes found but single quotes preferred | 🛠 |
| Q001 | bad-quotes-multiline-string | Double quote multiline found but single quotes preferred | 🛠 |
| Q002 | bad-quotes-docstring | Double quote docstring found but single quotes preferred | 🛠 |
| Q003 | avoid-quote-escape | Change outer quotes to avoid escaping inner quotes | 🛠 |
| [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](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](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](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)

Expand Down
78 changes: 78 additions & 0 deletions crates/ruff/src/rules/flake8_quotes/rules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,24 @@ use crate::source_code::Locator;
use crate::violation::AlwaysAutofixableViolation;

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 quote: Quote,
}
Expand All @@ -36,6 +54,28 @@ impl AlwaysAutofixableViolation for BadQuotesInlineString {
}

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 quote: Quote,
}
Expand All @@ -60,6 +100,27 @@ impl AlwaysAutofixableViolation for BadQuotesMultilineString {
}

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 quote: Quote,
}
Expand All @@ -84,6 +145,23 @@ impl AlwaysAutofixableViolation for BadQuotesDocstring {
}

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;
);
impl AlwaysAutofixableViolation for AvoidQuoteEscape {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::fmt;

use crate::ast::helpers::unparse_constant;
use itertools::Itertools;
use ruff_macros::{define_violation, derive_message_formats};
use rustpython_parser::ast::{Cmpop, Expr, ExprKind, Located};
use serde::{Deserialize, Serialize};

use crate::ast::helpers::unparse_constant;
use crate::ast::types::Range;
use crate::checkers::ast::Checker;
use crate::registry::Diagnostic;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::ast::helpers::unparse_constant;
use itertools::Itertools;
use ruff_macros::{define_violation, derive_message_formats};
use rustpython_parser::ast::{Constant, Expr, ExprKind};

use crate::ast::helpers::unparse_constant;
use crate::ast::types::Range;
use crate::checkers::ast::Checker;
use crate::registry::Diagnostic;
Expand Down
6 changes: 4 additions & 2 deletions crates/ruff_dev/src/generate_docs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
use std::fs;

use anyhow::Result;
use ruff::registry::{Linter, Rule, RuleNamespace};
use ruff::AutofixAvailability;
use strum::IntoEnumIterator;

use ruff::registry::{Linter, Rule, RuleNamespace};

#[derive(clap::Args)]
pub struct Args {
/// Write the generated docs to stdout (rather than to the filesystem).
Expand All @@ -22,17 +21,20 @@ pub fn main(args: &Args) -> Result<()> {
let mut output = String::new();
output.push_str(&format!("# {} ({})", rule.as_ref(), rule.code()));
output.push('\n');
output.push('\n');

let (linter, _) = Linter::parse_code(rule.code()).unwrap();
output.push_str(&format!("Derived from the **{}** linter.", linter.name()));
output.push('\n');
output.push('\n');

if let Some(autofix) = rule.autofixable() {
output.push_str(match autofix.available {
AutofixAvailability::Sometimes => "Autofix is sometimes available.",
AutofixAvailability::Always => "Autofix is always available.",
});
output.push('\n');
output.push('\n');
}

output.push_str(explanation.trim());
Expand Down
2 changes: 2 additions & 0 deletions docs/rules/assert-raises-exception.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# assert-raises-exception (B017)

Derived from the **flake8-bugbear** linter.

### What it does
Checks for `self.assertRaises(Exception)`.

Expand Down
23 changes: 23 additions & 0 deletions docs/rules/avoid-quote-escape.md
Original file line number Diff line number Diff line change
@@ -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"
```
27 changes: 27 additions & 0 deletions docs/rules/bad-quotes-docstring.md
Original file line number Diff line number Diff line change
@@ -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
"""
```
24 changes: 24 additions & 0 deletions docs/rules/bad-quotes-inline-string.md
Original file line number Diff line number Diff line change
@@ -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"
```
28 changes: 28 additions & 0 deletions docs/rules/bad-quotes-multiline-string.md
Original file line number Diff line number Diff line change
@@ -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
"""
```