class SyntaxSuggest::Capture::BeforeAfterKeywordEnds
Отображает окружающие пары ключевых слов/end
Цель отображения этих дополнительных пар заключается в устранении неоднозначности в случаях, когда сопоставляется только одна видимая строка.
Например:
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()
Публичные методы класса
# 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
Публичные методы экземпляра
# 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–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.