class SyntaxSuggest::CodeBlock
Mehrere Zeilen bilden einen einzelnen CodeBlock
Quellcode besteht aus mehreren CodeBlocks.
Beispiel
code_block.to_s # => # def foo # puts "foo" # end code_block.valid? # => true code_block.in_valid? # => false
Constants
- NICHT FESTGELEGT
Attribute
Öffentliche Klassenmethoden
Source
# 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
Öffentliche Instanzmethoden
Source
# 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
Dies wird für die Reihenfolge der Grenze verwendet. Wir suchen von der größten Einrückung zur kleinsten. Dies ermöglicht es uns, ein Array mit mehreren Codeblöcken zu füllen und dann „sort!“ darauf aufzurufen, ohne die Sortierkriterien angeben zu müssen.
Source
# File lib/syntax_suggest/code_block.rb, line 67 def current_indent @current_indent ||= lines.select(&:not_empty?).map(&:indent).min || 0 end
Source
# File lib/syntax_suggest/code_block.rb, line 47 def is_end? to_s.strip == "end" end
Source
# File lib/syntax_suggest/code_block.rb, line 43 def mark_invisible @lines.map(&:mark_invisible) end
Source
# 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
Source
# File lib/syntax_suggest/code_block.rb, line 39 def visible_lines @lines.select(&:visible?).select(&:not_empty?) end