类 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]

公共类方法

new(lines: []) 点击切换源代码
# 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

公共实例方法

<=>(other) 点击切换源代码

这用于边界排序,我们从最大的缩进到最小的缩进进行搜索。这允许我们用多个代码块填充一个数组,然后调用 `sort!`,而无需指定排序标准。

# 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
current_indent() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 67
def current_indent
  @current_indent ||= lines.select(&:not_empty?).map(&:indent).min || 0
end
delete() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 31
def delete
  @deleted = true
end
deleted?() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 35
def deleted?
  @deleted
end
hidden?() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 51
def hidden?
  @lines.all?(&:hidden?)
end
invalid?() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 71
def invalid?
  !valid?
end
is_end?() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 47
def is_end?
  to_s.strip == "end"
end
mark_invisible() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 43
def mark_invisible
  @lines.map(&:mark_invisible)
end
to_s() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 96
def to_s
  @lines.join
end
valid?() 点击切换源代码
# 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
visible_lines() 点击切换源代码
# File lib/syntax_suggest/code_block.rb, line 39
def visible_lines
  @lines.select(&:visible?).select(&:not_empty?)
end