Sha256: e582387cc6cfd58f0c20e6d7a99111ae4c09568cec3b6e7b71680c32fc0240e4

Contents?: true

Size: 1.61 KB

Versions: 11

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module SlimLint
  # Base implementation for all lint checks.
  #
  # @abstract
  class Linter
    # Include definitions for Sexp pattern-matching helpers.
    include SexpVisitor
    extend SexpVisitor::DSL

    # List of lints reported by this linter.
    #
    # @todo Remove once spec/support/shared_linter_context returns an array of
    #   lints for the subject instead of the linter itself.
    attr_reader :lints

    # Initializes a linter with the specified configuration.
    #
    # @param config [Hash] configuration for this linter
    def initialize(config)
      @config = config
      @lints = []
    end

    # Runs the linter against the given Slim document.
    #
    # @param document [SlimLint::Document]
    def run(document)
      @document = document
      @lints = []
      trigger_pattern_callbacks(document.sexp)
      @lints
    end

    # Returns the simple name for this linter.
    #
    # @return [String]
    def name
      self.class.name.split('::').last
    end

    private

    attr_reader :config, :document

    # Record a lint for reporting back to the user.
    #
    # @param node [#line] node to extract the line number from
    # @param message [String] error/warning to display to the user
    def report_lint(node, message)
      @lints << SlimLint::Lint.new(self, @document.file, node.line, message)
    end

    # Parse Ruby code into an abstract syntax tree.
    #
    # @param source [String] Ruby code to parse
    # @return [AST::Node]
    def parse_ruby(source)
      @ruby_parser ||= SlimLint::RubyParser.new
      @ruby_parser.parse(source)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
slim_lint-0.21.1 lib/slim_lint/linter.rb
slim_lint-0.21.0 lib/slim_lint/linter.rb
slim_lint-0.20.2 lib/slim_lint/linter.rb
slim_lint-0.20.1 lib/slim_lint/linter.rb
slim_lint-0.20.0 lib/slim_lint/linter.rb
slim_lint-0.19.0 lib/slim_lint/linter.rb
slim_lint-0.18.0 lib/slim_lint/linter.rb
slim_lint-0.17.1 lib/slim_lint/linter.rb
slim_lint-0.17.0 lib/slim_lint/linter.rb
slim_lint-0.16.1 lib/slim_lint/linter.rb
slim_lint-0.16.0 lib/slim_lint/linter.rb