Sha256: 4db2807662f3c2e4b67d57e6623fece83737c2a94a44f550a4d0a0755ad47a2b
Contents?: true
Size: 1.09 KB
Versions: 1
Compression:
Stored size: 1.09 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.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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
slim_lint-0.8.1 | lib/slim_lint/filters/inject_line_numbers.rb |