@private
@private Locates target block with node information (semantics), which tokens don’t have.
@private Performs extraction of block body snippet using tokens, which cannot be done with node information.
rubocop should properly handle `Struct.new {}` as an inner class definition.
rubocop should properly handle `Struct.new {}` as an inner class definition.
Ideally we should properly handle indentations of multiline snippet, but it’s not implemented yet since because we use result of this method only when it’s a single line and implementing the logic introduces additional complexity.
# File lib/rspec/expectations/block_snippet_extractor.rb, line 25 def body_content_lines raw_body_lines.map(&:strip).reject(&:empty?) end
# File lib/rspec/expectations/block_snippet_extractor.rb, line 17 def initialize(proc, method_name) @proc = proc @method_name = method_name.to_s.freeze end
# File lib/rspec/expectations/block_snippet_extractor.rb, line 9 def self.try_extracting_single_line_body_of(proc, method_name) lines = new(proc, method_name).body_content_lines return nil unless lines.count == 1 lines.first rescue Error nil end