Sha256: 87a7d4a8db2121537ef77b54352545c69ffe64a52460e21bd2d3f6d4cf9688dd
Contents?: true
Size: 1.1 KB
Versions: 10
Compression:
Stored size: 1.1 KB
Contents
module SlimLint::Filters # Traverses a Temple S-expression (that has already been converted to # {SlimLint::Sexp} instances) and annotates them with line numbers. # # This is a hack that allows us to access line information directly from the # S-expressions, which makes a lot of other tasks easier. class InjectLineNumbers < Temple::Filter # {Sexp} representing a newline. NEWLINE_SEXP = SlimLint::Sexp.new([:newline]) # Annotates the given {SlimLint::Sexp} with line number information. # # @param sexp [SlimLint::Sexp] # @return [SlimLint::Sexp] def call(sexp) @line_number = 1 traverse(sexp) sexp end private # Traverses an {Sexp}, annotating it with line numbers. # # @param sexp [SlimLint::Sexp] def traverse(sexp) sexp.line = @line_number case sexp when SlimLint::Atom @line_number += sexp.strip.count("\n") if sexp.respond_to?(:count) when NEWLINE_SEXP @line_number += 1 else sexp.each do |nested_sexp| traverse(nested_sexp) end end end end end
Version data entries
10 entries across 10 versions & 1 rubygems