class SCSSLint::Linter::BangFormat
Checks spacing of ! declarations, like !important and !default
Constants
- STOPPING_CHARACTERS
Public Instance Methods
visit_prop(node)
click to toggle source
# File lib/scss_lint/linter/bang_format.rb, line 8 def visit_prop(node) return unless source_from_range(node.source_range).include?('!') return unless check_spacing(node) before_qualifier = config['space_before_bang'] ? '' : 'not ' after_qualifier = config['space_after_bang'] ? '' : 'not ' add_lint(node, "! should #{before_qualifier}be preceeded by a space, " \ "and should #{after_qualifier}be followed by a space") end
Private Instance Methods
check_spacing(node)
click to toggle source
# File lib/scss_lint/linter/bang_format.rb, line 43 def check_spacing(node) range = node.value_source_range offset = find_bang_offset(range) return if character_at(range.end_pos, offset) != '!' is_before_wrong?(range, offset) || is_after_wrong?(range, offset) end
find_bang_offset(range)
click to toggle source
Start from the back and move towards the front so that any !important or !default !‘s will be found before quotation marks. Then we can stop at quotation marks to protect against linting !’s within strings (e.g. ‘content`)
# File lib/scss_lint/linter/bang_format.rb, line 25 def find_bang_offset(range) offset = 0 offset -= 1 until STOPPING_CHARACTERS.include?(character_at(range.end_pos, offset)) offset end
is_after_wrong?(range, offset)
click to toggle source
# File lib/scss_lint/linter/bang_format.rb, line 37 def is_after_wrong?(range, offset) after_expected = config['space_after_bang'] ? / / : /[^ ]/ after_actual = character_at(range.end_pos, offset + 1) (after_actual =~ after_expected).nil? end
is_before_wrong?(range, offset)
click to toggle source
# File lib/scss_lint/linter/bang_format.rb, line 31 def is_before_wrong?(range, offset) before_expected = config['space_before_bang'] ? / / : /[^ ]/ before_actual = character_at(range.end_pos, offset - 1) (before_actual =~ before_expected).nil? end