Spec-Zone.ru › Ruby 3.4
  1. SyntaxSuggest::
  2. ParseBlocksFromIndentLine

класс SyntaxSuggest::ParseBlocksFromIndentLine

Родительский класс:
Object

Этот класс отвечает за создание начальных блоков кода, которые затем будут расширены.

При подборе блоков кода главная сложность заключается в том, чтобы случайно не захватить блок, содержащий только «end». Например:

def dog
  begonn # misspelled `begin`
  puts "bark"
  end
end

Будут сопоставлены следующие строки (снизу вверх):

1) end

2) puts "bark"
   end

3) begonn
   puts "bark"
   end

На этом этапе расширять блок больше некуда, поэтому этот внутренний код будет выдан как блок

Атрибуты

code_lines [R]

Общедоступные методы класса

new (code_lines:) Показать исходный код
# File lib/syntax_suggest/parse_blocks_from_indent_line.rb, line 32
def initialize(code_lines:)
  @code_lines = code_lines
end

Общедоступные методы экземпляра

each_neighbor_block (target_line) { |block| ... } Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API