class SyntaxSuggest::BlockExpand
This class is responsible for taking a code block that exists at a far indentaion and then iteratively increasing the block so that it captures everything within the same indentation block.
def dog puts "bow" puts "wow" end
block = BlockExpand.new
(code_lines: code_lines)
.call(CodeBlock.new(lines: code_lines[1]))
puts block.to_s # => puts “bow”
puts "wow"
Once a code block has captured everything at a given indentation level then it will expand to capture surrounding indentation.
block = BlockExpand.new
(code_lines: code_lines)
.call(block)
block.to_s # => def dog
puts "bow" puts "wow" end
Public Class Methods
new(code_lines:)
click to toggle source
# File syntax_suggest/block_expand.rb, line 34 def initialize(code_lines:) @code_lines = code_lines end
Public Instance Methods
call(block)
click to toggle source
# File syntax_suggest/block_expand.rb, line 38 def call(block) if (next_block = expand_neighbors(block)) return next_block end expand_indent(block) end
expand_indent(block)
click to toggle source
# File syntax_suggest/block_expand.rb, line 46 def expand_indent(block) AroundBlockScan.new(code_lines: @code_lines, block: block) .skip(:hidden?) .stop_after_kw .scan_adjacent_indent .code_block end
expand_neighbors(block)
click to toggle source
# File syntax_suggest/block_expand.rb, line 54 def expand_neighbors(block) expanded_lines = AroundBlockScan.new(code_lines: @code_lines, block: block) .skip(:hidden?) .stop_after_kw .scan_neighbors .scan_while { |line| line.empty? } # Slurp up empties .lines if block.lines == expanded_lines nil else CodeBlock.new(lines: expanded_lines) end end
inspect()
click to toggle source
Managable rspec errors
# File syntax_suggest/block_expand.rb, line 70 def inspect "#<SyntaxSuggest::CodeBlock:0x0000123843lol >" end