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

Support for switching ruby lambda literals #65

Open
glittershark opened this issue Feb 20, 2015 · 9 comments
Open

Support for switching ruby lambda literals #65

glittershark opened this issue Feb 20, 2015 · 9 comments

Comments

@glittershark
Copy link
Contributor

It'd be cool if we could switch between

-> (a, b) { a.do_stuff_with(b) }

and

lambda do |a, b|
  a.do_stuff_with(b)
end

Though there's gonna have to be some fiagling to make it not overlap with the block-syntax splitjoiner

(thanks for the awesome plugin, btw 😄)

@AndrewRadev
Copy link
Owner

Sorry it took me a while to get to this.

It would be possible to transform the arrow-block into a lambda, but I'm not sure under what circumstances we want which. I guess both syntaxes are perfectly valid for both one-line and multiline formats, right? Is this a matter of coding style?

If it is, one thing I'm considering is adding an option, similar to the one in #67. Maybe something like:

" Arrow lambda when splitting, but normal "lambda" when joining
let g:splitjoin_ruby_arrow_lambdas = 'Sj'

" Arrow lambda when joining, but normal "lambda" when splitting
let g:splitjoin_ruby_arrow_lambdas = 'sJ'

Does this look like a reasonable option to you? Or do you think it should always be one or the other for some reason? Or is it different depending on circumstances (in which case, maybe it could be added as a rule in switch.vim instead, so you can switch between them on a case-by-case basis)?

(thanks for the awesome plugin, btw 😄)

Thanks for the kind words :).

@firedev
Copy link

firedev commented Jun 10, 2015

This is wrong. Multi-line lambda in ruby is written like this:

lambda { |x|
...
}

Not with do end like blocks.

@glittershark
Copy link
Contributor Author

that's just like, your opinion, man

@glittershark
Copy link
Contributor Author

@glittershark
Copy link
Contributor Author

@firedev
Copy link

firedev commented Jun 10, 2015

Oh right, sorry, it's only when you pass multiline lambda as a parameter. For example when using scope in Rails. You need to surround it with () or use curly braces otherwise the block will be treated as a parameter for scope.

It just messed up in my head.

@glittershark
Copy link
Contributor Author

yeah, you're right on that.

@AndrewRadev
Copy link
Owner

Sorry, again, for taking so long to address this.

For starters, there was a separate issue related to this, actually: AndrewRadev/switch.vim#27

What I implemented there was a way to toggle between the arrow style and lambdas. That said, it would still be a useful tool to have in splitjoin, I assume not many people use the lambda syntax anyway. I'll leave this open and hope I can get to this a bit sooner this time.

@astyagun
Copy link

astyagun commented Mar 4, 2017

Small correction just in case:

I assume not many people use the lambda syntax anyway

Ruby style guide recommends using lambda for multiline blocks: https://github.com/bbatsov/ruby-style-guide#lambda-multi-line.

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

No branches or pull requests

4 participants