mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-11-03 21:24:29 +00:00 
			
		
		
		
	## Summary This PR updates the formatter and linter to use the `PythonVersion` struct from the `ruff_python_ast` crate internally. While this doesn't remove the need for the `linter::PythonVersion` enum, it does remove the `formatter::PythonVersion` enum and limits the use in the linter to deserializing from CLI arguments and config files and moves most of the remaining methods to the `ast::PythonVersion` struct. ## Test Plan Existing tests, with some inputs and outputs updated to reflect the new (de)serialization format. I think these are test-specific and shouldn't affect any external (de)serialization. --------- Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
		
			
				
	
	
		
			1044 lines
		
	
	
	
		
			21 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			1044 lines
		
	
	
	
		
			21 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
 | 
						|
		  	- author
 | 
						|
		"""
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
target_version             = 3.9
 | 
						|
source_type                = Python
 | 
						|
```
 | 
						|
 | 
						|
```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
 | 
						|
                - author
 | 
						|
        """
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
target_version             = 3.9
 | 
						|
source_type                = Python
 | 
						|
```
 | 
						|
 | 
						|
```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
 | 
						|
            - author
 | 
						|
    """
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
target_version             = 3.9
 | 
						|
source_type                = Python
 | 
						|
```
 | 
						|
 | 
						|
```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
 | 
						|
		        - author
 | 
						|
		"""
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
target_version             = 3.9
 | 
						|
source_type                = Python
 | 
						|
```
 | 
						|
 | 
						|
```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
 | 
						|
		        - author
 | 
						|
		"""
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
target_version             = 3.9
 | 
						|
source_type                = Python
 | 
						|
```
 | 
						|
 | 
						|
```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
 | 
						|
                - author
 | 
						|
        """
 | 
						|
 | 
						|
 | 
						|
def single_quoted():
 | 
						|
    "content\ "
 | 
						|
    return
 | 
						|
```
 |