Avg Release Cycle
456 days ago
v0.32.0 ChangesDecember 26, 2021
- 👀 Look at the 'pyproject.toml' file to see if it contains ignore file information for YAPF.
- 🆕 New entry point
yapf_api.FormatTreefor formatting lib2to3 concrete syntax trees.
- ➕ Add CI via GitHub Actions. ### 🔄 Changes
- 🔄 Change tests to support "pytest".
- Reformat so that "flake8" is happy.
- 👉 Use GitHub Actions instead of Travis for CI.
- Clean up the FormatToken interface to limit how much it relies upon the pytree node object.
- Rename "unwrapped_line" module to "logical_line."
- 📇 Rename "UnwrappedLine" class to "LogicalLine." ### 🛠 Fixed
- ➕ Added pyproject extra to install toml package as an optional dependency.
BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEFknob for "pep8" style, so method definitions inside a class are surrounded by a single blank line as prescribed by PEP8.
- 🛠 Fixed the '...' token to be spaced after a colon.
v0.31.0 ChangesMarch 14, 2021
- 📇 Renamed 'master' brannch to 'main'.
- Add 'BLANK_LINES_BETWEEN_TOP_LEVEL_IMPORTS_AND_VARIABLES' to support setting a custom number of blank lines between top-level imports and variable definitions.
- Ignore end of line
# copybara:directives when checking line length.
- 💅 Look at the 'pyproject.toml' file to see if it contains style information for YAPF. ### 🔄 Changed
- Do not scan excluded directories. Prior versions would scan an excluded folder then exclude its contents on a file by file basis. Preventing the folder being scanned is faster. ### 🛠 Fixed
- 🏁 Exclude directories on Windows.
v0.30.0 ChangesApril 23, 2020
SPACES_AROUND_TUPLE_DELIMITERSto add spaces after the opening- and before the closing-delimiters for lists, dicts, and tuples.
FORCE_MULTILINE_DICTknob to ensure dictionaries always split, even when shorter than the max line length.
- New knob
SPACE_INSIDE_BRACKETSto add spaces inside brackets, braces, and parentheses.
- New knob
SPACES_AROUND_SUBSCRIPT_COLONto add spaces around the subscript / slice operator. ### 🔄 Changed
- 💅 Renamed "chromium" style to "yapf". Chromium will now use PEP-8 directly.
VALIGN-RIGHTnow works with space indentation. ### 🛠 Fixed
- Honor a disable directive at the end of a multiline comment.
- Don't require splitting before comments in a list when
SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUESis set. The knob is meant for values, not comments, which may be associated with the current line.
- Don't over-indent a parameter list when not needed. But make sure it is properly indented so that it doesn't collide with the lines afterwards.
- Don't split between two-word comparison operators: "is not", "not in", etc.
v0.29.0 ChangesNovember 28, 2019
- ➕ Add the
--quietflag to suppress output. The return code is 1 if there are changes, similarly to the
- Add the
indent_closing_bracketsoption. This is the same as the
dedent_closing_bracketsoption except the brackets are indented the same as the previous line. ### 🔄 Changed
- Collect a parameter list into a single object. This allows us to track how a parameter list is formatted, keeping state along the way. This helps when supporting Python 3 type annotations.
- Catch and report
- 👌 Improved description of .yapfignore syntax. ### 🛠 Fixed
- 🆓 Format subscript lists so that splits are essentially free after a comma.
- Don't add a space between a string and its subscript.
- 💅 Extend discovery of '.style.yapf' & 'setup.cfg' files to search the root directory as well.
- 👉 Make sure we have parameters before we start calculating penalties for splitting them.
- Indicate if a class/function is nested to ensure blank lines when needed.
- 🛠 Fix extra indentation in async-for else statement.
- A parameter list with no elements shouldn't count as exceeding the column limit.
- When splitting all comma separated values, don't treat the ending bracket as special.
- The "no blank lines between nested classes or functions" knob should only apply to the first nested class or function, not all of them.
- ➕ Add the
v0.28.0 ChangesJuly 11, 2019
- New knob
SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUESis a variation on
SPLIT_ALL_COMMA_SEPARATED_VALUESin which, if a subexpression with a comma fits in its starting line, then the subexpression is not split (thus avoiding unnecessary splits). ### 🔄 Changed
INDENT_DICTIONARY_VALUEfor Google style.
JOIN_MULTIPLE_LINES = Falsefor Google style. ### 🛠 Fixed
BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF=Falsewasn't honored because the number of newlines was erroneously calculated beforehand.
- Lambda expressions shouldn't have an increased split penalty applied to the 'lambda' keyword. This prevents them from being properly formatted when they're arguments to functions.
- A comment with continuation markers (??) shouldn't mess with the lineno count.
- Only emit unformatted if the "disable long line" is at the end of the line. Otherwise we could mess up formatting for containers which have them interspersed with code.
- 🛠 Fix a potential race condition by using the correct style for opening a file which may not exist.
- New knob
v0.27.0 ChangesApril 07, 2019
SPLIT_BEFORE_ARITHMETIC_OPERATORsplits before an arithmetic operator when set.
SPLIT_PENALTY_ARITHMETIC_OPERATORallows you to set the split penalty around arithmetic operators. ### 🔄 Changed
- 👻 Catch lib2to3's "TokenError" exception and output a nicer message. ### 🛠 Fixed
- 📜 Parse integer lists correctly, removing quotes if the list is within a string.
- Adjust the penalties of bitwise operands for '&' and '', similar to '|'.
- Avoid splitting after opening parens if SPLIT_BEFORE_FIRST_ARGUMENT is set to False.
- Adjust default SPLIT_PENALTY_AFTER_OPENING_BRACKET.
- Re-enable removal of extra lines on the boundaries of formatted regions.
- Adjust list splitting to avoid splitting before a dictionary element, because those are likely to be split anyway. If we do split, it leads to horrible looking code.
- Dictionary arguments were broken in a recent version. It resulted in unreadable formatting, where the remaining arguments were indented far more than the dictionary. Fixed so that if the dictionary is the first argument in a function call and doesn't fit on a single line, then it forces a split.
- 👌 Improve the connectiveness between items in a list. This prevents random splitting when it's not 100% necessary.
- 🚚 Don't remove a comment attached to a previous object just because it's part of the "prefix" of a function/class node.
v0.26.0 ChangesFebruary 08, 2019
ALLOW_SPLIT_BEFORE_DEFAULT_OR_NAMED_ASSIGNSallows us to split before default / named assignments.
ARITHMETIC_PRECEDENCE_INDICATIONremoves spacing around binary operators if they have higher precedence than other operators in the same expression. ### 🔄 Changed
SPACES_BEFORE_COMMENTcan now be assigned to a specific value (standard behavior) or a list of column values. When assigned to a list, trailing comments will be horizontally aligned to the first column value within the list that is greater than the maximum line length in the block.
- 👕 Don't modify the vertical spacing of a line that has a comment "pylint: disable=line-too-long". The line is expected to be too long.
CONTINUATION_ALIGN_STYLEto accept quoted or underline-separated option value for passing option with command line arguments. ### 🛠 Fixed
- When retrieving the opening bracket make sure that it's actually an opening bracket.
- Don't completely deny a lambda formatting if it goes over the column limit. Split only if absolutely necessary.
- ⬆️ Bump up penalty for splitting before a dot ('.').
- Ignore pseudo tokens when calculating split penalties.
- Increase the penalty for splitting before the first bit of a subscript.
- 👌 Improve splitting before dictionary values. Look more closely to see if the dictionary entry is a container. If so, then it's probably split over multiple lines with the opening bracket on the same line as the key. Therefore, we shouldn't enforce a split because of that.
- Increase split penalty around exponent operator.
- Correct spacing when using binary operators on strings with the
v0.25.0 ChangesNovember 25, 2018
INDENT_BLANK_LINESknob to select whether the blank lines are empty or indented consistently with the current block.
- 👌 Support additional file exclude patterns in .yapfignore file. ### 🛠 Fixed
- Correctly determine if a scope is the last in line. It avoids a wrong
computation of the line end when determining if it must split after the
opening bracket with
v0.24.0 ChangesSeptember 07, 2018
- Added 'SPLIT_BEFORE_DOT' knob to support "builder style" calls. The "builder style" option didn't work as advertised. Lines would split after the dots, not before them regardless of the penalties. ### 🔄 Changed
- Support Python 3.7 in the tests. The old "comp_for" and "comp_if" nodes are now "old_comp_for" and "old_comp_if" in lib2to3. ### 🛠 Fixed
- Don't count inner function calls when marking arguments as named assignments.
- 👉 Make sure that tuples and the like are formatted nicely if they all can't fit on a single line. This is similar to how we format function calls within an argument list.
- 👍 Allow splitting in a subscript if it goes over the line limit.
- Increase the split penalty for an if-expression.
- Increase penalty for splitting in a subscript so that it's more likely to split in a function call or other data literal.
- Cloning a pytree node doesn't transfer its a annotations. Make sure we do that so that we don't lose information.
- Revert change that broke the "no_spaces_around_binary_operators" option.
- 💅 The "--style-help" option would output string lists and sets in Python types. If the output was used as a style, then it wouldn't parse those values correctly.
v0.23.0 ChangesAugust 27, 2018
DISABLE_ENDING_COMMA_HEURISTICis a new knob to disable the heuristic which splits a list onto separate lines if the list is comma-terminated. ### 🛠 Fixed
- There's no need to increase N_TOKENS. In fact, it causes other things which use lib2to3 to fail if called from YAPF.
- 🔄 Change the exception message instead of creating a new one that's just a clone.
- 👉 Make sure not to reformat when a line is disabled even if the --lines option is specified.
- The "no spaces around operators" flag wasn't correctly converting strings to sets. Changed the regexp to handle it better.