class NothingChanged(UserWarning):
- """Raised by `format_file` when the reformatted code is the same as source."""
+ """Raised by `format_file()` when the reformatted code is the same as source."""
class CannotSplit(Exception):
loop: BaseEventLoop,
executor: Executor,
) -> int:
+ """Run formatting of `sources` in parallel using the provided `executor`.
+
+ (Use ProcessPoolExecutors for actual parallelism.)
+
+ `line_length`, `write_back`, and `fast` options are passed to
+ :func:`format_file_in_place`.
+ """
tasks = {
src: loop.run_in_executor(
executor, format_file_in_place, src, line_length, fast, write_back
def format_file_in_place(
src: Path, line_length: int, fast: bool, write_back: bool = False
) -> bool:
- """Format the file and rewrite if changed. Return True if changed."""
+ """Format file under `src` path. Return True if changed.
+
+ If `write_back` is True, write reformatted code back to stdout.
+ `line_length` and `fast` options are passed to :func:`format_file_contents`.
+ """
with tokenize.open(src) as src_buffer:
src_contents = src_buffer.read()
try:
def format_stdin_to_stdout(
line_length: int, fast: bool, write_back: bool = False
) -> bool:
- """Format file on stdin and pipe output to stdout. Return True if changed."""
+ """Format file on stdin. Return True if changed.
+
+ If `write_back` is True, write reformatted code back to stdout.
+ `line_length` and `fast` arguments are passed to :func:`format_file_contents`.
+ """
contents = sys.stdin.read()
try:
contents = format_file_contents(contents, line_length=line_length, fast=fast)
def format_file_contents(
src_contents: str, line_length: int, fast: bool
) -> FileContent:
- """Reformats a file and returns its contents and encoding."""
+ """Reformats a file and returns its contents and encoding.
+
+ If `fast` is False, additionally confirm that the reformatted code is
+ valid by calling :func:`assert_equivalent` and :func:`assert_stable` on it.
+ `line_length` is passed to :func:`format_str`.
+ """
if src_contents.strip() == '':
raise NothingChanged
def format_str(src_contents: str, line_length: int) -> FileContent:
- """Reformats a string and returns new contents."""
+ """Reformats a string and returns new contents.
+
+ `line_length` determines how many characters per line are allowed.
+ """
src_node = lib2to3_parse(src_contents)
dst_contents = ""
lines = LineGenerator()
"""Basic lib2to3 visitor that yields things of type `T` on `visit()`."""
def visit(self, node: LN) -> Iterator[T]:
- """Main method to start the visit process. Yields objects of type `T`.
+ """Main method to visit `node` and its children.
It tries to find a `visit_*()` method for the given `node.type`, like
`visit_simple_stmt` for Node objects or `visit_INDENT` for Leaf objects.
class BracketTracker:
"""Keeps track of brackets on a line."""
- #: Current bracket depth.
depth: int = 0
- #: All currently unclosed brackets.
bracket_match: Dict[Tuple[Depth, NodeType], Leaf] = Factory(dict)
- #: All current delimiters with their assigned priority.
delimiters: Dict[LeafID, Priority] = Factory(dict)
- #: Last processed leaf, if any.
previous: Optional[Leaf] = None
def mark(self, leaf: Leaf) -> None:
class Line:
"""Holds leaves and comments. Can be printed with `str(line)`."""
- #: indentation level
depth: int = 0
- #: list of leaves
leaves: List[Leaf] = Factory(list)
- #: inline comments that belong on this line
comments: Dict[LeafID, Leaf] = Factory(dict)
bracket_tracker: BracketTracker = Factory(BracketTracker)
inside_brackets: bool = False
-------------------------
.. autoclass:: black.BracketTracker
- :members:
+ :members:
:class:`EmptyLineTracker`
-------------------------
.. autoclass:: black.EmptyLineTracker
- :members:
+ :members:
:class:`Line`
-------------
.. autoclass:: black.Line
:members:
+ :special-members: __str__, __bool__
-:class:`LineGenerator` (:class:`Visitor` [:class:`Line`])
--------------------------------------------------------
+:class:`LineGenerator`
+----------------------
.. autoclass:: black.LineGenerator
+ :show-inheritance:
:members:
:class:`Report`
.. autoclass:: black.Report
:members:
+ :special-members: __str__
-:class:`UnformattedLines` (:class:`Line`)
-----------------------------------------
+:class:`UnformattedLines`
+-------------------------
.. autoclass:: black.UnformattedLines
+ :show-inheritance:
:members:
-:class:`Visitor` (Generic[T])
-----------------------------
+:class:`Visitor`
+----------------
.. autoclass:: black.Visitor
+ :show-inheritance:
:members: