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

Use double quotes for all docstrings, including single-quoted docstrings #9020

Merged
merged 1 commit into from
Dec 7, 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
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,8 @@
{
"indent_style": "tab",
"indent_width": 4
},
{
"quote_style": "single"
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,8 @@ def tabbed_indent(self):
Normal indented line
- autor
"""


def single_quoted():
' content\ '
return
7 changes: 3 additions & 4 deletions crates/ruff_python_formatter/src/expression/string/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ impl<'a> Format<PyFormatContext<'_>> for FormatString<'a> {
let normalized = string_part.normalize(
Quoting::CanChange,
&locator,
f.options().quote_style(),
// Per PEP 8 and PEP 257, always prefer double quotes for docstrings
QuoteStyle::Double,
parent_docstring_quote_style,
);
docstring::format(&normalized, f)
Expand Down Expand Up @@ -323,9 +324,7 @@ impl StringPart {
configured_style: QuoteStyle,
parent_docstring_quote_style: Option<QuoteStyle>,
) -> NormalizedString<'a> {
// Per PEP 8 and PEP 257, always prefer double quotes for docstrings
// and triple-quoted strings. (We assume docstrings are always
// triple-quoted.)
// Per PEP 8, always prefer double quotes for triple-quoted strings.
let preferred_style = if self.quotes.triple {
// ... unless we're formatting a code snippet inside a docstring,
// then we specifically want to invert our quote style to avoid
Expand Down
198 changes: 198 additions & 0 deletions crates/ruff_python_formatter/tests/snapshots/[email protected]
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@ class TabbedIndent:
Normal indented line
- autor
"""
def single_quoted():
' content\ '
return
```

## Outputs
Expand Down Expand Up @@ -324,6 +329,11 @@ class TabbedIndent:
Normal indented line
- autor
"""
def single_quoted():
"content\ "
return
```


Expand Down Expand Up @@ -492,6 +502,11 @@ class TabbedIndent:
Normal indented line
- autor
"""
def single_quoted():
"content\ "
return
```


Expand Down Expand Up @@ -660,6 +675,11 @@ class TabbedIndent:
Normal indented line
- autor
"""
def single_quoted():
"content\ "
return
```


Expand Down Expand Up @@ -828,6 +848,184 @@ class TabbedIndent:
Normal indented line
- autor
"""
def single_quoted():
"content\ "
return
```


### Output 5
```
indent-style = space
line-width = 88
indent-width = 4
quote-style = Single
line-ending = LineFeed
magic-trailing-comma = Respect
docstring-code = Disabled
preview = Disabled
```

```python
def single_line_backslashes1():
"""content\ """
return
def single_line_backslashes2():
"""content\\"""
return
def single_line_backslashes3():
"""content\\\ """
return
def multiline_backslashes1():
"""This is a docstring with
some lines of text\ """
return
def multiline_backslashes2():
"""This is a docstring with
some lines of text\\"""
return
def multiline_backslashes3():
"""This is a docstring with
some lines of text\\\ """
return
def multiple_negatively_indented_docstring_lines():
"""a
b
c
d
e
"""
def overindentend_docstring():
"""a
over-indented
"""
def comment_before_docstring():
# don't lose this function comment ...
"""Does nothing.
But it has comments
""" # ... neither lose this function comment
class CommentBeforeDocstring:
# don't lose this class comment ...
"""Empty class.
But it has comments
""" # ... neither lose this class comment
class IndentMeSome:
def doc_string_without_linebreak_after_colon(self):
"""This is somewhat strange
a
b
We format this a is the docstring had started properly indented on the next
line if the target indentation. This may we incorrect since source and target
indentation can be incorrect, but this is also an edge case.
"""
class IgnoreImplicitlyConcatenatedStrings:
"""""" ''
def docstring_that_ends_with_quote_and_a_line_break1():
"""
he said "the news of my death have been greatly exaggerated"
"""
def docstring_that_ends_with_quote_and_a_line_break2():
"""he said "the news of my death have been greatly exaggerated" """
def docstring_that_ends_with_quote_and_a_line_break3():
"""he said "the news of my death have been greatly exaggerated" """
class ByteDocstring:
b""" has leading whitespace"""
first_statement = 1
class CommentAfterDocstring1:
"""Browse module classes and functions in IDLE."""
# This class is also the base class for pathbrowser.PathBrowser.
def __init__(self):
pass
class CommentAfterDocstring2:
"""Browse module classes and functions in IDLE."""
# This class is also the base class for pathbrowser.PathBrowser.
def __init__(self):
pass
class CommentAfterDocstring3:
"""Browse module classes and functions in IDLE."""
# This class is also the base class for pathbrowser.PathBrowser.
def __init__(self):
pass
class CommentAfterDocstring4:
"""Browse module classes and functions in IDLE."""
# This class is also the base class for pathbrowser.PathBrowser.
def __init__(self):
pass
class CommentAfterDocstring5:
"""Browse module classes and functions in IDLE."""
# This class is also the base class for pathbrowser.PathBrowser.
def f():
"""Browse module classes and functions in IDLE."""
# ^ Do not insert a newline above here
pass
class TabbedIndent:
def tabbed_indent(self):
"""check for correct tabbed formatting
^^^^^^^^^^
Normal indented line
- autor
"""
def single_quoted():
"content\ "
return
```


Expand Down
Loading