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

[Fixes #44] Use parser's new emit_forward_arg by default #52

Merged
merged 1 commit into from Aug 1, 2020

Conversation

marcandre
Copy link
Contributor

No description provided.

@@ -14,6 +14,8 @@ module AST
# parser = Parser::Ruby25.new(builder)
# root_node = parser.parse(buffer)
class Builder < Parser::Builders::Default
self.emit_forward_arg = true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we leave it to RuboCop to set this, for the sake of consistency in rubocop-ast?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Contrary to the other emit_, this is really fixing an error in the AST. We are < 1.0 so I think it's best to set this default now.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough.

This gem is meant to be compatible with all settings. For example, to have `-> { ... }` emitted
This gem, by default, uses most [legacy AST output from parser](https://github.com/whitequark/parser/#usage), except for `emit_forward_arg` which is set to `true`.

The main `RuboCop` gem uses these defaults (and is currently only compatible with these), but this gem can be used separately from `RuboCop` and is meant to be compatible with all settings. For example, to have `-> { ... }` emitted
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a more salient point here is that most tools using parser use the legacy format, that's why it's a safer default.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a more salient point here is that most tools using parser use the legacy format

Quite possible (by choice or because they aren't aware of it). I know some are using the "modern" AST (unparser, ruby-next), but my tool (DeepCover) doesn't, by ignorance first and by choice now 😆

that's why it's a safer default.

I'm not sure what you mean by "safer".

My objective is to be useful. Have you actually looked closely at the emit_... flags?

In my opinion, while they reflect an actual difference in the language, all of them are insignificant over-complexifications for the vast majority of tools and Rubyists.

For example: -> {} and lambda {} are indeed different in theory because one could, for example, redefine the method lambda while the first form woudn't be affected. I'd venture to say that the vast majority of parser uses don't care one bit about that difference. For RuboCop there might be a single cop caring about it (fixing the preference of one form over the other); all other cops probably prefer the simplicity of having to deal with the same AST for both constructs.

Some are even more obscure. I personally much prefer an AST of (send _ :[]= ...); it's how I think about foo[42]= :bar. I've yet to see foo.[]=(42, :bar) in the wild and it's quite sad that it forced parser to introduce a different AST for this.

emit_forward is different. It was actually a bad decision and the AST emitted without it is of a strange structure (forward-args not inside an args, ...) and is not forward compatible with 2.8. My opinion is that it should be turned on by default by all tools that are aware of it.

Are there emit_... that you feel are actually useful when turned on?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's why it's a safer default.

I meant it's less likely to surprise someone with the modern parser output. Maybe that's not a big problem in practice.

My objective is to be useful. Have you actually looked closely at the emit_... flags?

Yeah, I have. Generally most of the changes didn't add much value for us, that's why I never felt compelled to update the code. The biggest practical issue is obviously the big number of extensions that would suffer if we update the format, so for such changes we should always have a good reason. I'm fine with updating forward-args, as it has a relatively small impact, but I want to make sure people understand our rationale.

@marcandre marcandre added this to the 1.0.0 milestone Jul 3, 2020
@marcandre marcandre force-pushed the forward branch 3 times, most recently from 96b2d05 to 6dce0e6 Compare July 6, 2020 15:56
Bump minimum RuboCop supported as we need the following commit:
rubocop/rubocop@3aeadd921fb526
@marcandre marcandre merged commit 32a2696 into rubocop:master Aug 1, 2020
@marcandre marcandre deleted the forward branch August 1, 2020 19:24
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.

None yet

2 participants