mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-26 20:09:22 +00:00

This PR does the plumbing to make a new formatting option,
`docstring-code-format`, available in the configuration for end users.
It is disabled by default (opt-in). It is opt-in at least initially to
reflect a conservative posture. The intent is to make it opt-out at some
point in the future.
This was split out from #8811 in order to make #8811 easier to merge.
Namely, once this is merged, docstring code snippet formatting will
become available to end users. (See comments below for how we arrived at
the name.)
Closes #7146
## Test Plan
Other than the standard test suite, I ran the formatter over the CPython
and polars projects to ensure both that the result looked sensible and
that tests still passed. At time of writing, one issue that currently
appears is that reformatting code snippets trips the long line lint:
1905886802
1037 lines
20 KiB
Text
1037 lines
20 KiB
Text
---
|
|
source: crates/ruff_python_formatter/tests/fixtures.rs
|
|
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py
|
|
---
|
|
## Input
|
|
```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
|
|
```
|
|
|
|
## Outputs
|
|
### Output 1
|
|
```
|
|
indent-style = space
|
|
line-width = 88
|
|
indent-width = 4
|
|
quote-style = Double
|
|
line-ending = LineFeed
|
|
magic-trailing-comma = Respect
|
|
docstring-code = Disabled
|
|
docstring-code-line-width = "dynamic"
|
|
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
|
|
```
|
|
|
|
|
|
### Output 2
|
|
```
|
|
indent-style = space
|
|
line-width = 88
|
|
indent-width = 2
|
|
quote-style = Double
|
|
line-ending = LineFeed
|
|
magic-trailing-comma = Respect
|
|
docstring-code = Disabled
|
|
docstring-code-line-width = "dynamic"
|
|
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
|
|
```
|
|
|
|
|
|
### Output 3
|
|
```
|
|
indent-style = tab
|
|
line-width = 88
|
|
indent-width = 8
|
|
quote-style = Double
|
|
line-ending = LineFeed
|
|
magic-trailing-comma = Respect
|
|
docstring-code = Disabled
|
|
docstring-code-line-width = "dynamic"
|
|
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
|
|
```
|
|
|
|
|
|
### Output 4
|
|
```
|
|
indent-style = tab
|
|
line-width = 88
|
|
indent-width = 4
|
|
quote-style = Double
|
|
line-ending = LineFeed
|
|
magic-trailing-comma = Respect
|
|
docstring-code = Disabled
|
|
docstring-code-line-width = "dynamic"
|
|
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
|
|
```
|
|
|
|
|
|
### Output 5
|
|
```
|
|
indent-style = space
|
|
line-width = 88
|
|
indent-width = 4
|
|
quote-style = Single
|
|
line-ending = LineFeed
|
|
magic-trailing-comma = Respect
|
|
docstring-code = Disabled
|
|
docstring-code-line-width = "dynamic"
|
|
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
|
|
```
|
|
|
|
|
|
|