class SyntaxSuggest::Capture::BeforeAfterKeywordEnds
Zeigt umgebende kw/end-Paare an
Der Zweck der Anzeige dieser zusätzlichen Paare liegt in Fällen von Mehrdeutigkeit, wenn nur eine sichtbare Zeile übereinstimmt.
Zum Beispiel
1 class Dog 2 def bark 4 def eat 5 end 6 end
In diesem Fall könnte Zeile 2 ein fehlendes 'end' haben oder Zeile 4 war eine versehentlich hinzugefügte Zeile (das passiert).
Wenn wir das obige Problem erkennen, wird das Problem nur in Zeile 2 angezeigt
2 def bark
Das Anzeigen von "benachbarten" Schlüsselwortpaaren liefert zusätzlichen Kontext
2 def bark 4 def eat 5 end
Beispiel
lines = BeforeAfterKeywordEnds.new( block: block, code_lines: code_lines ).call()
Öffentliche Klassenmethoden
Source
# 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
Öffentliche Instanzmethoden
Source
# 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