класс SyntaxSuggest::ParseBlocksFromIndentLine
Этот класс отвечает за создание начальных блоков кода, которые затем будут расширены.
При подборе блоков кода главная сложность заключается в том, чтобы случайно не захватить блок, содержащий только «end». Например:
def dog begonn # misspelled `begin` puts "bark" end end
Будут сопоставлены следующие строки (снизу вверх):
1) end 2) puts "bark" end 3) begonn puts "bark" end
На этом этапе расширять блок больше некуда, поэтому этот внутренний код будет выдан как блок
Атрибуты
Общедоступные методы класса
# File lib/syntax_suggest/parse_blocks_from_indent_line.rb, line 32 def initialize(code_lines:) @code_lines = code_lines end
Общедоступные методы экземпляра
# 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 Формирует блоки снизу вверх
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.