All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gems.scss_lint-0.57.0.lib.scss_lint.linter.qualifying_element.rb Maven / Gradle / Ivy

There is a newer version: 3.7.2
Show newest version
module SCSSLint
  # Checks for element selectors qualifying id, classes, or attribute selectors.
  class Linter::QualifyingElement < Linter
    include LinterRegistry

    def visit_simple_sequence(seq)
      return unless seq_contains_sel_class?(seq, Sass::Selector::Element)
      check_id(seq) unless config['allow_element_with_id']
      check_class(seq) unless config['allow_element_with_class']
      check_attribute(seq) unless config['allow_element_with_attribute']
    end

  private

    # Checks if a simple sequence contains a
    # simple selector of a certain class.
    #
    # @param seq [Sass::Selector::SimpleSequence]
    # @param selector_class [Sass::Selector::Simple]
    # @returns [Boolean]
    def seq_contains_sel_class?(seq, selector_class)
      seq.members.any? do |simple|
        simple.is_a?(selector_class)
      end
    end

    def check_id(seq)
      return unless seq_contains_sel_class?(seq, Sass::Selector::Id)
      add_lint(seq.line, 'Avoid qualifying id selectors with an element.')
    end

    def check_class(seq)
      return unless seq_contains_sel_class?(seq, Sass::Selector::Class)
      add_lint(seq.line, 'Avoid qualifying class selectors with an element.')
    end

    def check_attribute(seq)
      return unless seq_contains_sel_class?(seq, Sass::Selector::Attribute)
      add_lint(seq.line, 'Avoid qualifying attribute selectors with an element.')
    end
  end
end




© 2015 - 2025 Weber Informatics LLC | Privacy Policy