splitjoin.vim
splitjoin.vim copied to clipboard
Support for switching ruby lambda literals
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 :smile:)
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 :smile:)
Thanks for the kind words :).
This is wrong. Multi-line lambda in ruby is written like this:
lambda { |x|
...
}
Not with do
end
like blocks.
that's just like, your opinion, man
https://github.com/bbatsov/ruby-style-guide#single-line-blocks
https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/cop/style/block_delimiters.rb#L44
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.
yeah, you're right on that.
Sorry, again, for taking so long to address this.
For starters, there was a separate issue related to this, actually: https://github.com/AndrewRadev/switch.vim/issues/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.
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.