class SyntaxSuggest::ParseBlocksFromIndentLine
Diese Klasse ist dafür verantwortlich, initiale Codeblöcke zu generieren, die später erweitert werden.
Das größte Problem beim Vermuten von Codeblöcken ist, versehentlich einen zu erfassen, der nur ein "end" enthält. In diesem Beispiel
def dog begonn # misspelled `begin` puts "bark" end end
Die folgenden Zeilen würden abgeglichen werden (von unten nach oben)
1) end 2) puts "bark" end 3) begonn puts "bark" end
An diesem Punkt hat es keinen weiteren Ort zur Erweiterung, und es wird diesen inneren Code als Block liefern.
Attribute
Öffentliche Klassenmethoden
Source
# File lib/syntax_suggest/parse_blocks_from_indent_line.rb, line 32 def initialize(code_lines:) @code_lines = code_lines end
Öffentliche Instanzmethoden
Source
# File lib/syntax_suggest/parse_blocks_from_indent_line.rb, line 37 def each_neighbor_block(target_line) scan = AroundBlockScan.new(code_lines: code_lines, block: CodeBlock.new(lines: target_line)) .force_add_empty .force_add_hidden .scan_while { |line| line.indent >= target_line.indent } neighbors = scan.code_block.lines block = CodeBlock.new(lines: neighbors) if neighbors.length <= 2 || block.valid? yield block else until neighbors.empty? lines = [neighbors.pop] while (block = CodeBlock.new(lines: lines)) && block.invalid? && neighbors.any? lines.prepend neighbors.pop end yield block if block end end end
Erstellt Blöcke von unten nach oben