forked from sds/scss-lint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
variable_for_property.rb
38 lines (31 loc) · 1.18 KB
/
variable_for_property.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module SCSSLint
# Reports the use of literals for properties where variables are prefered.
class Linter::VariableForProperty < Linter
include LinterRegistry
IGNORED_VALUES = %w[currentColor inherit initial transparent].freeze
def visit_root(_node)
@properties = Set.new(config['properties'])
yield if @properties.any?
end
def visit_prop(node)
property_name = node.name.join
return unless @properties.include?(property_name)
return if ignored_value?(node.value)
return if node.children.first.is_a?(Sass::Script::Tree::Variable)
return if variable_property_with_important?(node.value)
add_lint(node, "Property #{property_name} should use " \
'a variable rather than a literal value')
end
private
def variable_property_with_important?(value)
value.is_a?(Sass::Script::Tree::ListLiteral) &&
value.children.length == 2 &&
value.children.first.is_a?(Sass::Script::Tree::Variable) &&
value.children.last.value.value == '!important'
end
def ignored_value?(value)
value.respond_to?(:value) &&
IGNORED_VALUES.include?(value.value.to_s)
end
end
end