Convert README file to MarkDown
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..74b6a42
--- /dev/null
+++ b/README.md
@@ -0,0 +1,1038 @@
+# YAPF
+
+<p align="center">
+<a href="https://badge.fury.io/py/yapf"><img alt="PyPI Version" src="https://badge.fury.io/py/yapf.svg"></a>
+<a href="https://github.com/google/yapf/actions/workflows/ci.yml"><img alt="Build Status" src="https://github.com/google/yapf/workflows/ci.yml/badge.svg"></a>
+<a href="https://github.com/google/yapf/actions/workflows/pre-commit.yml"><img alt="Actions Status" src="https://github.com/google/yapf/workflows/pre-commit.yml/badge.svg"></a>
+<a href="https://coveralls.io/github/google/yapf?branch=main"><img alt="Coverage Status" src="https://coveralls.io/repos/github/google/yapf/badge.svg?branch=main"></a>
+</p>
+
+
+----
+
+- TOC
+{:toc}
+
+----
+
+
+## Introduction
+
+YAPF is a Python formatter based off of [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html)
+(developed by Daniel Jasper). In essence, the algorithm takes the code and
+calculates the best formatting that conforms to the configured style. It takes
+away a lot of the drudgery of maintaining your code.
+
+The ultimate goal is that the code YAPF produces is as good as the code that a
+programmer would write if they were following the style guide.
+
+> **Note**
+> YAPF is not an official Google product (experimental or otherwise), it is
+> just code that happens to be owned by Google.
+
+
+## Installation
+
+To install YAPF from PyPI:
+
+```bash
+$ pip install yapf
+```
+
+YAPF is still considered in "alpha" stage, and the released version may change
+often; therefore, the best way to keep up-to-date with the latest development
+is to clone this repository.
+
+Note that if you intend to use YAPF as a command-line tool rather than as a
+library, installation is not necessary. YAPF supports being run as a directory
+by the Python interpreter. If you cloned/unzipped YAPF into `DIR`, it's
+possible to run:
+
+```bash
+$ PYTHONPATH=DIR python DIR/yapf [options] ...
+```
+
+
+## Required Python versions
+
+YAPF supports Python 3.7+.
+
+> **Note**
+> YAPF requires the code it formats to be valid Python for the version YAPF
+> itself runs under.
+
+
+## Usage
+
+```console
+usage: yapf [-h] [-v] [-d | -i | -q] [-r | -l START-END] [-e PATTERN]
+            [--style STYLE] [--style-help] [--no-local-style] [-p] [-m] [-vv]
+            [files ...]
+
+Formatter for Python code.
+
+positional arguments:
+  files                 reads from stdin when no files are specified.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -v, --version         show program's version number and exit
+  -d, --diff            print the diff for the fixed source
+  -i, --in-place        make changes to files in place
+  -q, --quiet           output nothing and set return value
+  -r, --recursive       run recursively over directories
+  -l START-END, --lines START-END
+                        range of lines to reformat, one-based
+  -e PATTERN, --exclude PATTERN
+                        patterns for files to exclude from formatting
+  --style STYLE         specify formatting style: either a style name (for
+                        example "pep8" or "google"), or the name of a file
+                        with style settings. The default is pep8 unless a
+                        .style.yapf or setup.cfg or pyproject.toml file
+                        located in the same directory as the source or one of
+                        its parent directories (for stdin, the current
+                        directory is used).
+  --style-help          show style settings and exit; this output can be saved
+                        to .style.yapf to make your settings permanent
+  --no-local-style      don't search for local style definition
+  -p, --parallel        run YAPF in parallel when formatting multiple files.
+  -m, --print-modified  print out file names of modified files
+  -vv, --verbose        print out file names while processing
+```
+
+### Return Codes
+
+Normally YAPF returns zero on successful program termination and non-zero
+otherwise.
+
+If `--diff` is supplied, YAPF returns zero when no changes were necessary,
+non-zero otherwise (including program error). You can use this in a CI workflow
+to test that code has been YAPF-formatted.
+
+### Excluding files from formatting (.yapfignore or pyproject.toml)
+
+In addition to exclude patterns provided on commandline, YAPF looks for
+additional patterns specified in a file named `.yapfignore` or `pyproject.toml`
+located in the working directory from which YAPF is invoked.
+
+`.yapfignore`'s syntax is similar to UNIX's filename pattern matching:
+
+```
+*       matches everything
+?       matches any single character
+[seq]   matches any character in seq
+[!seq]  matches any character not in seq
+```
+
+Note that no entry should begin with `./`.
+
+If you use `pyproject.toml`, exclude patterns are specified by `ignore_patterns` key
+in `[tool.yapfignore]` section. For example:
+
+```ini
+[tool.yapfignore]
+ignore_patterns = [
+  "temp/**/*.py",
+  "temp2/*.py"
+]
+```
+
+
+Formatting style
+================
+
+The formatting style used by YAPF is configurable and there are many "knobs"
+that can be used to tune how YAPF does formatting. See the `style.py` module
+for the full list.
+
+To control the style, run YAPF with the `--style` argument. It accepts one of
+the predefined styles (e.g., `pep8` or `google`), a path to a configuration
+file that specifies the desired style, or a dictionary of key/value pairs.
+
+The config file is a simple listing of (case-insensitive) `key = value` pairs
+with a `[style]` heading. For example:
+
+```ini
+[style]
+based_on_style = pep8
+spaces_before_comment = 4
+split_before_logical_operator = true
+```
+
+The `based_on_style` setting determines which of the predefined styles this
+custom style is based on (think of it like subclassing). Four
+styles are predefined:
+
+- `pep8` (default)
+- `google` (based off of the [Google Python Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md))
+- `yapf` (for use with Google open source projects)
+- `facebook`
+
+See `_STYLE_NAME_TO_FACTORY` in [`style.py`](https://github.com/google/yapf/blob/main/yapf/yapflib/style.py) for details.
+
+It's also possible to do the same on the command line with a dictionary. For
+example:
+
+```bash
+--style='{based_on_style: pep8, indent_width: 2}'
+```
+
+This will take the `pep8` base style and modify it to have two space
+indentations.
+
+YAPF will search for the formatting style in the following manner:
+
+1. Specified on the command line
+2. In the `[style]` section of a `.style.yapf` file in either the current
+   directory or one of its parent directories.
+3. In the `[yapf]` section of a `setup.cfg` file in either the current
+   directory or one of its parent directories.
+4. In the `[tool.yapf]` section of a `pyproject.toml` file in either the current
+   directory or one of its parent directories.
+5. In the `[style]` section of a `~/.config/yapf/style` file in your home
+   directory.
+
+If none of those files are found, the default style PEP8 is used.
+
+
+Example
+=======
+
+An example of the type of formatting that YAPF can do, it will take this ugly
+code:
+
+```python
+x = {  'a':37,'b':42,
+
+'c':927}
+
+y = 'hello ''world'
+z = 'hello '+'world'
+a = 'hello {}'.format('world')
+class foo  (     object  ):
+  def f    (self   ):
+    return       37*-+2
+  def g(self, x,y=42):
+      return y
+def f  (   a ) :
+  return      37+-+a[42-x :  y**3]
+```
+
+and reformat it into:
+
+```python
+x = {'a': 37, 'b': 42, 'c': 927}
+
+y = 'hello ' 'world'
+z = 'hello ' + 'world'
+a = 'hello {}'.format('world')
+
+
+class foo(object):
+    def f(self):
+        return 37 * -+2
+
+    def g(self, x, y=42):
+        return y
+
+
+def f(a):
+    return 37 + -+a[42 - x:y**3]
+```
+
+
+## Example as a module
+
+The two main APIs for calling YAPF are `FormatCode` and `FormatFile`, these
+share several arguments which are described below:
+
+```python
+>>> from yapf.yapflib.yapf_api import FormatCode  # reformat a string of code
+
+>>> formatted_code, changed = FormatCode("f ( a = 1, b = 2 )")
+>>> formatted_code
+'f(a=1, b=2)\n'
+>>> changed
+True
+```
+
+A `style_config` argument: Either a style name or a path to a file that
+contains formatting style settings. If None is specified, use the default style
+as set in `style.DEFAULT_STYLE_FACTORY`.
+
+```python
+>>> FormatCode("def g():\n  return True", style_config='pep8')[0]
+'def g():\n    return True\n'
+```
+
+A `lines` argument: A list of tuples of lines (ints), [start, end], that we
+want to format. The lines are 1-based indexed. It can be used by third-party
+code (e.g., IDEs) when reformatting a snippet of code rather than a whole file.
+
+```python
+>>> FormatCode("def g( ):\n    a=1\n    b = 2\n    return a==b", lines=[(1, 1), (2, 3)])[0]
+'def g():\n    a = 1\n    b = 2\n    return a==b\n'
+```
+
+A `print_diff` (bool): Instead of returning the reformatted source, return a
+diff that turns the formatted source into reformatted source.
+
+```diff
+>>> print(FormatCode("a==b", filename="foo.py", print_diff=True)[0])
+--- foo.py (original)
++++ foo.py (reformatted)
+@@ -1 +1 @@
+-a==b
++a == b
+```
+
+Note: the `filename` argument for `FormatCode` is what is inserted into the
+diff, the default is `<unknown>`.
+
+`FormatFile` returns reformatted code from the passed file along with its encoding:
+
+```python
+>>> from yapf.yapflib.yapf_api import FormatFile  # reformat a file
+
+>>> print(open("foo.py").read())  # contents of file
+a==b
+
+>>> reformatted_code, encoding, changed = FormatFile("foo.py")
+>>> formatted_code
+'a == b\n'
+>>> encoding
+'utf-8'
+>>> changed
+True
+```
+
+The `in_place` argument saves the reformatted code back to the file:
+
+```python
+>>> FormatFile("foo.py", in_place=True)[:2]
+(None, 'utf-8')
+
+>>> print(open("foo.py").read())  # contents of file (now fixed)
+a == b
+```
+
+
+## Formatting diffs
+
+Options:
+
+```
+usage: yapf-diff [-h] [-i] [-p NUM] [--regex PATTERN] [--iregex PATTERN][-v]
+                 [--style STYLE] [--binary BINARY]
+
+This script reads input from a unified diff and reformats all the changed
+lines. This is useful to reformat all the lines touched by a specific patch.
+Example usage for git/svn users:
+
+  git diff -U0 --no-color --relative HEAD^ | yapf-diff -i
+  svn diff --diff-cmd=diff -x-U0 | yapf-diff -p0 -i
+
+It should be noted that the filename contained in the diff is used
+unmodified to determine the source file to update. Users calling this script
+directly should be careful to ensure that the path in the diff is correct
+relative to the current working directory.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -i, --in-place        apply edits to files instead of displaying a diff
+  -p NUM, --prefix NUM  strip the smallest prefix containing P slashes
+  --regex PATTERN       custom pattern selecting file paths to reformat
+                        (case sensitive, overrides -iregex)
+  --iregex PATTERN      custom pattern selecting file paths to reformat
+                        (case insensitive, overridden by -regex)
+  -v, --verbose         be more verbose, ineffective without -i
+  --style STYLE         specify formatting style: either a style name (for
+                        example "pep8" or "google"), or the name of a file
+                        with style settings. The default is pep8 unless a
+                        .style.yapf or setup.cfg or pyproject.toml file
+                        located in the same directory as the source or one of
+                        its parent directories (for stdin, the current
+                        directory is used).
+  --binary BINARY       location of binary to use for YAPF
+```
+
+
+## Knobs
+
+`ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENT`
+
+    Align closing bracket with visual indentation.
+
+`ALLOW_MULTILINE_LAMBDAS`
+
+    Allow lambdas to be formatted on more than one line.
+
+`ALLOW_MULTILINE_DICTIONARY_KEYS`
+
+    Allow dictionary keys to exist on multiple lines. For example:
+
+    ```python
+    x = {
+        ('this is the first element of a tuple',
+         'this is the second element of a tuple'):
+             value,
+    }
+    ```
+
+`ALLOW_SPLIT_BEFORE_DEFAULT_OR_NAMED_ASSIGNS`
+
+    Allow splitting before a default / named assignment in an argument list.
+
+`ALLOW_SPLIT_BEFORE_DICT_VALUE`
+
+    Allow splits before the dictionary value.
+
+`ARITHMETIC_PRECEDENCE_INDICATION`
+
+    Let spacing indicate operator precedence. For example:
+
+    ```python
+    a = 1 * 2 + 3 / 4
+    b = 1 / 2 - 3 * 4
+    c = (1 + 2) * (3 - 4)
+    d = (1 - 2) / (3 + 4)
+    e = 1 * 2 - 3
+    f = 1 + 2 + 3 + 4
+    ```
+
+    will be formatted as follows to indicate precedence:
+
+    ```python
+    a = 1*2 + 3/4
+    b = 1/2 - 3*4
+    c = (1+2) * (3-4)
+    d = (1-2) / (3+4)
+    e = 1*2 - 3
+    f = 1 + 2 + 3 + 4
+    ```
+
+`BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF`
+
+    Insert a blank line before a `def` or `class` immediately nested within
+    another `def` or `class`. For example:
+
+    ```python
+    class Foo:
+                       # <------ this blank line
+        def method():
+            pass
+    ```
+
+`BLANK_LINE_BEFORE_MODULE_DOCSTRING`
+
+    Insert a blank line before a module docstring.
+
+`BLANK_LINE_BEFORE_CLASS_DOCSTRING`
+
+    Insert a blank line before a class-level docstring.
+
+`BLANK_LINES_AROUND_TOP_LEVEL_DEFINITION`
+
+    Sets the number of desired blank lines surrounding top-level function and
+    class definitions. For example:
+
+    ```python
+    class Foo:
+        pass
+                       # <------ having two blank lines here
+                       # <------ is the default setting
+    class Bar:
+        pass
+    ```
+
+`BLANK_LINES_BETWEEN_TOP_LEVEL_IMPORTS_AND_VARIABLES`
+
+    Sets the number of desired blank lines between top-level imports and
+    variable definitions. Useful for compatibility with tools like isort.
+
+`COALESCE_BRACKETS`
+
+    Do not split consecutive brackets. Only relevant when
+    `DEDENT_CLOSING_BRACKETS` or `INDENT_CLOSING_BRACKETS` is set. For example:
+
+    ```python
+    call_func_that_takes_a_dict(
+        {
+            'key1': 'value1',
+            'key2': 'value2',
+        }
+    )
+    ```
+
+    would reformat to:
+
+    ```python
+    call_func_that_takes_a_dict({
+        'key1': 'value1',
+        'key2': 'value2',
+    })
+    ```
+
+
+`COLUMN_LIMIT`
+
+    The column limit (or max line-length)
+
+`CONTINUATION_ALIGN_STYLE`
+
+    The style for continuation alignment. Possible values are:
+
+    - `SPACE`: Use spaces for continuation alignment. This is default
+      behavior.
+    - `FIXED`: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns
+      (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs or
+      CONTINUATION_INDENT_WIDTH spaces) for continuation alignment.
+    - `VALIGN-RIGHT`: Vertically align continuation lines to multiple of
+      INDENT_WIDTH columns. Slightly right (one tab or a few spaces) if cannot
+      vertically align continuation lines with indent characters.
+
+`CONTINUATION_INDENT_WIDTH`
+
+    Indent width used for line continuations.
+
+`DEDENT_CLOSING_BRACKETS`
+
+    Put closing brackets on a separate line, dedented, if the bracketed
+    expression can't fit in a single line. Applies to all kinds of brackets,
+    including function definitions and calls. For example:
+
+    ```python
+    config = {
+        'key1': 'value1',
+        'key2': 'value2',
+    }  # <--- this bracket is dedented and on a separate line
+
+    time_series = self.remote_client.query_entity_counters(
+        entity='dev3246.region1',
+        key='dns.query_latency_tcp',
+        transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
+        start_ts=now()-timedelta(days=3),
+        end_ts=now(),
+    )  # <--- this bracket is dedented and on a separate line
+    ```
+
+`DISABLE_ENDING_COMMA_HEURISTIC`
+
+    Disable the heuristic which places each list element on a separate line if
+    the list is comma-terminated.
+
+`EACH_DICT_ENTRY_ON_SEPARATE_LINE`
+
+    Place each dictionary entry onto its own line.
+
+`FORCE_MULTILINE_DICT`
+
+    Respect `EACH_DICT_ENTRY_ON_SEPARATE_LINE` even if the line is shorter than
+    `COLUMN_LIMIT`.
+
+`I18N_COMMENT`
+
+    The regex for an internationalization comment. The presence of this comment
+    stops reformatting of that line, because the comments are required to be
+    next to the string they translate.
+
+`I18N_FUNCTION_CALL`
+
+    The internationalization function call names. The presence of this function
+    stops reformatting on that line, because the string it has cannot be moved
+    away from the i18n comment.
+
+`INDENT_DICTIONARY_VALUE`
+
+    Indent the dictionary value if it cannot fit on the same line as the
+    dictionary key. For example:
+
+    ```python
+    config = {
+        'key1':
+            'value1',
+        'key2': value1 +
+                value2,
+    }
+    ```
+
+`INDENT_WIDTH`
+
+    The number of columns to use for indentation.
+
+`INDENT_BLANK_LINES`
+
+    Set to `True` to prefer indented blank lines rather than empty
+
+`INDENT_CLOSING_BRACKETS`
+
+    Put closing brackets on a separate line, indented, if the bracketed
+    expression can't fit in a single line. Applies to all kinds of brackets,
+    including function definitions and calls. For example:
+
+    ```python
+    config = {
+        'key1': 'value1',
+        'key2': 'value2',
+        }  # <--- this bracket is indented and on a separate line
+
+    time_series = self.remote_client.query_entity_counters(
+        entity='dev3246.region1',
+        key='dns.query_latency_tcp',
+        transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
+        start_ts=now()-timedelta(days=3),
+        end_ts=now(),
+        )  # <--- this bracket is indented and on a separate line
+    ```
+
+`JOIN_MULTIPLE_LINES`
+
+    Join short lines into one line. E.g., single line `if` statements.
+
+`NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS`
+
+    Do not include spaces around selected binary operators. For example:
+
+    ```python
+    1 + 2 * 3 - 4 / 5
+    ```
+
+    will be formatted as follows when configured with `*`, `/`:
+
+    ```python
+    1 + 2*3 - 4/5
+    ```
+
+`SPACES_AROUND_POWER_OPERATOR`
+
+    Set to `True` to prefer using spaces around `**`.
+
+`SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN`
+
+    Set to `True` to prefer spaces around the assignment operator for default
+    or keyword arguments.
+
+`SPACES_AROUND_DICT_DELIMITERS`
+
+    Adds a space after the opening '{' and before the ending '}' dict delimiters.
+
+    ```python
+    {1: 2}
+    ```
+
+    will be formatted as:
+
+    ```python
+    { 1: 2 }
+    ```
+
+`SPACES_AROUND_LIST_DELIMITERS`
+
+    Adds a space after the opening '[' and before the ending ']' list delimiters.
+
+    ```python
+    [1, 2]
+    ```
+
+    will be formatted as:
+
+    ```python
+    [ 1, 2 ]
+    ```
+
+`SPACES_AROUND_SUBSCRIPT_COLON`
+
+    Use spaces around the subscript / slice operator.  For example:
+
+    ```python
+    my_list[1 : 10 : 2]
+    ```
+
+`SPACES_AROUND_TUPLE_DELIMITERS`
+
+    Adds a space after the opening '(' and before the ending ')' tuple delimiters.
+
+    ```python
+    (1, 2, 3)
+    ```
+
+    will be formatted as:
+
+    ```python
+    ( 1, 2, 3 )
+    ```
+
+`SPACES_BEFORE_COMMENT`
+
+    The number of spaces required before a trailing comment.
+    This can be a single value (representing the number of spaces
+    before each trailing comment) or list of values (representing
+    alignment column values; trailing comments within a block will
+    be aligned to the first column value that is greater than the maximum
+    line length within the block).
+
+    > **Note:** Lists of values may need to be quoted in some contexts
+    > (eg. shells or editor config files).
+
+    For example, with `spaces_before_comment=5`:
+
+    ```python
+    1 + 1 # Adding values
+    ```
+
+    will be formatted as:
+
+    ```python
+    1 + 1     # Adding values <-- 5 spaces between the end of the statement and comment
+    ```
+
+    with `spaces_before_comment="15, 20"`:
+
+    ```python
+    1 + 1 # Adding values
+    two + two # More adding
+
+    longer_statement # This is a longer statement
+    short # This is a shorter statement
+
+    a_very_long_statement_that_extends_beyond_the_final_column # Comment
+    short # This is a shorter statement
+    ```
+
+    will be formatted as:
+
+    ```python
+    1 + 1          # Adding values <-- end of line comments in block aligned to col 15
+    two + two      # More adding
+
+    longer_statement    # This is a longer statement <-- end of line comments in block aligned to col 20
+    short               # This is a shorter statement
+
+    a_very_long_statement_that_extends_beyond_the_final_column  # Comment <-- the end of line comments are aligned based on the line length
+    short                                                       # This is a shorter statement
+    ```
+
+`SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKET`
+
+    Insert a space between the ending comma and closing bracket of a list, etc.
+
+`SPACE_INSIDE_BRACKETS`
+
+    Use spaces inside brackets, braces, and parentheses.  For example:
+
+    ```
+    method_call( 1 )
+    my_dict[ 3 ][ 1 ][ get_index( *args, **kwargs ) ]
+    my_set = { 1, 2, 3 }
+    ```
+
+`SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED`
+
+    Split before arguments if the argument list is terminated by a comma.
+
+`SPLIT_ALL_COMMA_SEPARATED_VALUES`
+
+    If a comma separated list (`dict`, `list`, `tuple`, or function `def`) is
+    on a line that is too long, split such that each element is on a separate
+    line.
+
+`SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUES`
+
+    Variation on `SPLIT_ALL_COMMA_SEPARATED_VALUES` in which, if a
+    subexpression with a comma fits in its starting line, then the
+    subexpression is not split. This avoids splits like the one for
+    `b` in this code:
+
+    ```python
+    abcdef(
+        aReallyLongThing: int,
+        b: [Int,
+            Int])
+    ```
+
+    with the new knob this is split as:
+
+    ```python
+    abcdef(
+        aReallyLongThing: int,
+        b: [Int, Int])
+    ```
+
+`SPLIT_BEFORE_BITWISE_OPERATOR`
+
+    Set to `True` to prefer splitting before `&`, `|` or `^` rather than after.
+
+`SPLIT_BEFORE_ARITHMETIC_OPERATOR`
+
+    Set to `True` to prefer splitting before `+`, `-`, `*`, `/`, `//`, or `@`
+    rather than after.
+
+`SPLIT_BEFORE_CLOSING_BRACKET`
+
+    Split before the closing bracket if a `list` or `dict` literal doesn't fit
+    on a single line.
+
+`SPLIT_BEFORE_DICT_SET_GENERATOR`
+
+    Split before a dictionary or set generator (`comp_for`). For example, note
+    the split before the `for`:
+
+    ```python
+    foo = {
+        variable: 'Hello world, have a nice day!'
+        for variable in bar if variable != 42
+    }
+    ```
+
+`SPLIT_BEFORE_DOT`
+
+    Split before the `.` if we need to split a longer expression:
+
+    ```python
+    foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d))
+    ```
+
+    would reformat to something like:
+
+    ```python
+    foo = ('This is a really long string: {}, {}, {}, {}'
+           .format(a, b, c, d))
+    ```
+
+`SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN`
+
+    Split after the opening paren which surrounds an expression if it doesn't
+    fit on a single line.
+
+`SPLIT_BEFORE_FIRST_ARGUMENT`
+
+    If an argument / parameter list is going to be split, then split before the
+    first argument.
+
+`SPLIT_BEFORE_LOGICAL_OPERATOR`
+
+    Set to `True` to prefer splitting before `and` or `or` rather than after.
+
+`SPLIT_BEFORE_NAMED_ASSIGNS`
+
+    Split named assignments onto individual lines.
+
+`SPLIT_COMPLEX_COMPREHENSION`
+
+    For list comprehensions and generator expressions with multiple clauses
+    (e.g multiple `for` calls, `if` filter expressions) and which need to be
+    reflowed, split each clause onto its own line. For example:
+
+    ```python
+    result = [
+        a_var + b_var for a_var in xrange(1000) for b_var in xrange(1000)
+        if a_var % b_var]
+    ```
+
+    would reformat to something like:
+
+    ```python
+    result = [
+        a_var + b_var
+        for a_var in xrange(1000)
+        for b_var in xrange(1000)
+        if a_var % b_var]
+    ```
+
+`SPLIT_PENALTY_AFTER_OPENING_BRACKET`
+
+    The penalty for splitting right after the opening bracket.
+
+`SPLIT_PENALTY_AFTER_UNARY_OPERATOR`
+
+    The penalty for splitting the line after a unary operator.
+
+`SPLIT_PENALTY_ARITHMETIC_OPERATOR`
+
+    The penalty of splitting the line around the `+`, `-`, `*`, `/`, `//`, `%`,
+    and `@` operators.
+
+`SPLIT_PENALTY_BEFORE_IF_EXPR`
+
+    The penalty for splitting right before an `if` expression.
+
+`SPLIT_PENALTY_BITWISE_OPERATOR`
+
+    The penalty of splitting the line around the `&`, `|`, and `^` operators.
+
+`SPLIT_PENALTY_COMPREHENSION`
+
+    The penalty for splitting a list comprehension or generator expression.
+
+`SPLIT_PENALTY_EXCESS_CHARACTER`
+
+    The penalty for characters over the column limit.
+
+`SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT`
+
+    The penalty incurred by adding a line split to the logical line. The more
+    line splits added the higher the penalty.
+
+`SPLIT_PENALTY_IMPORT_NAMES`
+
+    The penalty of splitting a list of `import as` names. For example:
+
+    ```python
+    from a_very_long_or_indented_module_name_yada_yad import (long_argument_1,
+                                                              long_argument_2,
+                                                              long_argument_3)
+    ```
+
+    would reformat to something like:
+
+    ```python
+    from a_very_long_or_indented_module_name_yada_yad import (
+        long_argument_1, long_argument_2, long_argument_3)
+    ```
+
+`SPLIT_PENALTY_LOGICAL_OPERATOR`
+
+    The penalty of splitting the line around the `and` and `or` operators.
+
+`USE_TABS`
+
+    Use the Tab character for indentation.
+
+
+## (Potentially) Frequently Asked Questions
+
+### Why does YAPF destroy my awesome formatting?
+
+YAPF tries very hard to get the formatting correct. But for some code, it won't
+be as good as hand-formatting. In particular, large data literals may become
+horribly disfigured under YAPF.
+
+The reasons for this are manyfold. In short, YAPF is simply a tool to help
+with development. It will format things to coincide with the style guide, but
+that may not equate with readability.
+
+What can be done to alleviate this situation is to indicate regions YAPF should
+ignore when reformatting something:
+
+```python
+# yapf: disable
+FOO = {
+    # ... some very large, complex data literal.
+}
+
+BAR = [
+    # ... another large data literal.
+]
+# yapf: enable
+```
+
+You can also disable formatting for a single literal like this:
+
+```python
+BAZ = {
+    (1, 2, 3, 4),
+    (5, 6, 7, 8),
+    (9, 10, 11, 12),
+}  # yapf: disable
+```
+
+To preserve the nice dedented closing brackets, use the
+`dedent_closing_brackets` in your style. Note that in this case all
+brackets, including function definitions and calls, are going to use
+that style.  This provides consistency across the formatted codebase.
+
+### Why Not Improve Existing Tools?
+
+We wanted to use clang-format's reformatting algorithm. It's very powerful and
+designed to come up with the best formatting possible. Existing tools were
+created with different goals in mind, and would require extensive modifications
+to convert to using clang-format's algorithm.
+
+### Can I Use YAPF In My Program?
+
+Please do! YAPF was designed to be used as a library as well as a command line
+tool. This means that a tool or IDE plugin is free to use YAPF.
+
+### I still get non Pep8 compliant code! Why?
+
+YAPF tries very hard to be fully PEP 8 compliant. However, it is paramount
+to not risk altering the semantics of your code. Thus, YAPF tries to be as
+safe as possible and does not change the token stream
+(e.g., by adding parentheses).
+All these cases however, can be easily fixed manually. For instance,
+
+```python
+from my_package import my_function_1, my_function_2, my_function_3, my_function_4, my_function_5
+
+FOO = my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 + my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8
+
+won't be split, but you can easily get it right by just adding parentheses:
+
+```python
+from my_package import (my_function_1, my_function_2, my_function_3,
+                        my_function_4, my_function_5)
+
+FOO = (my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 +
+       my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8)
+```
+
+
+## Gory Details
+
+### Algorithm Design
+
+The main data structure in YAPF is the `LogicalLine` object. It holds a list
+of `FormatToken`\s, that we would want to place on a single line if there
+were no column limit. An exception being a comment in the middle of an
+expression statement will force the line to be formatted on more than one line.
+The formatter works on one `LogicalLine` object at a time.
+
+An `LogicalLine` typically won't affect the formatting of lines before or
+after it. There is a part of the algorithm that may join two or more
+`LogicalLine`\s into one line. For instance, an if-then statement with a
+short body can be placed on a single line:
+
+```python
+if a == 42: continue
+```
+
+YAPF's formatting algorithm creates a weighted tree that acts as the solution
+space for the algorithm. Each node in the tree represents the result of a
+formatting decision --- i.e., whether to split or not to split before a token.
+Each formatting decision has a cost associated with it. Therefore, the cost is
+realized on the edge between two nodes. (In reality, the weighted tree doesn't
+have separate edge objects, so the cost resides on the nodes themselves.)
+
+For example, take the following Python code snippet. For the sake of this
+example, assume that line (1) violates the column limit restriction and needs to
+be reformatted.
+
+```python
+def xxxxxxxxxxx(aaaaaaaaaaaa, bbbbbbbbb, cccccccc, dddddddd, eeeeee):  # 1
+    pass                                                               # 2
+```
+
+For line (1), the algorithm will build a tree where each node (a
+`FormattingDecisionState` object) is the state of the line at that token given
+the decision to split before the token or not. Note: the `FormatDecisionState`
+objects are copied by value so each node in the graph is unique and a change in
+one doesn't affect other nodes.
+
+Heuristics are used to determine the costs of splitting or not splitting.
+Because a node holds the state of the tree up to a token's insertion, it can
+easily determine if a splitting decision will violate one of the style
+requirements. For instance, the heuristic is able to apply an extra penalty to
+the edge when not splitting between the previous token and the one being added.
+
+There are some instances where we will never want to split the line, because
+doing so will always be detrimental (i.e., it will require a backslash-newline,
+which is very rarely desirable). For line (1), we will never want to split the
+first three tokens: `def`, `xxxxxxxxxxx`, and `(`. Nor will we want to
+split between the `)` and the `:` at the end. These regions are said to be
+"unbreakable." This is reflected in the tree by there not being a "split"
+decision (left hand branch) within the unbreakable region.
+
+Now that we have the tree, we determine what the "best" formatting is by finding
+the path through the tree with the lowest cost.
+
+And that's it!
diff --git a/README.rst b/README.rst
deleted file mode 100644
index 8d4e530..0000000
--- a/README.rst
+++ /dev/null
@@ -1,1023 +0,0 @@
-====
-YAPF
-====
-
-.. image:: https://badge.fury.io/py/yapf.svg
-    :target: https://badge.fury.io/py/yapf
-    :alt: PyPI version
-
-.. image:: https://github.com/google/yapf/actions/workflows/ci.yml/badge.svg
-    :target: https://github.com/google/yapf/actions/workflows/ci.yml
-    :alt: Build status
-
-.. image:: https://github.com/google/yapf/actions/workflows/pre-commit.yml/badge.svg
-    :target: https://github.com/google/yapf/actions/workflows/pre-commit.yml
-    :alt: Run pre-commit
-
-.. image:: https://coveralls.io/repos/google/yapf/badge.svg?branch=main
-    :target: https://coveralls.io/r/google/yapf?branch=main
-    :alt: Coverage status
-
-
-Introduction
-============
-
-Most of the current formatters for Python --- e.g., autopep8, and pep8ify ---
-are made to remove lint errors from code. This has some obvious limitations.
-For instance, code that conforms to the PEP 8 guidelines may not be
-reformatted.  But it doesn't mean that the code looks good.
-
-YAPF takes a different approach. It's based off of `'clang-format' <https://cl
-ang.llvm.org/docs/ClangFormat.html>`_, developed by Daniel Jasper. In essence,
-the algorithm takes the code and reformats it to the best formatting that
-conforms to the style guide, even if the original code didn't violate the
-style guide. The idea is also similar to the `'gofmt' <https://golang.org/cmd/
-gofmt/>`_ tool for the Go programming language: end all holy wars about
-formatting - if the whole codebase of a project is simply piped through YAPF
-whenever modifications are made, the style remains consistent throughout the
-project and there's no point arguing about style in every code review.
-
-The ultimate goal is that the code YAPF produces is as good as the code that a
-programmer would write if they were following the style guide. It takes away
-some of the drudgery of maintaining your code.
-
-.. footer::
-
-    YAPF is not an official Google product (experimental or otherwise), it is
-    just code that happens to be owned by Google.
-
-.. contents::
-
-
-Installation
-============
-
-To install YAPF from PyPI:
-
-.. code-block:: shell
-
-    $ pip install yapf
-
-YAPF is still considered in "alpha" stage, and the released version may change
-often; therefore, the best way to keep up-to-date with the latest development
-is to clone this repository.
-
-Note that if you intend to use YAPF as a command-line tool rather than as a
-library, installation is not necessary. YAPF supports being run as a directory
-by the Python interpreter. If you cloned/unzipped YAPF into ``DIR``, it's
-possible to run:
-
-.. code-block:: shell
-
-    $ PYTHONPATH=DIR python DIR/yapf [options] ...
-
-
-Python versions
-===============
-
-YAPF supports Python 3.7+.
-
-YAPF requires the code it formats to be valid Python for the version YAPF itself
-runs under. So if formatting 3.7 Python run YAPF under 3.7
-
-
-Usage
-=====
-
-Options::
-
-    usage: yapf [-h] [-v] [-d | -i | -q] [-r | -l START-END] [-e PATTERN]
-                [--style STYLE] [--style-help] [--no-local-style] [-p]
-                [-vv]
-                [files ...]
-
-    Formatter for Python code.
-
-    positional arguments:
-      files                 reads from stdin when no files are specified.
-
-    optional arguments:
-      -h, --help            show this help message and exit
-      -v, --version         show program's version number and exit
-      -d, --diff            print the diff for the fixed source
-      -i, --in-place        make changes to files in place
-      -q, --quiet           output nothing and set return value
-      -r, --recursive       run recursively over directories
-      -l START-END, --lines START-END
-                            range of lines to reformat, one-based
-      -e PATTERN, --exclude PATTERN
-                            patterns for files to exclude from formatting
-      --style STYLE         specify formatting style: either a style name (for
-                            example "pep8" or "google"), or the name of a file
-                            with style settings.  The default is pep8 unless a
-                            .style.yapf or setup.cfg or pyproject.toml file
-                            located in the same directory as the source or one
-                            of its parent directories (for stdin, the current
-                            directory is used).
-      --style-help          show style settings and exit; this output can be
-                            saved to .style.yapf to make your settings
-                            permanent
-      --no-local-style      don't search for local style definition
-      -p, --parallel        run YAPF in parallel when formatting multiple
-                            files.
-      -m, --print-modified  print out file names of modified files
-      -vv, --verbose        print out file names while processing
-
-
-------------
-Return Codes
-------------
-
-Normally YAPF returns zero on successful program termination and non-zero otherwise.
-
-If ``--diff`` is supplied, YAPF returns zero when no changes were necessary, non-zero
-otherwise (including program error). You can use this in a CI workflow to test that code
-has been YAPF-formatted.
-
----------------------------------------------------------------
-Excluding files from formatting (.yapfignore or pyproject.toml)
----------------------------------------------------------------
-
-In addition to exclude patterns provided on commandline, YAPF looks for additional
-patterns specified in a file named ``.yapfignore`` or ``pyproject.toml`` located in the
-working directory from which YAPF is invoked.
-
-``.yapfignore``'s syntax is similar to UNIX's filename pattern matching::
-
-    *       matches everything
-    ?       matches any single character
-    [seq]   matches any character in seq
-    [!seq]  matches any character not in seq
-
-Note that no entry should begin with `./`.
-
-If you use ``pyproject.toml``, exclude patterns are specified by ``ignore_patterns`` key
-in ``[tool.yapfignore]`` section. For example:
-
-.. code-block:: ini
-
-   [tool.yapfignore]
-   ignore_patterns = [
-     "temp/**/*.py",
-     "temp2/*.py"
-   ]
-
-Formatting style
-================
-
-The formatting style used by YAPF is configurable and there are many "knobs"
-that can be used to tune how YAPF does formatting. See the ``style.py`` module
-for the full list.
-
-To control the style, run YAPF with the ``--style`` argument. It accepts one of
-the predefined styles (e.g., ``pep8`` or ``google``), a path to a configuration
-file that specifies the desired style, or a dictionary of key/value pairs.
-
-The config file is a simple listing of (case-insensitive) ``key = value`` pairs
-with a ``[style]`` heading. For example:
-
-.. code-block:: ini
-
-    [style]
-    based_on_style = pep8
-    spaces_before_comment = 4
-    split_before_logical_operator = true
-
-The ``based_on_style`` setting determines which of the predefined styles this
-custom style is based on (think of it like subclassing). Four
-styles are predefined:
-
-- ``pep8`` (default)
-- ``google`` (based off of the `Google Python Style Guide`_)
-- ``yapf`` (for use with Google open source projects)
-- ``facebook``
-
-.. _`Google Python Style Guide`: https://github.com/google/styleguide/blob/gh-pages/pyguide.md
-
-See ``_STYLE_NAME_TO_FACTORY`` in style.py_ for details.
-
-.. _style.py: https://github.com/google/yapf/blob/main/yapf/yapflib/style.py
-
-It's also possible to do the same on the command line with a dictionary. For
-example:
-
-.. code-block:: shell
-
-    --style='{based_on_style: pep8, indent_width: 2}'
-
-This will take the ``pep8`` base style and modify it to have two space
-indentations.
-
-YAPF will search for the formatting style in the following manner:
-
-1. Specified on the command line
-2. In the ``[style]`` section of a ``.style.yapf`` file in either the current
-   directory or one of its parent directories.
-3. In the ``[yapf]`` section of a ``setup.cfg`` file in either the current
-   directory or one of its parent directories.
-4. In the ``[tool.yapf]`` section of a ``pyproject.toml`` file in either the current
-   directory or one of its parent directories.
-5. In the ``[style]`` section of a ``~/.config/yapf/style`` file in your home
-   directory.
-
-If none of those files are found, the default style is used (PEP8).
-
-
-Example
-=======
-
-An example of the type of formatting that YAPF can do, it will take this ugly
-code:
-
-.. code-block:: python
-
-    x = {  'a':37,'b':42,
-
-    'c':927}
-
-    y = 'hello ''world'
-    z = 'hello '+'world'
-    a = 'hello {}'.format('world')
-    class foo  (     object  ):
-      def f    (self   ):
-        return       37*-+2
-      def g(self, x,y=42):
-          return y
-    def f  (   a ) :
-      return      37+-+a[42-x :  y**3]
-
-and reformat it into:
-
-.. code-block:: python
-
-    x = {'a': 37, 'b': 42, 'c': 927}
-
-    y = 'hello ' 'world'
-    z = 'hello ' + 'world'
-    a = 'hello {}'.format('world')
-
-
-    class foo(object):
-        def f(self):
-            return 37 * -+2
-
-        def g(self, x, y=42):
-            return y
-
-
-    def f(a):
-        return 37 + -+a[42 - x:y**3]
-
-
-Example as a module
-===================
-
-The two main APIs for calling YAPF are ``FormatCode`` and ``FormatFile``, these
-share several arguments which are described below:
-
-.. code-block:: python
-
-    >>> from yapf.yapflib.yapf_api import FormatCode  # reformat a string of code
-
-    >>> formatted_code, changed = FormatCode("f ( a = 1, b = 2 )")
-    >>> formatted_code
-    'f(a=1, b=2)\n'
-    >>> changed
-    True
-
-A ``style_config`` argument: Either a style name or a path to a file that contains
-formatting style settings. If None is specified, use the default style
-as set in ``style.DEFAULT_STYLE_FACTORY``.
-
-.. code-block:: python
-
-    >>> FormatCode("def g():\n  return True", style_config='pep8')[0]
-    'def g():\n    return True\n'
-
-A ``lines`` argument: A list of tuples of lines (ints), [start, end],
-that we want to format. The lines are 1-based indexed. It can be used by
-third-party code (e.g., IDEs) when reformatting a snippet of code rather
-than a whole file.
-
-.. code-block:: python
-
-    >>> FormatCode("def g( ):\n    a=1\n    b = 2\n    return a==b", lines=[(1, 1), (2, 3)])[0]
-    'def g():\n    a = 1\n    b = 2\n    return a==b\n'
-
-A ``print_diff`` (bool): Instead of returning the reformatted source, return a
-diff that turns the formatted source into reformatted source.
-
-.. code-block:: python
-
-    >>> print(FormatCode("a==b", filename="foo.py", print_diff=True)[0])
-    --- foo.py (original)
-    +++ foo.py (reformatted)
-    @@ -1 +1 @@
-    -a==b
-    +a == b
-
-Note: the ``filename`` argument for ``FormatCode`` is what is inserted into
-the diff, the default is ``<unknown>``.
-
-``FormatFile`` returns reformatted code from the passed file along with its encoding:
-
-.. code-block:: python
-
-    >>> from yapf.yapflib.yapf_api import FormatFile  # reformat a file
-
-    >>> print(open("foo.py").read())  # contents of file
-    a==b
-
-    >>> reformatted_code, encoding, changed = FormatFile("foo.py")
-    >>> formatted_code
-    'a == b\n'
-    >>> encoding
-    'utf-8'
-    >>> changed
-    True
-
-The ``in_place`` argument saves the reformatted code back to the file:
-
-.. code-block:: python
-
-    >>> FormatFile("foo.py", in_place=True)[:2]
-    (None, 'utf-8')
-
-    >>> print(open("foo.py").read())  # contents of file (now fixed)
-    a == b
-
-Formatting diffs
-================
-
-Options::
-
-    usage: yapf-diff [-h] [-i] [-p NUM] [--regex PATTERN] [--iregex PATTERN][-v]
-                     [--style STYLE] [--binary BINARY]
-
-    This script reads input from a unified diff and reformats all the changed
-    lines. This is useful to reformat all the lines touched by a specific patch.
-    Example usage for git/svn users:
-
-      git diff -U0 --no-color --relative HEAD^ | yapf-diff -i
-      svn diff --diff-cmd=diff -x-U0 | yapf-diff -p0 -i
-
-    It should be noted that the filename contained in the diff is used
-    unmodified to determine the source file to update. Users calling this script
-    directly should be careful to ensure that the path in the diff is correct
-    relative to the current working directory.
-
-    optional arguments:
-      -h, --help            show this help message and exit
-      -i, --in-place        apply edits to files instead of displaying a diff
-      -p NUM, --prefix NUM  strip the smallest prefix containing P slashes
-      --regex PATTERN       custom pattern selecting file paths to reformat
-                            (case sensitive, overrides -iregex)
-      --iregex PATTERN      custom pattern selecting file paths to reformat
-                            (case insensitive, overridden by -regex)
-      -v, --verbose         be more verbose, ineffective without -i
-      --style STYLE         specify formatting style: either a style name (for
-                            example "pep8" or "google"), or the name of a file
-                            with style settings. The default is pep8 unless a
-                            .style.yapf or setup.cfg or pyproject.toml file
-                            located in the same directory as the source or one of
-                            its parent directories (for stdin, the current
-                            directory is used).
-      --binary BINARY       location of binary to use for YAPF
-
-Knobs
-=====
-
-``ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENT``
-    Align closing bracket with visual indentation.
-
-``ALLOW_MULTILINE_LAMBDAS``
-    Allow lambdas to be formatted on more than one line.
-
-``ALLOW_MULTILINE_DICTIONARY_KEYS``
-    Allow dictionary keys to exist on multiple lines. For example:
-
-    .. code-block:: python
-
-        x = {
-            ('this is the first element of a tuple',
-             'this is the second element of a tuple'):
-                 value,
-        }
-
-``ALLOW_SPLIT_BEFORE_DEFAULT_OR_NAMED_ASSIGNS``
-    Allow splitting before a default / named assignment in an argument list.
-
-``ALLOW_SPLIT_BEFORE_DICT_VALUE``
-    Allow splits before the dictionary value.
-
-``ARITHMETIC_PRECEDENCE_INDICATION``
-    Let spacing indicate operator precedence. For example:
-
-    .. code-block:: python
-
-        a = 1 * 2 + 3 / 4
-        b = 1 / 2 - 3 * 4
-        c = (1 + 2) * (3 - 4)
-        d = (1 - 2) / (3 + 4)
-        e = 1 * 2 - 3
-        f = 1 + 2 + 3 + 4
-
-    will be formatted as follows to indicate precedence:
-
-    .. code-block:: python
-
-        a = 1*2 + 3/4
-        b = 1/2 - 3*4
-        c = (1+2) * (3-4)
-        d = (1-2) / (3+4)
-        e = 1*2 - 3
-        f = 1 + 2 + 3 + 4
-
-``BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF``
-    Insert a blank line before a ``def`` or ``class`` immediately nested within
-    another ``def`` or ``class``. For example:
-
-    .. code-block:: python
-
-        class Foo:
-                           # <------ this blank line
-            def method():
-                pass
-
-``BLANK_LINE_BEFORE_MODULE_DOCSTRING``
-    Insert a blank line before a module docstring.
-
-``BLANK_LINE_BEFORE_CLASS_DOCSTRING``
-    Insert a blank line before a class-level docstring.
-
-``BLANK_LINES_AROUND_TOP_LEVEL_DEFINITION``
-    Sets the number of desired blank lines surrounding top-level function and
-    class definitions. For example:
-
-    .. code-block:: python
-
-        class Foo:
-            pass
-                           # <------ having two blank lines here
-                           # <------ is the default setting
-        class Bar:
-            pass
-
-``BLANK_LINES_BETWEEN_TOP_LEVEL_IMPORTS_AND_VARIABLES``
-    Sets the number of desired blank lines between top-level imports and
-    variable definitions. Useful for compatibility with tools like isort.
-
-``COALESCE_BRACKETS``
-    Do not split consecutive brackets. Only relevant when
-    ``DEDENT_CLOSING_BRACKETS`` or ``INDENT_CLOSING_BRACKETS``
-    is set. For example:
-
-    .. code-block:: python
-
-        call_func_that_takes_a_dict(
-            {
-                'key1': 'value1',
-                'key2': 'value2',
-            }
-        )
-
-    would reformat to:
-
-    .. code-block:: python
-
-        call_func_that_takes_a_dict({
-            'key1': 'value1',
-            'key2': 'value2',
-        })
-
-
-``COLUMN_LIMIT``
-    The column limit (or max line-length)
-
-``CONTINUATION_ALIGN_STYLE``
-    The style for continuation alignment. Possible values are:
-
-    - ``SPACE``: Use spaces for continuation alignment. This is default
-      behavior.
-    - ``FIXED``: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns
-      (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs or CONTINUATION_INDENT_WIDTH
-      spaces) for continuation alignment.
-    - ``VALIGN-RIGHT``: Vertically align continuation lines to multiple of
-      INDENT_WIDTH columns. Slightly right (one tab or a few spaces) if cannot
-      vertically align continuation lines with indent characters.
-
-``CONTINUATION_INDENT_WIDTH``
-    Indent width used for line continuations.
-
-``DEDENT_CLOSING_BRACKETS``
-    Put closing brackets on a separate line, dedented, if the bracketed
-    expression can't fit in a single line. Applies to all kinds of brackets,
-    including function definitions and calls. For example:
-
-    .. code-block:: python
-
-        config = {
-            'key1': 'value1',
-            'key2': 'value2',
-        }  # <--- this bracket is dedented and on a separate line
-
-        time_series = self.remote_client.query_entity_counters(
-            entity='dev3246.region1',
-            key='dns.query_latency_tcp',
-            transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
-            start_ts=now()-timedelta(days=3),
-            end_ts=now(),
-        )  # <--- this bracket is dedented and on a separate line
-
-``DISABLE_ENDING_COMMA_HEURISTIC``
-    Disable the heuristic which places each list element on a separate line if
-    the list is comma-terminated.
-
-``EACH_DICT_ENTRY_ON_SEPARATE_LINE``
-    Place each dictionary entry onto its own line.
-
-``FORCE_MULTILINE_DICT``
-    Respect EACH_DICT_ENTRY_ON_SEPARATE_LINE even if the line is shorter than
-    COLUMN_LIMIT.
-
-``I18N_COMMENT``
-    The regex for an internationalization comment. The presence of this comment
-    stops reformatting of that line, because the comments are required to be
-    next to the string they translate.
-
-``I18N_FUNCTION_CALL``
-    The internationalization function call names. The presence of this function
-    stops reformatting on that line, because the string it has cannot be moved
-    away from the i18n comment.
-
-``INDENT_DICTIONARY_VALUE``
-    Indent the dictionary value if it cannot fit on the same line as the
-    dictionary key. For example:
-
-    .. code-block:: python
-
-        config = {
-            'key1':
-                'value1',
-            'key2': value1 +
-                    value2,
-        }
-
-``INDENT_WIDTH``
-    The number of columns to use for indentation.
-
-``INDENT_BLANK_LINES``
-    Set to ``True`` to prefer indented blank lines rather than empty
-
-``INDENT_CLOSING_BRACKETS``
-    Put closing brackets on a separate line, indented, if the bracketed
-    expression can't fit in a single line. Applies to all kinds of brackets,
-    including function definitions and calls. For example:
-
-    .. code-block:: python
-
-        config = {
-            'key1': 'value1',
-            'key2': 'value2',
-            }  # <--- this bracket is indented and on a separate line
-
-        time_series = self.remote_client.query_entity_counters(
-            entity='dev3246.region1',
-            key='dns.query_latency_tcp',
-            transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
-            start_ts=now()-timedelta(days=3),
-            end_ts=now(),
-            )  # <--- this bracket is indented and on a separate line
-
-``JOIN_MULTIPLE_LINES``
-    Join short lines into one line. E.g., single line ``if`` statements.
-
-``NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS``
-    Do not include spaces around selected binary operators. For example:
-
-    .. code-block:: python
-
-        1 + 2 * 3 - 4 / 5
-
-    will be formatted as follows when configured with ``*``, ``/``:
-
-    .. code-block:: python
-
-        1 + 2*3 - 4/5
-
-``SPACES_AROUND_POWER_OPERATOR``
-    Set to ``True`` to prefer using spaces around ``**``.
-
-``SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN``
-    Set to ``True`` to prefer spaces around the assignment operator for default
-    or keyword arguments.
-
-``SPACES_AROUND_DICT_DELIMITERS``
-    Adds a space after the opening '{' and before the ending '}' dict delimiters.
-
-    .. code-block:: python
-
-        {1: 2}
-
-    will be formatted as:
-
-    .. code-block:: python
-
-        { 1: 2 }
-
-``SPACES_AROUND_LIST_DELIMITERS``
-    Adds a space after the opening '[' and before the ending ']' list delimiters.
-
-    .. code-block:: python
-
-        [1, 2]
-
-    will be formatted as:
-
-    .. code-block:: python
-
-        [ 1, 2 ]
-
-``SPACES_AROUND_SUBSCRIPT_COLON``
-    Use spaces around the subscript / slice operator.  For example:
-
-    .. code-block:: python
-
-        my_list[1 : 10 : 2]
-
-``SPACES_AROUND_TUPLE_DELIMITERS``
-    Adds a space after the opening '(' and before the ending ')' tuple delimiters.
-
-    .. code-block:: python
-
-        (1, 2, 3)
-
-    will be formatted as:
-
-    .. code-block:: python
-
-        ( 1, 2, 3 )
-
-``SPACES_BEFORE_COMMENT``
-    The number of spaces required before a trailing comment.
-    This can be a single value (representing the number of spaces
-    before each trailing comment) or list of values (representing
-    alignment column values; trailing comments within a block will
-    be aligned to the first column value that is greater than the maximum
-    line length within the block).
-
-    **Note:** Lists of values may need to be quoted in some contexts
-    (eg. shells or editor config files).
-
-    For example:
-
-    With ``spaces_before_comment=5``:
-
-    .. code-block:: python
-
-        1 + 1 # Adding values
-
-    will be formatted as:
-
-    .. code-block:: python
-
-        1 + 1     # Adding values <-- 5 spaces between the end of the statement and comment
-
-    With ``spaces_before_comment="15, 20"``:
-
-    .. code-block:: python
-
-        1 + 1 # Adding values
-        two + two # More adding
-
-        longer_statement # This is a longer statement
-        short # This is a shorter statement
-
-        a_very_long_statement_that_extends_beyond_the_final_column # Comment
-        short # This is a shorter statement
-
-    will be formatted as:
-
-    .. code-block:: python
-
-        1 + 1          # Adding values <-- end of line comments in block aligned to col 15
-        two + two      # More adding
-
-        longer_statement    # This is a longer statement <-- end of line comments in block aligned to col 20
-        short               # This is a shorter statement
-
-        a_very_long_statement_that_extends_beyond_the_final_column  # Comment <-- the end of line comments are aligned based on the line length
-        short                                                       # This is a shorter statement
-
-``SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKET``
-    Insert a space between the ending comma and closing bracket of a list, etc.
-
-``SPACE_INSIDE_BRACKETS``
-    Use spaces inside brackets, braces, and parentheses.  For example:
-
-    .. code-block:: python
-
-        method_call( 1 )
-        my_dict[ 3 ][ 1 ][ get_index( *args, **kwargs ) ]
-        my_set = { 1, 2, 3 }
-
-``SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED``
-    Split before arguments if the argument list is terminated by a comma.
-
-``SPLIT_ALL_COMMA_SEPARATED_VALUES``
-    If a comma separated list (``dict``, ``list``, ``tuple``, or function
-    ``def``) is on a line that is too long, split such that each element
-    is on a separate line.
-
-``SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUES``
-    Variation on ``SPLIT_ALL_COMMA_SEPARATED_VALUES`` in which, if a
-    subexpression with a comma fits in its starting line, then the
-    subexpression is not split. This avoids splits like the one for
-    ``b`` in this code:
-
-    .. code-block:: python
-
-      abcdef(
-          aReallyLongThing: int,
-          b: [Int,
-              Int])
-
-    With the new knob this is split as:
-
-    .. code-block:: python
-
-      abcdef(
-          aReallyLongThing: int,
-          b: [Int, Int])
-
-``SPLIT_BEFORE_BITWISE_OPERATOR``
-    Set to ``True`` to prefer splitting before ``&``, ``|`` or ``^`` rather
-    than after.
-
-``SPLIT_BEFORE_ARITHMETIC_OPERATOR``
-    Set to ``True`` to prefer splitting before ``+``, ``-``, ``*``, ``/``, ``//``,
-    or ``@`` rather than after.
-
-``SPLIT_BEFORE_CLOSING_BRACKET``
-    Split before the closing bracket if a ``list`` or ``dict`` literal doesn't
-    fit on a single line.
-
-``SPLIT_BEFORE_DICT_SET_GENERATOR``
-    Split before a dictionary or set generator (comp_for). For example, note
-    the split before the ``for``:
-
-    .. code-block:: python
-
-        foo = {
-            variable: 'Hello world, have a nice day!'
-            for variable in bar if variable != 42
-        }
-
-``SPLIT_BEFORE_DOT``
-    Split before the ``.`` if we need to split a longer expression:
-
-    .. code-block:: python
-
-      foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d))
-
-    would reformat to something like:
-
-    .. code-block:: python
-
-      foo = ('This is a really long string: {}, {}, {}, {}'
-             .format(a, b, c, d))
-
-``SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN``
-    Split after the opening paren which surrounds an expression if it doesn't
-    fit on a single line.
-
-``SPLIT_BEFORE_FIRST_ARGUMENT``
-    If an argument / parameter list is going to be split, then split before the
-    first argument.
-
-``SPLIT_BEFORE_LOGICAL_OPERATOR``
-    Set to ``True`` to prefer splitting before ``and`` or ``or`` rather than
-    after.
-
-``SPLIT_BEFORE_NAMED_ASSIGNS``
-    Split named assignments onto individual lines.
-
-``SPLIT_COMPLEX_COMPREHENSION``
-    For list comprehensions and generator expressions with multiple clauses
-    (e.g multiple ``for`` calls, ``if`` filter expressions) and which need to
-    be reflowed, split each clause onto its own line. For example:
-
-    .. code-block:: python
-
-      result = [
-          a_var + b_var for a_var in xrange(1000) for b_var in xrange(1000)
-          if a_var % b_var]
-
-    would reformat to something like:
-
-    .. code-block:: python
-
-      result = [
-          a_var + b_var
-          for a_var in xrange(1000)
-          for b_var in xrange(1000)
-          if a_var % b_var]
-
-``SPLIT_PENALTY_AFTER_OPENING_BRACKET``
-    The penalty for splitting right after the opening bracket.
-
-``SPLIT_PENALTY_AFTER_UNARY_OPERATOR``
-    The penalty for splitting the line after a unary operator.
-
-``SPLIT_PENALTY_ARITHMETIC_OPERATOR``
-    The penalty of splitting the line around the ``+``, ``-``, ``*``, ``/``,
-    ``//``, ``%``, and ``@`` operators.
-
-``SPLIT_PENALTY_BEFORE_IF_EXPR``
-    The penalty for splitting right before an ``if`` expression.
-
-``SPLIT_PENALTY_BITWISE_OPERATOR``
-    The penalty of splitting the line around the ``&``, ``|``, and ``^``
-    operators.
-
-``SPLIT_PENALTY_COMPREHENSION``
-    The penalty for splitting a list comprehension or generator expression.
-
-``SPLIT_PENALTY_EXCESS_CHARACTER``
-    The penalty for characters over the column limit.
-
-``SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT``
-    The penalty incurred by adding a line split to the logical line. The more
-    line splits added the higher the penalty.
-
-``SPLIT_PENALTY_IMPORT_NAMES``
-    The penalty of splitting a list of ``import as`` names. For example:
-
-    .. code-block:: python
-
-      from a_very_long_or_indented_module_name_yada_yad import (long_argument_1,
-                                                                long_argument_2,
-                                                                long_argument_3)
-
-    would reformat to something like:
-
-    .. code-block:: python
-
-      from a_very_long_or_indented_module_name_yada_yad import (
-          long_argument_1, long_argument_2, long_argument_3)
-
-``SPLIT_PENALTY_LOGICAL_OPERATOR``
-    The penalty of splitting the line around the ``and`` and ``or`` operators.
-
-``USE_TABS``
-    Use the Tab character for indentation.
-
-(Potentially) Frequently Asked Questions
-========================================
-
---------------------------------------------
-Why does YAPF destroy my awesome formatting?
---------------------------------------------
-
-YAPF tries very hard to get the formatting correct. But for some code, it won't
-be as good as hand-formatting. In particular, large data literals may become
-horribly disfigured under YAPF.
-
-The reasons for this are manyfold. In short, YAPF is simply a tool to help
-with development. It will format things to coincide with the style guide, but
-that may not equate with readability.
-
-What can be done to alleviate this situation is to indicate regions YAPF should
-ignore when reformatting something:
-
-.. code-block:: python
-
-    # yapf: disable
-    FOO = {
-        # ... some very large, complex data literal.
-    }
-
-    BAR = [
-        # ... another large data literal.
-    ]
-    # yapf: enable
-
-You can also disable formatting for a single literal like this:
-
-.. code-block:: python
-
-    BAZ = {
-        (1, 2, 3, 4),
-        (5, 6, 7, 8),
-        (9, 10, 11, 12),
-    }  # yapf: disable
-
-To preserve the nice dedented closing brackets, use the
-``dedent_closing_brackets`` in your style. Note that in this case all
-brackets, including function definitions and calls, are going to use
-that style.  This provides consistency across the formatted codebase.
-
--------------------------------
-Why Not Improve Existing Tools?
--------------------------------
-
-We wanted to use clang-format's reformatting algorithm. It's very powerful and
-designed to come up with the best formatting possible. Existing tools were
-created with different goals in mind, and would require extensive modifications
-to convert to using clang-format's algorithm.
-
------------------------------
-Can I Use YAPF In My Program?
------------------------------
-
-Please do! YAPF was designed to be used as a library as well as a command line
-tool. This means that a tool or IDE plugin is free to use YAPF.
-
------------------------------------------
-I still get non Pep8 compliant code! Why?
------------------------------------------
-
-YAPF tries very hard to be fully PEP 8 compliant. However, it is paramount
-to not risk altering the semantics of your code. Thus, YAPF tries to be as
-safe as possible and does not change the token stream
-(e.g., by adding parentheses).
-All these cases however, can be easily fixed manually. For instance,
-
-.. code-block:: python
-
-    from my_package import my_function_1, my_function_2, my_function_3, my_function_4, my_function_5
-
-    FOO = my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 + my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8
-
-won't be split, but you can easily get it right by just adding parentheses:
-
-.. code-block:: python
-
-    from my_package import (my_function_1, my_function_2, my_function_3,
-                            my_function_4, my_function_5)
-
-    FOO = (my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 +
-           my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8)
-
-Gory Details
-============
-
-----------------
-Algorithm Design
-----------------
-
-The main data structure in YAPF is the ``LogicalLine`` object. It holds a list
-of ``FormatToken``\s, that we would want to place on a single line if there
-were no column limit. An exception being a comment in the middle of an
-expression statement will force the line to be formatted on more than one line.
-The formatter works on one ``LogicalLine`` object at a time.
-
-An ``LogicalLine`` typically won't affect the formatting of lines before or
-after it. There is a part of the algorithm that may join two or more
-``LogicalLine``\s into one line. For instance, an if-then statement with a
-short body can be placed on a single line:
-
-.. code-block:: python
-
-    if a == 42: continue
-
-YAPF's formatting algorithm creates a weighted tree that acts as the solution
-space for the algorithm. Each node in the tree represents the result of a
-formatting decision --- i.e., whether to split or not to split before a token.
-Each formatting decision has a cost associated with it. Therefore, the cost is
-realized on the edge between two nodes. (In reality, the weighted tree doesn't
-have separate edge objects, so the cost resides on the nodes themselves.)
-
-For example, take the following Python code snippet. For the sake of this
-example, assume that line (1) violates the column limit restriction and needs to
-be reformatted.
-
-.. code-block:: python
-
-    def xxxxxxxxxxx(aaaaaaaaaaaa, bbbbbbbbb, cccccccc, dddddddd, eeeeee):  # 1
-        pass                                                               # 2
-
-For line (1), the algorithm will build a tree where each node (a
-``FormattingDecisionState`` object) is the state of the line at that token given
-the decision to split before the token or not. Note: the ``FormatDecisionState``
-objects are copied by value so each node in the graph is unique and a change in
-one doesn't affect other nodes.
-
-Heuristics are used to determine the costs of splitting or not splitting.
-Because a node holds the state of the tree up to a token's insertion, it can
-easily determine if a splitting decision will violate one of the style
-requirements. For instance, the heuristic is able to apply an extra penalty to
-the edge when not splitting between the previous token and the one being added.
-
-There are some instances where we will never want to split the line, because
-doing so will always be detrimental (i.e., it will require a backslash-newline,
-which is very rarely desirable). For line (1), we will never want to split the
-first three tokens: ``def``, ``xxxxxxxxxxx``, and ``(``. Nor will we want to
-split between the ``)`` and the ``:`` at the end. These regions are said to be
-"unbreakable." This is reflected in the tree by there not being a "split"
-decision (left hand branch) within the unbreakable region.
-
-Now that we have the tree, we determine what the "best" formatting is by finding
-the path through the tree with the lowest cost.
-
-And that's it!