lib/rubocop/cop/style/lambda.rb in rubocop-0.35.1 vs lib/rubocop/cop/style/lambda.rb in rubocop-0.36.0
- old
+ new
@@ -1,19 +1,22 @@
# encoding: utf-8
+# frozen_string_literal: true
module RuboCop
module Cop
module Style
# This cop checks for uses of the pre 1.9 lambda syntax for one-line
# anonymous functions and uses of the 1.9 lambda syntax for multi-line
# anonymous functions.
class Lambda < Cop
include AutocorrectUnlessChangingAST
- SINGLE_MSG = 'Use the new lambda literal syntax `->(params) {...}`.'
- SINGLE_NO_ARG_MSG = 'Use the new lambda literal syntax `-> {...}`.'
- MULTI_MSG = 'Use the `lambda` method for multi-line lambdas.'
+ SINGLE_MSG = 'Use the new lambda literal syntax ' \
+ '`->(params) {...}`.'.freeze
+ SINGLE_NO_ARG_MSG = 'Use the new lambda literal syntax ' \
+ '`-> {...}`.'.freeze
+ MULTI_MSG = 'Use the `lambda` method for multi-line lambdas.'.freeze
TARGET = s(:send, nil, :lambda)
def on_block(node)
# We're looking for
@@ -25,13 +28,13 @@
return unless block_method == TARGET
selector = block_method.loc.selector.source
length = lambda_length(node)
if selector != '->' && length == 1
- add_offense_for_single_line(node, block_method.loc.expression, args)
+ add_offense_for_single_line(node, block_method.source_range, args)
elsif selector == '->' && length > 1
- add_offense(node, block_method.loc.expression, MULTI_MSG)
+ add_offense(node, block_method.source_range, MULTI_MSG)
end
end
private
@@ -52,11 +55,11 @@
def correction(node)
lambda do |corrector|
block_method, _args = *node
- if block_method.loc.expression.source == 'lambda'
+ if block_method.source == 'lambda'
autocorrect_old_to_new(corrector, node)
else
autocorrect_new_to_old(corrector, node)
end
end
@@ -67,25 +70,25 @@
# Avoid correcting to `lambdado` by inserting whitespace
# if none exists before or after the lambda arguments.
if needs_whitespace?(block_method, args, node)
corrector.insert_before(node.loc.begin, ' ')
end
- corrector.replace(block_method.loc.expression, 'lambda')
- corrector.remove(args.loc.expression) if args.loc.expression
+ corrector.replace(block_method.source_range, 'lambda')
+ corrector.remove(args.source_range) if args.source_range
return if args.children.empty?
arg_str = " |#{lambda_arg_string(args)}|"
corrector.insert_after(node.loc.begin, arg_str)
end
def autocorrect_old_to_new(corrector, node)
block_method, args = *node
- corrector.replace(block_method.loc.expression, '->')
+ corrector.replace(block_method.source_range, '->')
return if args.children.empty?
arg_str = "(#{lambda_arg_string(args)})"
whitespace_and_old_args = node.loc.begin.end.join(args.loc.end)
- corrector.insert_after(block_method.loc.expression, arg_str)
+ corrector.insert_after(block_method.source_range, arg_str)
corrector.remove(whitespace_and_old_args)
end
def needs_whitespace?(block_method, args, node)
selector_end = block_method.loc.selector.end.end_pos
@@ -95,10 +98,10 @@
(block_begin == args_end && selector_end == args_begin) ||
(block_begin == selector_end)
end
def lambda_arg_string(args)
- args.children.map { |a| a.loc.expression.source }.join(', ')
+ args.children.map(&:source).join(', ')
end
end
end
end
end