Sha256: 06c8248efa970cd6822fa82bce724528e3b41238fc1af0429a26c705cd719114

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

module SCSSLint
  # Checks for a space after comment literals
  class Linter::SpaceAfterComment < Linter
    include LinterRegistry

    def visit_comment(node)
      source = source_from_range(node.source_range).strip
      check_method = "check_#{node.type}_comment"
      send(check_method, node, source)
    end

  private

    def check_silent_comment(node, source)
      source.split("\n").each_with_index do |line, index|
        next if config['allow_empty_comments'] && line.strip.length <= 2
        whitespace = whitespace_after_comment(line, 2)
        check_for_space(node.line + index, whitespace)
      end
    end

    def check_normal_comment(node, source)
      whitespace = whitespace_after_comment(source, 2)
      check_for_space(node, whitespace)
    end

    def check_loud_comment(node, source)
      whitespace = whitespace_after_comment(source, 3)
      check_for_space(node, whitespace)
    end

    def check_for_no_spaces(node_or_line, whitespace)
      return if whitespace == 0
      add_lint(node_or_line, 'Comment literal should not be followed by any spaces')
    end

    def check_for_one_space(node_or_line, whitespace)
      return if whitespace == 1
      add_lint(node_or_line, 'Comment literal should be followed by one space')
    end

    def check_for_at_least_one_space(node_or_line, whitespace)
      return if whitespace >= 1
      add_lint(node_or_line, 'Comment literal should be followed by at least one space')
    end

    def check_for_space(node_or_line, spaces)
      case config['style']
      when 'one_space'
        check_for_one_space(node_or_line, spaces)
      when 'no_space'
        check_for_no_spaces(node_or_line, spaces)
      when 'at_least_one_space'
        check_for_at_least_one_space(node_or_line, spaces)
      end
    end

    def whitespace_after_comment(source, offset)
      whitespace = 0

      while [' ', "\t"].include? source[offset]
        whitespace += 1
        offset += 1
      end

      whitespace
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
scss_lint-0.50.2 lib/scss_lint/linter/space_after_comment.rb
scss_lint-0.50.1 lib/scss_lint/linter/space_after_comment.rb
scss_lint-0.50.0 lib/scss_lint/linter/space_after_comment.rb