All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- When predicates from within an
if
,unless
,while
, oruntil
loop break the line, they should be aligned together. For example,
if foooooo || barrrrrr
baz
end
If the line was set to very short, the binary node should be aligned to 3 spaces from the left of the file (which aligns with the if
, it would be more for unless
). So it would look like:
if foooooo ||
barrrrrr
baz
end
(Thanks to @jakeprime for the report.)
0.15.0 - 2019-08-06
- If xstring literals (command line calls surrounded by backticks) break, then we indent and place the command on a new line. Previously, this was resulting in new lines getting added each time the code was formatted. Now this happens correctly. (Thanks to @dudeofawesome for the report.)
- When a
while
oruntil
loop modifies abegin...end
statement, it must remain in the modifier form or else it changes sematic meaning. For example,
begin
foo
end while bar
cannot be transformed into:
while bar
foo
end
because that would never execute foo
if bar
is falsy, whereas in the initial example it would have. (Thanks to @krachtstefan for the report.)
- When transforming a block into the
Symbol#to_proc
syntax from within a list of arguments inside of anaref
node (i.e.,foo[:bar].each
), we can't put the block syntax inside the brackets. (Thanks to @jviney for the report.) - Values for the
return
keyword that broke the line were previously just printed as they were, which breaks if you have a block expression like anif
orwhile
. For example,
return foo ? bar : baz
if the line was set to very short would be printed as:
return if foo
bar
else
baz
end
which wouldn't work. Instead, they now get printed with parentheses around the value, as in:
return(
if foo
bar
else
baz
end
)
(Thanks to @jakeprime for the report.)
- When switching from a double-quoted string to a single-quoted string that contained escaped double quotes, the backslashes would stay in the string. As in:
"Foo \"Bar\" Baz"
would get formatted as:
'Foo \"Bar\" Baz'
but now gets formatted as:
'Foo "Bar" Baz'
(Thanks to @jakeprime for the report.)
0.14.0 - 2019-07-17
- Support for pattern matching for variables and array patterns. Currently waiting on Ripper support for hash patterns. For examples, check out the test/js/patterns.test.js file.
- if/else blocks that had method calls on the end of them that were also transformed into ternaries need to have parens added to them. For example,
if foo
1
else
2
end.to_s
now correctly gets transformed into:
(foo ? 1 : 2).to_s
(Thanks to @jviney for the report.)
- Fixed a bug where multiple newlines at the end of the file would cause a crash. (Thanks to @acrewdson for the report.)
- If a variable is assigned inside of the predicate of a conditional, then we can't change it into the single-line version as this breaks. For example,
if foo = 1
foo
end
must stay the same. (Thanks to @jviney for the report.)
0.13.0 - 2019-07-05
- Added
locStart
andlocEnd
functions to support--cursor-offset
.
- Comments inside of
do...end
blocks that preceededcall
nodes were associating the comment with thevar_ref
instead of thecall
itself. For example,
foo.each do |bar|
# comment
bar.baz
bar.baz
end
would get printed as
foo.each do |bar|
# comment
bar
.baz
bar.baz
end
but now gets printed correctly. (Thanks to @xipgroc for the report.)
- Double splats inside a hash were previously failing to print. For example,
{ foo: "bar", **baz }
would fail to print, but now works. (Thanks to @petevk for the report.)
0.12.3 - 2019-05-16
- [INTERNAL] Move arg, assign, constant, flow, massign, operator, scope, and statement nodes into their own files.
- [INTERNAL] Move
@int
,access_ctrl
,assocsplat
,block_var
,else
,number_arg
,super
,undef
,var_ref
, andvar_ref
as well as various call and symbol nodes into appropriate files. - Better support for excessed commas in block args. Previously
proc { |x,| }
would add an extra space, but now it does not. - [INTERNAL] Add a lot more documentation to the parser.
- Previously, the unary
not
operator inside a ternary (e.g.,a ? not(b) : c
) would break because it wouldn't add parentheses, but now it adds them. (Thanks to @glejeune for the report.) if
andunless
nodes used to not be able to handle if a comment was the only statement in the body. For example,
if foo
# comment
end
would get printed as
# comment if foo
Now the if
and unless
printers check for the presence of single comments.
- Fixes an error where
command
nodes withindef
nodes would fail to format if it was only a single block argument. For example,
def curry(&block)
new &block
end
would fail, but now works. (Thanks to @JoshuaKGoldberg for the report.)
- Comments on lines with array references were previously deleting the array references entirely. For example,
array[index] # comment
would previously result in array[]
, but now prints properly. (Thanks to @xipgroc for the report.)
0.12.2 - 2019-04-30
- When symbol literal hash keys end with
=
, they cannot be transformed into hash labels. - Fixed when blocks on methods with no arguments are transformed into
to_proc
syntax. (Thanks to @xipgroc for the report.)
0.12.1 - 2019-04-22
- If a lambda literal is nested under a
command
orcommand_call
node anywhere in the heirarchy, then it needs to use the higher-precedence{ ... }
braces as opposed to thedo ... end
delimiters. - Calling
super
with a block and no args was causing the parser to fail when attempting to inspect lambda nodes. (Thanks to @jpickwell for the report.) - Support better breaking within interpolation by grouping the interpolated content.
0.12.0 - 2019-04-18
- Automatically convert
lambda { ... }
method calls into-> { ... }
literals.
0.11.0 - 2019-04-18
- Support for parsing things with a ruby shebang (e.g.,
#!/usr/bin/env ruby
or#!/usr/bin/ruby
). - [INTERNAL] Big tests refactor.
- Make multiple
when
predicates break at 80 chars and then wrap to be inline with the other predicates. - Automatically add underscores in large numbers that aren't already formatted.
- Better support for inline access control modifiers. (Thanks for @AlanFoster.)
- Better support for heredocs in hash literals. (Thanks to @jpickwell for the report.)
- Better support for heredocs in array literals.
- Support automatically transforming
def/begin/rescue/end/end
intodef/rescue/end
.
- Fixed support for dynamic string hash keys. (Thanks to @deecewan.)
- [INTERNAL] Moved
case/when
into its own file and added better documentation. - [INTERNAL] Moved
begin/rescue
into its own file. - Automatically add newlines around access modifiers. (Thanks for @AlanFoster.)
- Alignment of command calls with arguments is fixed.
- Alignment of
to
is explicitly allowed to not indent to better support rspec. (Thanks to @aaronjensen for the report.) - Fix up the
to_proc
transform so that it works with other argument handling appropriately. - Fixed regression on regexp comments.
- Fix up block delimiters when nested inside a
command
orcommand_call
node. (Thanks to @CodingItWrong for the report.) - [INTERNAL] Moved hashes into its own file.
0.10.0 - 2019-03-25
- Support for block-local variables.
- Support for dyna-symbols that are using single quotes.
- Force method calls after arrays, blocks, hashes, and xstrings to hang onto the end of the previous nodes.
- Check before anything else for an invalid ruby version.
0.9.1 - 2019-03-24
- Better support string quotes by favoring what the user chose if the string contains escape patterns.
- Better support heredocs within method calls.
0.9.0 - 2019-03-18
- Support the
hasPragma
function. - Support the new
number_arg
node type in Ruby 2.7.
- Limit the number of nodes that are allowed to turn into ternary expressions.
0.8.0 - 2019-03-08
- [INTERNAL] Add
eslint
and fix up existing violations. - Add the infra for the
prettier
ruby gem. (Thanks to @AlanFoster.) - Add a
rake
task for easier process integration for the ruby gem. - Handle direct interpolation of strings with %w array literals (i.e.,
["#{foo}"]
should not be transformed into a %w array).
- Fix string escaping for hex digit bit patterns when there's only one character after the "x".
- Don't allow line breaks between brace block params. (Thanks to @AlanFoster.)
- [INTERNAL] Switch over the array.rb test case to minitest. (Thanks to @johnschoeman.)
- [INTERNAL] Test improvements to allow running in parallel. (Thanks to @AlanFoster.)
- [INTERNAL] Switch over assign.rb test case to minitest. (Thanks to @johnschoeman.)
- [INTERNAL] Add a contributing guide. (Thanks to @AlanFoster.)
- Handle longer command nodes. (Thanks to @AlanFoster.)
- Changed the ruby executable within the
prettier
gem torbprettier
for easier autocomplete.
- All instances of the spread (
...
) operator so that we can support older versions of node.
0.7.0 - 2019-02-24
- Support checking for escaping within strings to force double quotes (e.g., "\n").
- Handle cases with empty class and module declarations that need to break. (Thanks to @RossKinsella for the report.)
- [INTERNAL] Align the
bin/print
andbin/sexp
API to supportbin/print
taking a filepath. (Thanks to @AlanFoster.) - Support lambdas that don't break and are inline. (Thanks to @AndrewRayCode for the report.)
- [INTERNAL] Switch over the numbers.rb test to minitest. (Thanks to @AlanFoster.)
- [INTERNAL] Switch over the kwargs.rb test to minitest. (Thanks to @AlanFoster.)
- [INTERNAL] Bail out early if the Ruby input is invalid. (Thanks to @AlanFoster.)
- Support
__END__
content. - Fix up issue with whitespace being added within regexp that are multiline. (Thanks to @AlanFoster.)
- Better support for destructuring within multi assignment. (Thanks to @AlanFoster.)
- [INTERNAL] Switch
next
test over to minitest. - Handle multiple arguments to
next
with a space between. - Handle multi-line conditional predicate (should align with keyword). (Thanks to @AndrewRayCode for the report.)
- Properly support adding trailing commas with and without blocks. (Thanks to @aaronjensen for the report.)
- Fix regression of handling comments within arrays on array literals. (Thanks to @AlanFoster for the report.)
- Support multiple arguments to
undef
. (Thanks to @AlanFoster.)
0.6.3 - 2019-02-18
- [INTERNAL] Switch over
binary
fixture to minitest. - [INTERNAL] Reconfigure parser into multiple layer modules so that it's easier to understand and manage.
- Handle comments from within
begin
,rescue
,ensure
,while
, anduntil
nodes. - Properly indent heredocs without taking into account current indentation level.
0.6.2 - 2019-02-17
- Handle regexp suffixes. (Thanks to @AlanFoster.)
- [INTERNAL] Add support for testing the test fixtures with minitest.
- [INTERNAL] Switch over
alias
andregexp
tests to minitest. - Break up method args to split into multiple lines. (Thanks to @aaronjensen for the report.)
- Handle blocks args when trailing commas are on. (Thanks to @christoomey for the report.)
0.6.1 - 2019-02-15
- Fix Ruby 2.5 inline comments on
args_add_block
nodes. (Thanks to @meleyal for the report.) - Support passing
super()
explicitly with no arguments. (Thanks to @meleyal for the report.)
0.6.0 - 2019-02-14
- Handle non UTF-8 comments.
- Handle non UTF-8 identifiers.
- Handle non UTF-8 strings.
- Handle empty parens.
- Handle rescue with splats preceeding the exception names.
- Use
JSON::fast_generate
to get the s-expressions back from the parser. - Handle broken lambdas from within
command
andcommand_call
nodes. (Thanks to @NoahTheDuke for the report.)
0.5.2 - 2019-02-13
- Support embedded expressions within strings that contain only keywords, as in
"#{super}"
.
0.5.1 - 2019-02-13
- Force
do
blocks that we know have to bedo
blocks to break. (Thanks to @yuki24 for the report.) - Handle
command
andcommand_call
nodesdo
blocks by forcing them to break. (Thanks to @kmcq for the report.) - Attach comments to full hash association nodes, not just the value. (Thanks to @ashfurrow for the report.)
0.5.0 - 2019-02-13
- Automatically convert arrays of all string literals to %w arrays.
- Automatically convert arrays of all symbol literals to %i arrays.
- [INTERNAL] Move the
args_add
andargs_new
handling into the parser. - Change
command_call
nodes to properly indent when broken and to not add a trailing comma. (Thanks to @uri for the report.) - Rename the
trailingComma
option toaddTrailingCommas
to not conflict with the JS option.
0.4.1 - 2019-02-12
- [INTERNAL] Provide the
makeList
utility for the nodes that are lists from within ripper. - Again, this time for real, properly escape strings. (Thanks to @awinograd for the report.)
- Fix up trailing commas on command calls.
0.4.0 - 2019-02-12
- Support the
trailingComma
configuration option (defaults tofalse
). (Thanks to @Overload119 for the request.)
- Pass the code to be formatted over
stdin
. (Thanks to @NoahTheDuke for the report.)
0.3.7 - 2019-02-11
- Split up statements even if they started on the same line with
;
s unless they are within an embedded expression. - Properly handle escaped quotes within strings.
0.3.6 - 2019-02-10
- Support the
not
operator properly. (Thanks to @AlanFoster for the report.) - Handle comments properly inside
if
,unless
, andwhen
nodes. (Thanks to @AlanFoster for the report.)
0.3.5 - 2019-02-09
- Handle lonely operators in Ruby
2.5
.
0.3.4 - 2019-02-09
- Comments are now properly attached inside
defs
nodes. - Support multiple inline comments on nodes.
- Support inline comments from within the
EXPR_END|EXPR_LABEL
lexer state. - Stop transforming multistatement blocks with
to_proc
. (Thanks to @cbothner.) do
blocks necessarily need to break their parent nodes.- Handle
next
node edge case withargs_add
as the body. (Thanks to @eins78 for the report.)
0.3.3 - 2019-02-09
- Command nodes within conditionals now break parents to disallow them from being turned into ternary expressions. (Thanks to @bugthing for the report.)
- Properly escape double quotes when using
preferSingleQuotes: false
. (Thanks to @awinograd for the report.)
0.3.2 - 2019-02-09
- [INTERNAL] Don't define duplicated methods in the parser.
- Let prettier know about
.rb
and.rake
files so you don't have to specify the parser when running. - Renamed the package to @prettier/plugin-ruby.
0.3.1 - 2019-02-07
- Automatically add parens to method declarations.
- Handle comments on bare hash assocs.
- Handle
method_add_block
nodes where the statements may be nested one more level. - Handle heredocs nested no matter how many levels deep.
0.3.0 - 2019-02-07
- Support squiggly heredocs.
- Support straight heredocs.
- Ignore current indentation when creating embdocs so that
=begin
is always at the beginning of the line. - [INTERNAL] Move
regexp_add
andregexp_new
handling into the parser. - [INTERNAL] Move
xstring_add
andxstring_new
handling into the parser. - [INTERNAL] Move
string_add
andstring_content
handling into the parser. - [INTERNAL] Move
mrhs_add
andmrhs_new
handling into the parser. - [INTERNAL] Move
mlhs_add
andmlhs_new
handling into the parser.
0.2.1 - 2019-02-06
- Handle brace blocks on commands properly.
- Break parent and return
do
blocks when called from acommand
node. - Handle edge cases with
if
statements where there is no body of the if (so it can't be converted to a ternary).
0.2.0 - 2019-02-06
- Handle
methref
nodes from Ruby2.7
. - Allow
module
nodes to shorten using;
when the block is empty.
- Handle splat within an array, as in
[1, 2, *foo]
. - Disallow comments from being attached to intermediary regex nodes.
- Fix
to_proc
transforms to reference the method called as opposed to the parameter name. - [INTERNAL] Change statement lists to be generated within the parser instead of the printer, thereby allowing finer control over comments.
- [INTERNAL] Completely revamp comment parsing by switching off the internal lexer state from
ripper
. This should drastically increase accuracy of comment parsing in general, and set us up for success in the future. - Allow comments to be attached to
CHAR
nodes. - [INTERNAL] Disallow comments from being attached to
args_new
nodes. - [INTERNAL] Track start and end lines so we can better insert block comments.
- [INTERNAL] Handle intermediary array nodes in the parse for better comment handling.
0.1.2 - 2019-02-05
- Handle guard clauses that return with no parens.
0.1.1 - 2019-02-05
- Handle class method calls with the
::
operator. - Handle strings with apostrophes when using
preferSingleQuote
. - [INTERAL] Have travis run multiple ruby versions.
- Explicitly fail if ruby version is <
2.5
. - Disallow comments from being attached to intermediary string nodes.
0.1.0 - 2019-02-04
- Initial release 🎉