Spec-Zone.ru › Ruby 3.4

класс SyntaxSuggest::Capture::BeforeAfterKeywordEnds

Родитель:
Объект

Показывает окружающие пары ключевых слов/конечных слов

Цель отображения этих дополнительных пар заключается в случаях неоднозначности, когда соответствует только одна видимая строка.

Например:

1  class Dog
2    def bark
4    def eat
5    end
6  end

В этом случае либо строке 2 может не хватать ‘end`, либо строка 4 была добавлена ошибочно (это случается).

Когда мы обнаруживаем вышеуказанную проблему, она отображается как проблема только в строке 2

2    def bark

Отображение пар ключевых слов «соседей» предоставляет дополнительный контекст:

2    def bark
4    def eat
5    end

Пример:

lines = BeforeAfterKeywordEnds.new(
  block: block,
  code_lines: code_lines
).call()

Публичные методы класса

new (code_lines:, block:)
Исходный код
# File lib/syntax_suggest/capture/before_after_keyword_ends.rb, line 41
def initialize(code_lines:, block:)
  @scanner = ScanHistory.new(code_lines: code_lines, block: block)
  @original_indent = block.current_indent
end

Публичные методы экземпляра

call ()
Исходный код
# File lib/syntax_suggest/capture/before_after_keyword_ends.rb, line 46
def call
  lines = []

  @scanner.scan(
    up: ->(line, kw_count, end_count) {
      next true if line.empty?
      break if line.indent < @original_indent
      next true if line.indent != @original_indent

      # If we're going up and have one complete kw/end pair, stop
      if kw_count != 0 && kw_count == end_count
        lines << line
        break
      end

      lines << line if line.is_kw? || line.is_end?
      true
    },
    down: ->(line, kw_count, end_count) {
      next true if line.empty?
      break if line.indent < @original_indent
      next true if line.indent != @original_indent

      # if we're going down and have one complete kw/end pair,stop
      if kw_count != 0 && kw_count == end_count
        lines << line
        break
      end

      lines << line if line.is_kw? || line.is_end?
      true
    }
  )
  @scanner.stash_changes

  lines
end

Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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