класс SyntaxSuggest::CodeBlock
Несколько строк образуют один CodeBlock
Исходный код состоит из нескольких CodeBlock.
Пример:
code_block.to_s # => # def foo # puts "foo" # end code_block.valid? # => true code_block.in_valid? # => false
Константы
- UNSET
Атрибуты
ends_at[R]
lines[R]
starts_at[R]
Публичные методы класса
# File lib/syntax_suggest/code_block.rb, line 23 def initialize(lines: []) @lines = Array(lines) @valid = UNSET @deleted = false @starts_at = @lines.first.number @ends_at = @lines.last.number end
Публичные методы экземпляра
# File lib/syntax_suggest/code_block.rb, line 59 def <=>(other) out = current_indent <=> other.current_indent return out if out != 0 # Stable sort starts_at <=> other.starts_at end
Используется для упорядочивания пограничных элементов; поиск ведется от наибольшего отступа к наименьшему. Это позволяет заполнить массив несколькими блоками кода, а затем вызвать ‘sort!` без указания критериев сортировки
# File lib/syntax_suggest/code_block.rb, line 67 def current_indent @current_indent ||= lines.select(&:not_empty?).map(&:indent).min || 0 end
# File lib/syntax_suggest/code_block.rb, line 31 def delete @deleted = true end
# File lib/syntax_suggest/code_block.rb, line 35 def deleted? @deleted end
# File lib/syntax_suggest/code_block.rb, line 71 def invalid? !valid? end
# File lib/syntax_suggest/code_block.rb, line 47 def is_end? to_s.strip == "end" end
# File lib/syntax_suggest/code_block.rb, line 43 def mark_invisible @lines.map(&:mark_invisible) end
# File lib/syntax_suggest/code_block.rb, line 96 def to_s @lines.join end
# File lib/syntax_suggest/code_block.rb, line 75
def valid?
if @valid == UNSET
# Performance optimization
#
# If all the lines were previously hidden
# and we expand to capture additional empty
# lines then the result cannot be invalid
#
# That means there's no reason to re-check all
# lines with the parser (which is expensive).
# Benchmark in commit message
@valid = if lines.all? { |l| l.hidden? || l.empty? }
true
else
SyntaxSuggest.valid?(lines.map(&:original).join)
end
else
@valid
end
end # File lib/syntax_suggest/code_block.rb, line 39 def visible_lines @lines.select(&:visible?).select(&:not_empty?) end
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.