sass 3.1.5 → 3.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/sass/cache_stores/base.rb +4 -9
- data/lib/sass/engine.rb +2 -1
- data/lib/sass/environment.rb +11 -0
- data/lib/sass/script/funcall.rb +8 -0
- data/lib/sass/script/interpolation.rb +9 -0
- data/lib/sass/script/list.rb +7 -0
- data/lib/sass/script/literal.rb +5 -0
- data/lib/sass/script/node.rb +8 -0
- data/lib/sass/script/operation.rb +8 -0
- data/lib/sass/script/string_interpolation.rb +9 -0
- data/lib/sass/script/unary_operation.rb +7 -0
- data/lib/sass/script/variable.rb +5 -0
- data/lib/sass/tree/debug_node.rb +1 -6
- data/lib/sass/tree/each_node.rb +1 -7
- data/lib/sass/tree/extend_node.rb +1 -1
- data/lib/sass/tree/for_node.rb +2 -7
- data/lib/sass/tree/function_node.rb +0 -5
- data/lib/sass/tree/if_node.rb +1 -19
- data/lib/sass/tree/mixin_def_node.rb +1 -6
- data/lib/sass/tree/mixin_node.rb +2 -7
- data/lib/sass/tree/node.rb +2 -18
- data/lib/sass/tree/prop_node.rb +0 -5
- data/lib/sass/tree/return_node.rb +1 -6
- data/lib/sass/tree/rule_node.rb +7 -5
- data/lib/sass/tree/variable_node.rb +1 -7
- data/lib/sass/tree/visitors/deep_copy.rb +87 -0
- data/lib/sass/tree/visitors/perform.rb +8 -7
- data/lib/sass/tree/visitors/set_options.rb +97 -0
- data/lib/sass/tree/visitors/to_css.rb +5 -1
- data/lib/sass/tree/warn_node.rb +1 -7
- data/lib/sass/tree/while_node.rb +1 -7
- data/test/sass/cache_test.rb +15 -0
- data/test/sass/engine_test.rb +25 -8
- data/test/sass/scss/scss_test.rb +8 -0
- metadata +201 -199
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.6
|
@@ -42,20 +42,15 @@ module Sass
|
|
42
42
|
raise "#{self.class} must implement #_retrieve."
|
43
43
|
end
|
44
44
|
|
45
|
-
# Store
|
45
|
+
# Store a {Sass::Tree::RootNode}.
|
46
46
|
#
|
47
47
|
# @param key [String] The key to store it under.
|
48
48
|
# @param sha [String] The checksum for the contents that are being stored.
|
49
49
|
# @param obj [Object] The object to cache.
|
50
|
-
def store(key, sha,
|
51
|
-
|
52
|
-
begin
|
53
|
-
_store(key, Sass::VERSION, sha, Marshal.dump(obj))
|
54
|
-
ensure
|
55
|
-
obj.after_sass_cache_store(temp) if obj.respond_to?(:after_sass_cache_store)
|
56
|
-
end
|
50
|
+
def store(key, sha, root)
|
51
|
+
_store(key, Sass::VERSION, sha, Marshal.dump(root))
|
57
52
|
rescue TypeError, LoadError => e
|
58
|
-
Sass::Util.sass_warn "Warning. Error encountered while saving
|
53
|
+
Sass::Util.sass_warn "Warning. Error encountered while saving cache #{path_to(key)}: #{e}"
|
59
54
|
end
|
60
55
|
|
61
56
|
# Retrieve a {Sass::Tree::RootNode}.
|
data/lib/sass/engine.rb
CHANGED
@@ -28,6 +28,8 @@ require 'sass/tree/visitors/perform'
|
|
28
28
|
require 'sass/tree/visitors/cssize'
|
29
29
|
require 'sass/tree/visitors/convert'
|
30
30
|
require 'sass/tree/visitors/to_css'
|
31
|
+
require 'sass/tree/visitors/deep_copy'
|
32
|
+
require 'sass/tree/visitors/set_options'
|
31
33
|
require 'sass/tree/visitors/check_nesting'
|
32
34
|
require 'sass/selector'
|
33
35
|
require 'sass/environment'
|
@@ -307,7 +309,6 @@ module Sass
|
|
307
309
|
sha = Digest::SHA1.hexdigest(@template)
|
308
310
|
|
309
311
|
if root = @options[:cache_store].retrieve(key, sha)
|
310
|
-
@options = root.options.merge(@options)
|
311
312
|
root.options = @options
|
312
313
|
return root
|
313
314
|
end
|
data/lib/sass/environment.rb
CHANGED
@@ -93,6 +93,17 @@ module Sass
|
|
93
93
|
@mixins_in_use ||= @parent.mixins_in_use
|
94
94
|
end
|
95
95
|
|
96
|
+
def stack_trace
|
97
|
+
trace = []
|
98
|
+
stack.reverse.each_with_index do |entry, i|
|
99
|
+
msg = "#{i == 0 ? "on" : "from"} line #{entry[:line]}"
|
100
|
+
msg << " of #{entry[:filename] || "an unknown file"}"
|
101
|
+
msg << ", in `#{entry[:mixin]}'" if entry[:mixin]
|
102
|
+
trace << msg
|
103
|
+
end
|
104
|
+
trace
|
105
|
+
end
|
106
|
+
|
96
107
|
private
|
97
108
|
|
98
109
|
def parent_options
|
data/lib/sass/script/funcall.rb
CHANGED
@@ -57,6 +57,14 @@ module Sass
|
|
57
57
|
@args + @keywords.values
|
58
58
|
end
|
59
59
|
|
60
|
+
# @see Node#deep_copy
|
61
|
+
def deep_copy
|
62
|
+
node = dup
|
63
|
+
node.instance_variable_set('@args', args.map {|a| a.deep_copy})
|
64
|
+
node.instance_variable_set('@keywords', Hash[keywords.map {|k, v| [k, v.deep_copy]}])
|
65
|
+
node
|
66
|
+
end
|
67
|
+
|
60
68
|
protected
|
61
69
|
|
62
70
|
# Evaluates the function call.
|
@@ -50,6 +50,15 @@ module Sass::Script
|
|
50
50
|
[@before, @mid, @after].compact
|
51
51
|
end
|
52
52
|
|
53
|
+
# @see Node#deep_copy
|
54
|
+
def deep_copy
|
55
|
+
node = dup
|
56
|
+
node.instance_variable_set('@before', @before.deep_copy) if @before
|
57
|
+
node.instance_variable_set('@mid', @mid.deep_copy)
|
58
|
+
node.instance_variable_set('@after', @after.deep_copy) if @after
|
59
|
+
node
|
60
|
+
end
|
61
|
+
|
53
62
|
protected
|
54
63
|
|
55
64
|
# Evaluates the interpolation.
|
data/lib/sass/script/list.rb
CHANGED
@@ -24,6 +24,13 @@ module Sass::Script
|
|
24
24
|
@separator = separator
|
25
25
|
end
|
26
26
|
|
27
|
+
# @see Node#deep_copy
|
28
|
+
def deep_copy
|
29
|
+
node = dup
|
30
|
+
node.instance_variable_set('@value', value.map {|c| c.deep_copy})
|
31
|
+
node
|
32
|
+
end
|
33
|
+
|
27
34
|
# @see Node#eq
|
28
35
|
def eq(other)
|
29
36
|
Sass::Script::Bool.new(
|
data/lib/sass/script/literal.rb
CHANGED
data/lib/sass/script/node.rb
CHANGED
@@ -57,6 +57,14 @@ module Sass::Script
|
|
57
57
|
Sass::Util.abstract(self)
|
58
58
|
end
|
59
59
|
|
60
|
+
# Returns a deep clone of this node.
|
61
|
+
# The child nodes are cloned, but options are not.
|
62
|
+
#
|
63
|
+
# @return [Node]
|
64
|
+
def deep_copy
|
65
|
+
Sass::Util.abstract(self)
|
66
|
+
end
|
67
|
+
|
60
68
|
protected
|
61
69
|
|
62
70
|
# Converts underscores to dashes if the :dasherize option is set.
|
@@ -55,6 +55,14 @@ module Sass::Script
|
|
55
55
|
[@operand1, @operand2]
|
56
56
|
end
|
57
57
|
|
58
|
+
# @see Node#deep_copy
|
59
|
+
def deep_copy
|
60
|
+
node = dup
|
61
|
+
node.instance_variable_set('@operand1', @operand1.deep_copy)
|
62
|
+
node.instance_variable_set('@operand2', @operand2.deep_copy)
|
63
|
+
node
|
64
|
+
end
|
65
|
+
|
58
66
|
protected
|
59
67
|
|
60
68
|
# Evaluates the operation.
|
@@ -60,6 +60,15 @@ module Sass::Script
|
|
60
60
|
[@before, @mid, @after].compact
|
61
61
|
end
|
62
62
|
|
63
|
+
# @see Node#deep_copy
|
64
|
+
def deep_copy
|
65
|
+
node = dup
|
66
|
+
node.instance_variable_set('@before', @before.deep_copy) if @before
|
67
|
+
node.instance_variable_set('@mid', @mid.deep_copy)
|
68
|
+
node.instance_variable_set('@after', @after.deep_copy) if @after
|
69
|
+
node
|
70
|
+
end
|
71
|
+
|
63
72
|
protected
|
64
73
|
|
65
74
|
# Evaluates the interpolation.
|
data/lib/sass/script/variable.rb
CHANGED
data/lib/sass/tree/debug_node.rb
CHANGED
@@ -6,12 +6,7 @@ module Sass
|
|
6
6
|
class DebugNode < Node
|
7
7
|
# The expression to print.
|
8
8
|
# @return [Script::Node]
|
9
|
-
|
10
|
-
|
11
|
-
# Returns sub nodes that are not tree children.
|
12
|
-
def subnodes
|
13
|
-
Array(expr)
|
14
|
-
end
|
9
|
+
attr_accessor :expr
|
15
10
|
|
16
11
|
# @param expr [Script::Node] The expression to print
|
17
12
|
def initialize(expr)
|
data/lib/sass/tree/each_node.rb
CHANGED
@@ -11,7 +11,7 @@ module Sass::Tree
|
|
11
11
|
|
12
12
|
# The parse tree for the list.
|
13
13
|
# @param [Script::Node]
|
14
|
-
|
14
|
+
attr_accessor :list
|
15
15
|
|
16
16
|
# @param var [String] The name of the loop variable
|
17
17
|
# @param list [Script::Node] The parse tree for the list
|
@@ -20,11 +20,5 @@ module Sass::Tree
|
|
20
20
|
@list = list
|
21
21
|
super()
|
22
22
|
end
|
23
|
-
|
24
|
-
# Returns sub nodes that are not tree children.
|
25
|
-
def subnodes
|
26
|
-
Array(list)
|
27
|
-
end
|
28
|
-
|
29
23
|
end
|
30
24
|
end
|
data/lib/sass/tree/for_node.rb
CHANGED
@@ -11,11 +11,11 @@ module Sass::Tree
|
|
11
11
|
|
12
12
|
# The parse tree for the initial expression.
|
13
13
|
# @return [Script::Node]
|
14
|
-
|
14
|
+
attr_accessor :from
|
15
15
|
|
16
16
|
# The parse tree for the final expression.
|
17
17
|
# @return [Script::Node]
|
18
|
-
|
18
|
+
attr_accessor :to
|
19
19
|
|
20
20
|
# Whether to include `to` in the loop or stop just before.
|
21
21
|
# @return [Boolean]
|
@@ -32,10 +32,5 @@ module Sass::Tree
|
|
32
32
|
@exclusive = exclusive
|
33
33
|
super()
|
34
34
|
end
|
35
|
-
|
36
|
-
# Returns sub nodes that are not tree children.
|
37
|
-
def subnodes
|
38
|
-
Array(from) + Array(to)
|
39
|
-
end
|
40
35
|
end
|
41
36
|
end
|
data/lib/sass/tree/if_node.rb
CHANGED
@@ -13,7 +13,7 @@ module Sass::Tree
|
|
13
13
|
# If this is nil, this is an `@else` node, not an `@else if`.
|
14
14
|
#
|
15
15
|
# @return [Script::Expr]
|
16
|
-
|
16
|
+
attr_accessor :expr
|
17
17
|
|
18
18
|
# The next {IfNode} in the if-else list, or `nil`.
|
19
19
|
#
|
@@ -35,12 +35,6 @@ module Sass::Tree
|
|
35
35
|
@last_else = node
|
36
36
|
end
|
37
37
|
|
38
|
-
# @see Node#options=
|
39
|
-
def options=(options)
|
40
|
-
super
|
41
|
-
self.else.options = options if self.else
|
42
|
-
end
|
43
|
-
|
44
38
|
def _dump(f)
|
45
39
|
Marshal.dump([self.expr, self.else, self.children])
|
46
40
|
end
|
@@ -54,17 +48,5 @@ module Sass::Tree
|
|
54
48
|
node.else ? node.else.instance_variable_get('@last_else') : node)
|
55
49
|
node
|
56
50
|
end
|
57
|
-
|
58
|
-
# @see Node#deep_copy
|
59
|
-
def deep_copy
|
60
|
-
node = super
|
61
|
-
node.else = self.else.deep_copy if self.else
|
62
|
-
node
|
63
|
-
end
|
64
|
-
|
65
|
-
# Returns sub nodes that are not tree children.
|
66
|
-
def subnodes
|
67
|
-
Array(expr) + Array(self.else)
|
68
|
-
end
|
69
51
|
end
|
70
52
|
end
|
@@ -13,7 +13,7 @@ module Sass
|
|
13
13
|
# and the parse tree for the default value of the argument.
|
14
14
|
#
|
15
15
|
# @return [Array<(Script::Node, Script::Node)>]
|
16
|
-
|
16
|
+
attr_accessor :args
|
17
17
|
|
18
18
|
# @param name [String] The mixin name
|
19
19
|
# @param args [Array<(Script::Node, Script::Node)>] See \{#args}
|
@@ -22,11 +22,6 @@ module Sass
|
|
22
22
|
@args = args
|
23
23
|
super()
|
24
24
|
end
|
25
|
-
|
26
|
-
# Returns sub nodes that are not tree children.
|
27
|
-
def subnodes
|
28
|
-
Array(args)
|
29
|
-
end
|
30
25
|
end
|
31
26
|
end
|
32
27
|
end
|
data/lib/sass/tree/mixin_node.rb
CHANGED
@@ -13,11 +13,11 @@ module Sass::Tree
|
|
13
13
|
|
14
14
|
# The arguments to the mixin.
|
15
15
|
# @return [Array<Script::Node>]
|
16
|
-
|
16
|
+
attr_accessor :args
|
17
17
|
|
18
18
|
# A hash from keyword argument names to values.
|
19
19
|
# @return [{String => Script::Node}]
|
20
|
-
|
20
|
+
attr_accessor :keywords
|
21
21
|
|
22
22
|
# @param name [String] The name of the mixin
|
23
23
|
# @param args [Array<Script::Node>] See \{#args}
|
@@ -28,10 +28,5 @@ module Sass::Tree
|
|
28
28
|
@keywords = keywords
|
29
29
|
super()
|
30
30
|
end
|
31
|
-
|
32
|
-
# Returns sub nodes that are not tree children.
|
33
|
-
def subnodes
|
34
|
-
Array(args) + (keywords||{}).values
|
35
|
-
end
|
36
31
|
end
|
37
32
|
end
|
data/lib/sass/tree/node.rb
CHANGED
@@ -65,11 +65,7 @@ module Sass
|
|
65
65
|
# @param options [{Symbol => Object}] The options
|
66
66
|
# @see #options
|
67
67
|
def options=(options)
|
68
|
-
|
69
|
-
if respond_to?(:subnodes)
|
70
|
-
subnodes.each {|n| n.options = options if n.respond_to?(:options=)}
|
71
|
-
end
|
72
|
-
@options = options
|
68
|
+
Sass::Tree::Visitors::SetOptions.visit(self, options)
|
73
69
|
end
|
74
70
|
|
75
71
|
# @private
|
@@ -188,19 +184,7 @@ module Sass
|
|
188
184
|
#
|
189
185
|
# @return [Node]
|
190
186
|
def deep_copy
|
191
|
-
|
192
|
-
node.children = children.map {|c| c.deep_copy}
|
193
|
-
node
|
194
|
-
end
|
195
|
-
|
196
|
-
def before_sass_cache_store
|
197
|
-
o = self.options
|
198
|
-
self.options = {}
|
199
|
-
return o
|
200
|
-
end
|
201
|
-
|
202
|
-
def after_sass_cache_store(o)
|
203
|
-
self.options = o
|
187
|
+
Sass::Tree::Visitors::DeepCopy.visit(self)
|
204
188
|
end
|
205
189
|
|
206
190
|
protected
|
data/lib/sass/tree/prop_node.rb
CHANGED
@@ -55,11 +55,6 @@ module Sass::Tree
|
|
55
55
|
super()
|
56
56
|
end
|
57
57
|
|
58
|
-
# Returns sub nodes that are not tree children.
|
59
|
-
def subnodes
|
60
|
-
Array(name).select{|n| n.is_a?(Sass::Script::Node)} + [value]
|
61
|
-
end
|
62
|
-
|
63
58
|
# Compares the names and values of two properties.
|
64
59
|
#
|
65
60
|
# @param other [Object] The object to compare with
|
@@ -6,18 +6,13 @@ module Sass
|
|
6
6
|
class ReturnNode < Node
|
7
7
|
# The expression to return.
|
8
8
|
# @type [Script::Node]
|
9
|
-
|
9
|
+
attr_accessor :expr
|
10
10
|
|
11
11
|
# @param expr [Script::Node] The expression to return
|
12
12
|
def initialize(expr)
|
13
13
|
@expr = expr
|
14
14
|
super()
|
15
15
|
end
|
16
|
-
|
17
|
-
# Returns sub nodes that are not tree children.
|
18
|
-
def subnodes
|
19
|
-
Array(expr)
|
20
|
-
end
|
21
16
|
end
|
22
17
|
end
|
23
18
|
end
|
data/lib/sass/tree/rule_node.rb
CHANGED
@@ -50,6 +50,13 @@ module Sass::Tree
|
|
50
50
|
# @return [Boolean]
|
51
51
|
attr_accessor :group_end
|
52
52
|
|
53
|
+
# The stack trace.
|
54
|
+
# This is only readable in a CSS tree as it is written during the perform step
|
55
|
+
# and only when the :trace_selectors option is set.
|
56
|
+
#
|
57
|
+
# @return [Array<String>]
|
58
|
+
attr_accessor :stack_trace
|
59
|
+
|
53
60
|
# @param rule [Array<String, Sass::Script::Node>]
|
54
61
|
# The CSS rule. See \{#rule}
|
55
62
|
def initialize(rule)
|
@@ -115,11 +122,6 @@ module Sass::Tree
|
|
115
122
|
:line => self.line}
|
116
123
|
end
|
117
124
|
|
118
|
-
# Returns sub nodes that are not tree children.
|
119
|
-
def subnodes
|
120
|
-
rule.select{|r| r.is_a?(Sass::Script::Node)}
|
121
|
-
end
|
122
|
-
|
123
125
|
private
|
124
126
|
|
125
127
|
def try_to_parse_non_interpolated_rules
|