mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-30 03:27:07 +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
 | |
| ```
 |