forked from google/yapf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
435 lines (380 loc) · 18.1 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
# Change Log
# All notable changes to this project will be documented in this file.
# This project adheres to [Semantic Versioning](http://semver.org/).
## [0.17.0] Unreleased
### Added
- Option `NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS` prevents adding spaces
around selected binary operators, in accordance with the current style guide.
### Changed
- Adjust blank lines on formatting boundaries when using the `--lines` option.
- Return 1 if a diff changed the code. This is in line with how GNU diff acts.
### Fixed
- Corrected how `DEDENT_CLOSING_BRACKETS` and `COALESCE_BRACKETS` interacted.
- Fix return value to return a boolean.
- Correct vim plugin not to clobber edited code if yapf returns an error.
## [0.16.3] 2017-07-13
### Changed
- Add filename information to a ParseError excetion.
### Fixed
- A token that ends in a continuation marker may have more than one newline in
it, thus changing its "lineno" value. This can happen if multiple
continuation markers are used with no intervening tokens. Adjust the line
number to account for the lines covered by those markers.
- Make sure to split after a comment even for "pseudo" parentheses.
## [0.16.2] 2017-05-19
### Fixed
- Treat expansion operators ('*', '**') in a similar way to function calls to
avoid splitting directly after the opening parenthesis.
- Increase the penalty for splitting after the start of a tuple.
- Increase penalty for excess characters.
- Check that we have enough children before trying to access them all.
- Remove trailing whitespaces from comments.
- Split before a function call in a list if the full list isn't able to fit on
a single line.
- Trying not to split around the '=' of a named assign.
- Changed split before the first argument behavior to ignore compound
statements like if and while, but not function declarations.
- Changed coalesce brackets not to line split before closing bracket.
## [0.16.1] 2017-03-22
### Changed
- Improved performance of cloning the format decision state object. This
improved the time in one *large* case from 273.485s to 234.652s.
- Relax the requirement that a named argument needs to be on one line. Going
over the column limit is more of an issue to pylint than putting named args
on multiple lines.
- Don't make splitting penalty decisions based on the original formatting. This
can and does lead to non-stable formatting, where yapf will reformat the same
code in different ways.
### Fixed
- Ensure splitting of arguments if there's a named assign present.
- Prefer to coalesce opening brackets if it's not at the beginning of a
function call.
- Prefer not to squish all of the elements in a function call over to the
right-hand side. Split the arguments instead.
- We need to split a dictionary value if the first element is a comment anyway,
so don't force the split here. It's forced elsewhere.
- Ensure tabs are used for continued indentation when USE_TABS is True.
## [0.16.0] 2017-02-05
### Added
- The `EACH_DICT_ENTRY_ON_SEPARATE_LINE` knob indicates that each dictionary
entry should be in separate lines if the full dictionary isn't able to fit on
a single line.
- The `SPLIT_BEFORE_DICT_SET_GENERATOR` knob splits before the `for` part of a
dictionary/set generator.
- The `BLANK_LINE_BEFORE_CLASS_DOCSTRING` knob adds a blank line before a
class's docstring.
- The `ALLOW_MULTILINE_DICTIONARY_KEYS` knob allows dictionary keys to span
more than one line.
### Fixed
- Split before all entries in a dict/set or list maker when comma-terminated,
even if there's only one entry.
- Will now try to set O_BINARY mode on stdout under Windows and Python 2.
- Avoid unneeded newline transformation when writing formatted code to
output on (affects only Python 2)
## [0.15.2] 2017-01-29
### Fixed
- Don't perform a global split when a named assign is part of a function call
which itself is an argument to a function call. I.e., don't cause 'a' to
split here:
func(a, b, c, d(x, y, z=42))
- Allow splitting inside a subscript if it's a logical or bitwise operating.
This should keep the subscript mostly contiguous otherwise.
## [0.15.1] 2017-01-21
### Fixed
- Don't insert a space between a type hint and the '=' sign.
- The '@' operator can be used in Python 3 for matrix multiplication. Give the
'@' in the decorator a DECORATOR subtype to distinguish it.
- Encourage the formatter to split at the beginning of an argument list instead
of in the middle. Especially if the middle is an empty parameter list. This
adjusts the affinity of binary and comparison operators. In particular, the
"not in" and other such operators don't want to have a split after it (or
before it) if at all possible.
## [0.15.0] 2017-01-12
### Added
- Keep type annotations intact as much as possible. Don't try to split the over
mutliple lines.
### Fixed
- When determining if each element in a dictionary can fit on a single line, we
are skipping dictionary entries. However, we need to ignore comments in our
calculations and implicitly concatenated strings, which are already placed on
separate lines.
- Allow text before a "pylint" comment.
- Also allow text before a "yapf: (disable|enable)" comment.
## [0.14.0] 2016-11-21
### Added
- formatting can be run in parallel using the "-p" / "--parallel" flags.
### Fixed
- "not in" and "is not" should be subtyped as binary operators.
- A non-Node dictionary value may have a comment before it. In those cases, we
want to avoid encompassing only the comment in pseudo parens. So we include
the actual value as well.
- Adjust calculation so that pseudo-parentheses don't count towards the total
line length.
- Don't count a dictionary entry as not fitting on a single line in a
dictionary.
- Don't count pseudo-parentheses in the length of the line.
## [0.13.2] 2016-10-22
### Fixed
- REGRESSION: A comment may have a prefix with newlines in it. When calculating
the prefix indent, we cannot take the newlines into account. Otherwise, the
comment will be misplaced causing the code to fail.
## [0.13.1] 2016-10-17
### Fixed
- Correct emitting a diff that was accidentally removed.
## [0.13.0] 2016-10-16
### Added
- Added support to retain the original line endings of the source code.
### Fixed
- Functions or classes with comments before them were reformatting the comments
even if the code was supposed to be ignored by the formatter. We now don't
adjust the whitespace before a function's comment if the comment is a
"disabled" line. We also don't count "# yapf: {disable|enable}" as a disabled
line, which seems logical.
- It's not really more readable to split before a dictionary value if it's part
of a dictionary comprehension.
- Enforce two blank lines after a function or class definition, even before a
comment. (But not between a decorator and a comment.) This is related to PEP8
error E305.
- Remove O(n^2) algorithm from the line disabling logic.
## [0.12.2] 2016-10-09
### Fixed
- If `style.SetGlobalStyle(<create pre-defined style>)` was called and then
`yapf_api.FormatCode` was called, the style set by the first call would be
lost, because it would return the style created by `DEFAULT_STYLE_FACTORY`,
which is set to PEP8 by default. Fix this by making the first call set which
factory we call as the "default" style.
- Don't force a split before non-function call arguments.
- A dictionary being used as an argument to a function call and which can exist
on a single line shouldn't be split.
- Don't rely upon the original line break to determine if we should split
before the elements in a container. Especially split if there's a comment in
the container.
- Don't add spaces between star and args in a lambda expression.
- If a nested data structure terminates in a comma, then split before the first
element, but only if there's more than one element in the list.
## [0.12.1] 2016-10-02
### Changed
- Dictionary values will be placed on the same line as the key if *all* of the
elements in the dictionary can be placed on one line. Otherwise, the
dictionary values will be placed on the next line.
### Fixed
- Prefer to split before a terminating r-paren in an argument list if the line
would otherwise go over the column limit.
- Split before the first key in a dictionary if the dictionary cannot fit on a
single line.
- Don't count "pylint" comments when determining if the line goes over the
column limit.
- Don't count the argument list of a lambda as a named assign in a function
call.
## [0.12.0] 2016-09-25
### Added
- Support formatting of typed names. Typed names are formatted a similar way to
how named arguments are formatted, except that there's a space after the
colon.
- Add a knob, 'SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN', to allow adding spaces
around the assign operator on default or named assigns.
## Changed
- Turn "verification" off by default for external APIs.
- If a function call in an argument list won't fit on the current line but will
fit on a line by itself, then split before the call so that it won't be split
up unnecessarily.
## Fixed
- Don't add space after power operator if the next operator's a unary operator.
## [0.11.1] 2016-08-17
### Changed
- Issue #228: Return exit code 0 on success, regardless of whether files were
changed. (Previously, 0 meant success with no files
modified, and 2 meant success with at least one file modified.)
### Fixed
- Enforce splitting each element in a dictionary if comma terminated.
- It's okay to split in the middle of a dotted name if the whole expression is
going to go over the column limit.
- Asynchronous functions were going missing if they were preceded by a comment
(a what? exactly). The asynchronous function processing wasn't taking the
comment into account and thus skipping the whole function.
- The splitting of arguments when comma terminated had a conflict. The split
penalty of the closing bracket was set to the maximum, but it shouldn't be if
the closing bracket is preceded by a comma.
## [0.11.0] 2016-07-17
### Added
- The COALESCE_BRACKETS knob prevents splitting consecutive brackets when
DEDENT_CLOSING_BRACKETS is set.
- Don't count "pylint" directives as exceeding the column limit.
### Changed
- We split all of the arguments to a function call if there's a named argument.
In this case, we want to split after the opening bracket too. This makes
things look a bit better.
### Fixed
- When retaining format of a multiline string with Chromium style, make sure
that the multiline string doesn't mess up where the following comma ends up.
- Correct for when 'lib2to3' smooshes comments together into the same DEDENT
node.
## [0.10.0] 2016-06-14
### Added
- Add a knob, 'USE_TABS', to allow using tabs for indentation.
### Changed
- Performance enhancements.
### Fixed
- Don't split an import list if it's not surrounded by parentheses.
## [0.9.0] 2016-05-29
### Added
- Added a knob (SPLIT_PENALTY_BEFORE_IF_EXPR) to adjust the split penalty
before an if expression. This allows the user to place a list comprehension
all on one line.
- Added a knob (SPLIT_BEFORE_FIRST_ARGUMENT) that encourages splitting before
the first element of a list of arguments or parameters if they are going to
be split anyway.
- Added a knob (SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED) splits arguments to a
function if the list is terminated by a comma.
### Fixed
- Don't split before a first element list argument as we would before a first
element function call.
- Don't penalize when we must split a line.
- Allow splitting before the single argument in a function call.
## [0.8.2] 2016-05-21
### Fixed
- Prefer not to split after the opening of a subscript.
- Don't add space before the 'await' keyword if it's preceded by an opening
paren.
- When we're setting the split penalty for a continuous list, we don't want to
mistake a comment at the end of that list as part of the list.
- When calculating blank lines, don't assume the last seen object was a class
or function when we're in a class or function.
- Don't count the closing scope when determining if the current scope is the
last scope on the line.
## [0.8.1] 2016-05-18
### Fixed
- 'SPLIT_BEFORE_LOGICAL_OPERATOR' wasn't working correctly. The penalty was
being set incorrectly when it was part of a larger construct.
- Don't separate a keyword, like "await", from a left paren.
- Don't rely upon the original tokens' line number to determine if we should
perform splitting in Facebook mode. The line number isn't the line number of
the reformatted token, but the line number where it was in the original code.
Instead, we need to carefully determine if the line is liabel to be split and
act accordingly.
## [0.8.0] 2016-05-10
### Added
- Add a knob, 'SPACES_AROUND_POWER_OPERATOR', to allow adding spaces around the
power operator.
### Fixed
- There shouldn't be a space between a decorator and an intervening comment.
- If we split before a bitwise operator, then we assume that the programmer
knows what they're doing, more or less, and so we enforce a split before said
operator if one exists in the original program.
- Strengthen the bond between a keyword and value argument.
- Don't add a blank line after a multiline string.
- If the "for" part of a list comprehension can exist on the starting line
without going over the column limit, then let it remain there.
## [0.7.1] 2016-04-21
### Fixed
- Don't rewrite the file if there are no changes.
- Ensure the proper number of blank lines before an async function.
- Split after a bitwise operator when in PEP 8 mode.
- Retain the splitting within a dictionary data literal between the key and
value.
- Try to keep short function calls all on one line even if they're part of a
larger series of tokens. This stops us from splitting too much.
## [0.7.0] 2016-04-09
### Added
- Support for Python 3.5.
- Add 'ALLOW_MULTILINE_LAMBDAS' which allows lambdas to be formatted onto
multiple lines.
### Fixed
- Lessen penalty for splitting before a dictionary keyword.
- Formatting of trailing comments on disabled formatting lines.
- Disable / enable formatting at end of multi-line comment.
## [0.6.3] 2016-03-06
### Changed
- Documentation updated.
### Fixed
- Fix spacing of multiline comments when formatting is disabled.
## [0.6.2] 2015-11-01
### Changed
- Look at the 'setup.cfg' file to see if it contains style information for
YAPF.
- Look at the '~/.config/yapf/style' file to see if it contains global style
information for YAPF.
### Fixed
- Make lists that can fit on one line more likely to stay together.
- Correct formatting of '*args' and '**kwargs' when there are default values in
the argument list.
## [0.6.1] 2015-10-24
### Fixed
- Make sure to align comments in data literals correctly. Also make sure we
don't count a "#." in a string as an i18n comment.
- Retain proper vertical spacing before comments in a data literal.
- Make sure that continuations from a compound statement are distinguished from
the succeeding line.
- Ignore preceding comments when calculating what is a "dictonary maker".
- Add a small penalty for splitting before a closing bracket.
- Ensure that a space is enforced after we remove a pseudo-paren that's between
two names, keywords, numbers, etc.
- Increase the penalty for splitting after a pseudo-paren. This could lead to
less readable code in some circumstances.
## [0.6.0] 2015-10-18
### Added
- Add knob to indent the dictionary value if there is a split before it.
### Changed
- No longer check that a file is a "Python" file unless the '--recursive' flag
is specified.
- No longer allow the user to specify a directory unless the '--recursive' flag
is specified.
### Fixed
- When determining if we should split a dictionary's value to a new line, use
the longest entry instead of the total dictionary's length. This allows the
formatter to reformat the dictionary in a more consistent manner.
- Improve how list comprehensions are formatted. Make splitting dependent upon
whether the "comp_for" or "comp_if" goes over the column limit.
- Don't over indent if expression hanging indents if we expect to dedent the
closing bracket.
- Improve splitting heuristic when the first argument to a function call is
itself a function call with arguments. In cases like this, the remaining
arguments to the function call would look badly aligned, even though they are
techincally correct (the best kind of correct!).
- Improve splitting heuristic more so that if the first argument to a function
call is a data literal that will go over the column limit, then we want to
split before it.
- Remove spaces around '**' operator.
- Retain formatting of comments in the middle of an expression.
- Don't add a newline to an empty file.
- Over indent a function's parameter list if it's not distinguished from the
body of the function.
## [0.5.0] 2015-10-11
### Added
- Add option to exclude files/directories from formatting.
- Add a knob to control whether import names are split after the first '('.
### Fixed
- Indent the continuation of an if-then statement when it's not distinguished
from the body of the if-then.
- Allow for sensible splitting of array indices where appropriate.
- Prefer to not split before the ending bracket of an atom. This produces
better code in most cases.
- Corrected how horizontal spaces were presevered in a disabled region.
## [0.4.0] 2015-10-07
### Added
- Support for dedenting closing brackets, "facebook" style.
### Fixed
- Formatting of tokens after a multiline string didn't retain their horizontal
spacing.
## [0.3.1] 2015-09-30
### Fixed
- Format closing scope bracket correctly when indentation size changes.
## [0.3.0] 2015-09-20
### Added
- Return a 2 if the source changed, 1 on error, and 0 for no change.
### Fixed
- Make sure we format if the "lines" specified are in the middle of a
statement.
## [0.2.9] - 2015-09-13
### Fixed
- Formatting of multiple files. It was halting after formatting the first file.
## [0.2.8] - 2015-09-12
### Added
- Return a non-zero exit code if the source was changed.
- Add bitwise operator splitting penalty and prefer to split before bitwise
operators.
### Fixed
- Retain vertical spacing between disabled and enabled lines.
- Split only at start of named assign.
- Retain comment position when formatting is disabled.
- Honor splitting before or after logical ops.