class RuboCop::Cop::LambdaLiteralToMethodCorrector
This class auto-corrects lambda literal to method notation.
Attributes
arguments[R]
block_node[R]
method[R]
Public Class Methods
new(block_node)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 7 def initialize(block_node) @block_node = block_node @method = block_node.send_node @arguments = block_node.arguments end
Public Instance Methods
call(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 13 def call(corrector) # Check for unparenthesized args' preceding and trailing whitespaces. remove_unparenthesized_whitespace(corrector) # Avoid correcting to `lambdado` by inserting whitespace # if none exists before or after the lambda arguments. insert_separating_space(corrector) replace_selector(corrector) remove_arguments(corrector) replace_delimiters(corrector) insert_arguments(corrector) end
Private Instance Methods
arg_to_unparenthesized_call?()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 115 def arg_to_unparenthesized_call? current_node = block_node parent = current_node.parent if parent&.pair_type? current_node = parent.parent parent = current_node.parent end return false unless parent&.send_type? return false if parent.parenthesized_call? current_node.sibling_index > 1 end
arguments_begin_pos()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 99 def arguments_begin_pos arguments.loc.begin&.begin_pos end
arguments_end_pos()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 95 def arguments_end_pos arguments.loc.end&.end_pos end
block_begin()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 107 def block_begin block_node.loc.begin end
block_end()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 103 def block_end block_node.loc.end end
insert_arguments(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 56 def insert_arguments(corrector) return if arguments.empty? arg_str = " |#{lambda_arg_string}|" corrector.insert_after(block_node.loc.begin, arg_str) end
insert_separating_space(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 40 def insert_separating_space(corrector) return unless needs_separating_space? corrector.insert_before(block_begin, ' ') end
lambda_arg_string()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 85 def lambda_arg_string arguments.children.map(&:source).join(', ') end
needs_separating_space?()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 89 def needs_separating_space? block_begin.begin_pos == arguments_end_pos && selector_end.end_pos == arguments_begin_pos || block_begin.begin_pos == selector_end.end_pos end
remove_arguments(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 50 def remove_arguments(corrector) return if arguments.empty_and_without_delimiters? corrector.remove(arguments.source_range) end
remove_leading_whitespace(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 63 def remove_leading_whitespace(corrector) corrector.remove_preceding( arguments.source_range, arguments.source_range.begin_pos - block_node.send_node.source_range.end_pos ) end
remove_trailing_whitespace(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 71 def remove_trailing_whitespace(corrector) size = block_begin.begin_pos - arguments.source_range.end_pos - 1 corrector.remove_preceding(block_begin, size) if size.positive? end
remove_unparenthesized_whitespace(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 33 def remove_unparenthesized_whitespace(corrector) return if arguments.empty? || arguments.parenthesized_call? remove_leading_whitespace(corrector) remove_trailing_whitespace(corrector) end
replace_delimiters(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 76 def replace_delimiters(corrector) return if block_node.braces? || !arg_to_unparenthesized_call? corrector.insert_after(block_begin, ' ') unless separating_space? corrector.replace(block_begin, '{') corrector.replace(block_end, '}') end
replace_selector(corrector)
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 46 def replace_selector(corrector) corrector.replace(method.source_range, 'lambda') end
selector_end()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 111 def selector_end method.loc.selector.end end
separating_space?()
click to toggle source
# File lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb, line 131 def separating_space? block_begin.source_buffer.source[block_begin.begin_pos + 2].match(/\s/) end