Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assoc uses Identity formatter if any value is nil #450

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

bradleybuda
Copy link

The existing assoc formatter has logic to identify the case where a value is nil (in a Ruby-3.1 style hash) and preserve the existing formatting. For example: { first:, "second" => "value" } is correctly left as-is.

However, this logic only worked if the first assoc in the container had the nil value - if a later assoc had a nil value, the Identity formatter might not be chosen which could cause the formatter to generate invalid Ruby code.

As an example, this code: { "first" => "value", second: } would be turned into { "first" => "value", :second => }.

This patch pulls the nil value check up to the top of HashKeyFormatter.for to ensure it takes precendence over any other formatting selections. The fixtures have been updated to cover both cases (nil value in first position, nil value in last position).

Fixes #446

The existing assoc formatter has logic to identify the case where a
value is nil (in a Ruby-3.1 style hash) and preserve the existing
formatting. For example: `{ first:, "second" => "value" }` is correctly
left as-is.

However, this logic only worked if the first assoc in the
container had the nil value - if a later assoc had a nil value, the
Identity formatter might not be chosen which could cause the formatter
to generate invalid Ruby code.

As an example, this code: `{ "first" => "value", second: }` would be
turned into `{ "first" => "value", :second => }`.

This patch pulls the nil value check up to the top of
`HashKeyFormatter.for` to ensure it takes precendence over any other
formatting selections. The fixtures have been updated to cover both
cases (nil value in first position, nil value in last position).

Fixes ruby-syntax-tree#446
@bradleybuda bradleybuda force-pushed the bare-assoc-hash-with-ruby-3.1-keyword branch from 6e6feaf to c5b61fb Compare April 5, 2024 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

stree write turns correct code into incorrect code for method call with mix of keyword types
1 participant