module SlimLint::SexpVisitor

def captures

Returns:
  • (Hash, CaptureMap) -
def captures
  self.class.captures || {}
end

def on_start(*)

Returns:
  • (Symbol) - see {SexpVisitor::DSL.on_start}

Parameters:
  • sexp (SlimLint::Sexp) -- see {SexpVisitor::DSL.on_start}
def on_start(*)
  # Overidden by DSL.on_start
end

def patterns

Returns:
  • (Array) -
def patterns
  self.class.patterns || []
end

def traverse(sexp)

Parameters:
  • sexp (SlimLint::Sexp) --
def traverse(sexp)
  patterns.each do |pattern|
    next unless sexp.match?(pattern.sexp)
    result = method(pattern.callback_method_name).call(sexp)
    # Returning :stop indicates we should stop searching this Sexp
    # (i.e. stop descending this branch of depth-first search).
    # The `return` here is very intentional.
    return if result == :stop # rubocop:disable Lint/NonLocalExitFromIterator
  end
  # Continue traversing children by default (match blocks can return `:stop`
  # to not continue).
  traverse_children(sexp)
end

def traverse_children(sexp)

Parameters:
  • sexp (SlimLint::Sexp) --
def traverse_children(sexp)
  sexp.each do |nested_sexp|
    traverse nested_sexp if nested_sexp.is_a?(Sexp)
  end
end

def trigger_pattern_callbacks(sexp)

Parameters:
  • sexp (SlimLint::Sexp) --
def trigger_pattern_callbacks(sexp)
  return if on_start(sexp) == :stop
  traverse sexp
end