class SCSSLint::Linter::TrailingSemicolon

Checks for a trailing semicolon on statements within rule sets.

Public Instance Methods

visit_extend(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 6
def visit_extend(node)
  check_semicolon(node)
end
visit_import(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 30
def visit_import(node)
  # Ignore all but the last import for comma-separated @imports
  return if source_from_range(node.source_range) =~ /,\s*$/
  check_semicolon(node)
end
visit_mixin(node) { || ... } click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 22
def visit_mixin(node)
  if node.children.any?
    yield # Continue checking children
  else
    check_semicolon(node)
  end
end
visit_prop(node) { || ... } click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 14
def visit_prop(node)
  if node.children.any? { |n| n.is_a?(Sass::Tree::PropNode) }
    yield # Continue checking children
  else
    check_semicolon(node)
  end
end
visit_variable(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 10
def visit_variable(node)
  check_semicolon(node)
end

Private Instance Methods

check_semicolon(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 38
def check_semicolon(node)
  if has_space_before_semicolon?(node)
    line = node.source_range.start_pos.line
    add_lint line,
             'Declaration should not have a space before ' \
             'the terminating semicolon'
  elsif !ends_with_semicolon?(node)
    line = node.source_range.start_pos.line
    add_lint line, 'Declaration should be terminated by a semicolon'
  elsif ends_with_multiple_semicolons?(node)
    line = node.source_range.start_pos.line
    add_lint line, 'Declaration should be terminated by a single semicolon'
  end
end
ends_with_multiple_semicolons?(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 58
def ends_with_multiple_semicolons?(node)
  # Look one character past the end to see if there's another semicolon
  character_at(node.source_range.end_pos, 1) == ';'
end
ends_with_semicolon?(node) click to toggle source

Checks that the node is ended by a semicolon (with no whitespace)

# File lib/scss_lint/linter/trailing_semicolon.rb, line 54
def ends_with_semicolon?(node)
  source_from_range(node.source_range) =~ /;(\s*})?$/
end
has_space_before_semicolon?(node) click to toggle source
# File lib/scss_lint/linter/trailing_semicolon.rb, line 63
def has_space_before_semicolon?(node)
  source_from_range(node.source_range) =~ /\s;(\s*})?$/
end