sass 3.4.0 → 3.4.25
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.
- checksums.yaml +4 -4
- data/.yardopts +3 -1
- data/CODE_OF_CONDUCT.md +10 -0
- data/CONTRIBUTING.md +148 -0
- data/MIT-LICENSE +1 -1
- data/README.md +26 -20
- data/Rakefile +103 -20
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/extra/sass-spec-ref.sh +32 -0
- data/extra/update_watch.rb +1 -1
- data/lib/sass/cache_stores/filesystem.rb +7 -7
- data/lib/sass/cache_stores/memory.rb +4 -5
- data/lib/sass/callbacks.rb +2 -2
- data/lib/sass/css.rb +11 -10
- data/lib/sass/deprecation.rb +55 -0
- data/lib/sass/engine.rb +83 -38
- data/lib/sass/environment.rb +26 -2
- data/lib/sass/error.rb +12 -12
- data/lib/sass/exec/base.rb +15 -3
- data/lib/sass/exec/sass_convert.rb +34 -15
- data/lib/sass/exec/sass_scss.rb +23 -7
- data/lib/sass/features.rb +2 -2
- data/lib/sass/importers/base.rb +1 -1
- data/lib/sass/importers/deprecated_path.rb +51 -0
- data/lib/sass/importers/filesystem.rb +24 -16
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +8 -2
- data/lib/sass/logger/delayed.rb +50 -0
- data/lib/sass/logger.rb +8 -3
- data/lib/sass/plugin/compiler.rb +42 -25
- data/lib/sass/plugin/configuration.rb +38 -22
- data/lib/sass/plugin/merb.rb +2 -2
- data/lib/sass/plugin/rack.rb +3 -3
- data/lib/sass/plugin/rails.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/plugin.rb +3 -2
- data/lib/sass/script/css_parser.rb +2 -3
- data/lib/sass/script/css_variable_warning.rb +52 -0
- data/lib/sass/script/functions.rb +140 -73
- data/lib/sass/script/lexer.rb +37 -22
- data/lib/sass/script/parser.rb +235 -40
- data/lib/sass/script/tree/funcall.rb +12 -5
- data/lib/sass/script/tree/interpolation.rb +109 -4
- data/lib/sass/script/tree/list_literal.rb +31 -4
- data/lib/sass/script/tree/literal.rb +4 -0
- data/lib/sass/script/tree/node.rb +21 -3
- data/lib/sass/script/tree/operation.rb +54 -1
- data/lib/sass/script/tree/string_interpolation.rb +58 -37
- data/lib/sass/script/tree/variable.rb +1 -1
- data/lib/sass/script/value/base.rb +10 -9
- data/lib/sass/script/value/color.rb +42 -24
- data/lib/sass/script/value/helpers.rb +16 -6
- data/lib/sass/script/value/map.rb +1 -1
- data/lib/sass/script/value/number.rb +52 -19
- data/lib/sass/script/value/string.rb +46 -5
- data/lib/sass/script.rb +3 -3
- data/lib/sass/scss/css_parser.rb +16 -2
- data/lib/sass/scss/parser.rb +120 -75
- data/lib/sass/scss/rx.rb +9 -10
- data/lib/sass/scss/static_parser.rb +19 -14
- data/lib/sass/scss.rb +0 -2
- data/lib/sass/selector/abstract_sequence.rb +8 -6
- data/lib/sass/selector/comma_sequence.rb +25 -9
- data/lib/sass/selector/pseudo.rb +45 -35
- data/lib/sass/selector/sequence.rb +54 -18
- data/lib/sass/selector/simple.rb +11 -11
- data/lib/sass/selector/simple_sequence.rb +34 -15
- data/lib/sass/selector.rb +7 -10
- data/lib/sass/shared.rb +1 -1
- data/lib/sass/source/map.rb +7 -4
- data/lib/sass/source/position.rb +4 -4
- data/lib/sass/stack.rb +2 -2
- data/lib/sass/supports.rb +8 -10
- data/lib/sass/tree/comment_node.rb +1 -1
- data/lib/sass/tree/css_import_node.rb +9 -1
- data/lib/sass/tree/function_node.rb +8 -3
- data/lib/sass/tree/import_node.rb +6 -5
- data/lib/sass/tree/node.rb +5 -3
- data/lib/sass/tree/prop_node.rb +5 -6
- data/lib/sass/tree/rule_node.rb +14 -4
- data/lib/sass/tree/visitors/check_nesting.rb +18 -22
- data/lib/sass/tree/visitors/convert.rb +43 -26
- data/lib/sass/tree/visitors/cssize.rb +5 -1
- data/lib/sass/tree/visitors/deep_copy.rb +1 -1
- data/lib/sass/tree/visitors/extend.rb +15 -13
- data/lib/sass/tree/visitors/perform.rb +42 -17
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +58 -30
- data/lib/sass/util/multibyte_string_scanner.rb +0 -2
- data/lib/sass/util/normalized_map.rb +0 -1
- data/lib/sass/util/subset_map.rb +1 -2
- data/lib/sass/util.rb +125 -68
- data/lib/sass/version.rb +2 -2
- data/lib/sass.rb +10 -3
- data/test/sass/compiler_test.rb +6 -2
- data/test/sass/conversion_test.rb +187 -53
- data/test/sass/css2sass_test.rb +50 -1
- data/test/sass/css_variable_test.rb +132 -0
- data/test/sass/engine_test.rb +207 -61
- data/test/sass/exec_test.rb +10 -0
- data/test/sass/extend_test.rb +101 -29
- data/test/sass/functions_test.rb +60 -9
- data/test/sass/importer_test.rb +9 -0
- data/test/sass/more_templates/more1.sass +10 -10
- data/test/sass/more_templates/more_import.sass +2 -2
- data/test/sass/plugin_test.rb +10 -8
- data/test/sass/results/script.css +3 -3
- data/test/sass/script_conversion_test.rb +58 -29
- data/test/sass/script_test.rb +430 -53
- data/test/sass/scss/css_test.rb +73 -7
- data/test/sass/scss/rx_test.rb +4 -0
- data/test/sass/scss/scss_test.rb +309 -4
- data/test/sass/source_map_test.rb +152 -74
- data/test/sass/superselector_test.rb +19 -0
- data/test/sass/templates/_partial.sass +1 -1
- data/test/sass/templates/basic.sass +10 -10
- data/test/sass/templates/bork1.sass +1 -1
- data/test/sass/templates/bork5.sass +1 -1
- data/test/sass/templates/compact.sass +10 -10
- data/test/sass/templates/complex.sass +187 -187
- data/test/sass/templates/compressed.sass +10 -10
- data/test/sass/templates/expanded.sass +10 -10
- data/test/sass/templates/import.sass +2 -2
- data/test/sass/templates/importee.sass +3 -3
- data/test/sass/templates/mixins.sass +22 -22
- data/test/sass/templates/multiline.sass +4 -4
- data/test/sass/templates/nested.sass +13 -13
- data/test/sass/templates/parent_ref.sass +12 -12
- data/test/sass/templates/script.sass +70 -70
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
- data/test/sass/templates/subdir/subdir.sass +3 -3
- data/test/sass/templates/units.sass +10 -10
- data/test/sass/util/multibyte_string_scanner_test.rb +10 -2
- data/test/sass/util_test.rb +15 -44
- data/test/sass-spec.yml +3 -0
- data/test/test_helper.rb +5 -4
- metadata +302 -295
- data/CONTRIBUTING +0 -3
- data/lib/sass/scss/script_lexer.rb +0 -15
- data/lib/sass/scss/script_parser.rb +0 -25
data/test/sass/css2sass_test.rb
CHANGED
@@ -14,7 +14,7 @@ CSS
|
|
14
14
|
h1
|
15
15
|
color: red
|
16
16
|
SASS
|
17
|
-
assert_equal(<<SASS, css2sass(css, :old => true))
|
17
|
+
silence_warnings {assert_equal(<<SASS, css2sass(css, :old => true))}
|
18
18
|
h1
|
19
19
|
:color red
|
20
20
|
SASS
|
@@ -24,10 +24,13 @@ SASS
|
|
24
24
|
assert_equal(<<SASS, css2sass(<<CSS))
|
25
25
|
li
|
26
26
|
display: none
|
27
|
+
|
27
28
|
a
|
28
29
|
text-decoration: none
|
30
|
+
|
29
31
|
span
|
30
32
|
color: yellow
|
33
|
+
|
31
34
|
&:hover
|
32
35
|
text-decoration: underline
|
33
36
|
SASS
|
@@ -117,6 +120,7 @@ span.turkey
|
|
117
120
|
|
118
121
|
#overhere
|
119
122
|
bored: sorta
|
123
|
+
|
120
124
|
/* it's for a good
|
121
125
|
* cause
|
122
126
|
better_than: thread_pools
|
@@ -168,12 +172,16 @@ CSS
|
|
168
172
|
assert_equal(<<SASS, css2sass(<<CSS))
|
169
173
|
hello
|
170
174
|
parent: true
|
175
|
+
|
171
176
|
there
|
172
177
|
parent: false
|
178
|
+
|
173
179
|
who
|
174
180
|
hoo: false
|
181
|
+
|
175
182
|
why
|
176
183
|
y: true
|
184
|
+
|
177
185
|
when
|
178
186
|
wen: nao
|
179
187
|
|
@@ -229,6 +237,7 @@ CSS
|
|
229
237
|
assert_equal(<<SASS, css2sass(<<CSS))
|
230
238
|
\\:focus
|
231
239
|
a: b
|
240
|
+
|
232
241
|
\\:foo
|
233
242
|
bar: baz
|
234
243
|
SASS
|
@@ -243,14 +252,17 @@ CSS
|
|
243
252
|
.bar!
|
244
253
|
.baz
|
245
254
|
a: b
|
255
|
+
|
246
256
|
.bip
|
247
257
|
c: d
|
258
|
+
|
248
259
|
.bar .bonk
|
249
260
|
e: f
|
250
261
|
|
251
262
|
.flip!
|
252
263
|
&.bar
|
253
264
|
a: b
|
265
|
+
|
254
266
|
&.baz
|
255
267
|
c: d
|
256
268
|
SASS
|
@@ -263,17 +275,51 @@ SASS
|
|
263
275
|
CSS
|
264
276
|
end
|
265
277
|
|
278
|
+
def test_keyframes
|
279
|
+
assert_equal(<<SASS, css2sass(<<CSS))
|
280
|
+
@keyframes dash
|
281
|
+
from
|
282
|
+
stroke-dasharray: 1,200
|
283
|
+
stroke-dashoffset: 0
|
284
|
+
|
285
|
+
50%
|
286
|
+
stroke-dasharray: 89,200
|
287
|
+
stroke-dashoffset: -35
|
288
|
+
|
289
|
+
to
|
290
|
+
stroke-dasharray: 89,200
|
291
|
+
stroke-dashoffset: -124
|
292
|
+
SASS
|
293
|
+
@keyframes dash {
|
294
|
+
from {
|
295
|
+
stroke-dasharray: 1,200;
|
296
|
+
stroke-dashoffset: 0;
|
297
|
+
}
|
298
|
+
50% {
|
299
|
+
stroke-dasharray: 89,200;
|
300
|
+
stroke-dashoffset: -35;
|
301
|
+
}
|
302
|
+
to {
|
303
|
+
stroke-dasharray: 89,200;
|
304
|
+
stroke-dashoffset: -124;
|
305
|
+
}
|
306
|
+
}
|
307
|
+
CSS
|
308
|
+
end
|
309
|
+
|
266
310
|
# Regressions
|
267
311
|
|
268
312
|
def test_nesting_with_matching_property
|
269
313
|
assert_equal(<<SASS, css2sass(<<CSS))
|
270
314
|
ul
|
271
315
|
width: 10px
|
316
|
+
|
272
317
|
div
|
273
318
|
width: 20px
|
274
319
|
|
275
320
|
article
|
276
321
|
width: 10px
|
322
|
+
|
277
323
|
p
|
278
324
|
width: 20px
|
279
325
|
SASS
|
@@ -296,6 +342,7 @@ CSS
|
|
296
342
|
assert_equal(<<SASS, css2sass(<<CSS))
|
297
343
|
a
|
298
344
|
color: red
|
345
|
+
|
299
346
|
> b
|
300
347
|
SASS
|
301
348
|
a {color: red}
|
@@ -346,6 +393,7 @@ CSS
|
|
346
393
|
.foo >
|
347
394
|
.bar
|
348
395
|
a: b
|
396
|
+
|
349
397
|
.baz
|
350
398
|
c: d
|
351
399
|
SASS
|
@@ -357,6 +405,7 @@ CSS
|
|
357
405
|
.foo
|
358
406
|
&::bar
|
359
407
|
a: b
|
408
|
+
|
360
409
|
&::baz
|
361
410
|
c: d
|
362
411
|
SASS
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
4
|
+
require 'sass/engine'
|
5
|
+
|
6
|
+
class CssVariableTest < MiniTest::Test
|
7
|
+
def test_variable_warning_for_operators
|
8
|
+
resolve_with_variable_warning("1 == 2")
|
9
|
+
resolve_with_variable_warning("1 != 2")
|
10
|
+
resolve_with_variable_warning("1 < 2")
|
11
|
+
resolve_with_variable_warning("1 <= 2")
|
12
|
+
resolve_with_variable_warning("1 > 2")
|
13
|
+
resolve_with_variable_warning("1 >= 2")
|
14
|
+
resolve_with_variable_warning("1 + 1")
|
15
|
+
resolve_with_variable_warning("1 - 1")
|
16
|
+
resolve_with_variable_warning("1 * 1")
|
17
|
+
resolve_with_variable_warning("1 % 1")
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_variable_warning_for_variable
|
21
|
+
render_with_variable_warning(<<SCSS, "$var", 3)
|
22
|
+
.foo {
|
23
|
+
$var: value;
|
24
|
+
--var: $var;
|
25
|
+
}
|
26
|
+
SCSS
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_variable_warning_for_core_function
|
30
|
+
resolve_with_variable_warning("alpha(#abc)")
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_variable_warning_for_sass_function
|
34
|
+
render_with_variable_warning(<<SCSS, "my-fn()", 2)
|
35
|
+
@function my-fn() {@return null}
|
36
|
+
.foo {--var: my-fn()}
|
37
|
+
SCSS
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_variable_warning_for_parens
|
41
|
+
resolve_with_variable_warning("(foo)", "foo")
|
42
|
+
resolve_with_variable_warning("(foo,)")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_variable_warning_for_selector
|
46
|
+
resolve_with_variable_warning("&")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_variable_warning_for_nested_properties
|
50
|
+
assert_warning(<<WARNING) {render(<<SCSS)}
|
51
|
+
DEPRECATION WARNING on line 2 of #{filename_for_test :scss}:
|
52
|
+
Sass 3.6 will change the way CSS variables are parsed. Instead of being parsed as
|
53
|
+
normal properties, they will not allow any Sass-specific behavior other than \#{}.
|
54
|
+
WARNING
|
55
|
+
.foo {
|
56
|
+
--var: {
|
57
|
+
a: b;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
SCSS
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_no_warning
|
64
|
+
assert_no_variable_warning("foo")
|
65
|
+
assert_no_variable_warning("true")
|
66
|
+
assert_no_variable_warning("1, 2")
|
67
|
+
assert_no_variable_warning("1 2")
|
68
|
+
assert_no_variable_warning("1 / 2")
|
69
|
+
assert_no_variable_warning("foo / bar")
|
70
|
+
assert_no_variable_warning("asdf(foo)")
|
71
|
+
assert_no_variable_warning("calc(1 + 1)")
|
72
|
+
assert_no_variable_warning("asdf(foo=2)")
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_no_warning_within_interpolation
|
76
|
+
assert_no_variable_warning('#{1 + 1}')
|
77
|
+
assert_no_variable_warning('#{alpha(#abc)}')
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def assert_no_variable_warning(str)
|
83
|
+
assert_no_warning {render("a {--var: #{str}}")}
|
84
|
+
assert_no_warning {render("a\n --var: #{str}", :syntax => :sass)}
|
85
|
+
end
|
86
|
+
|
87
|
+
def resolve_with_variable_warning(str, expression = nil)
|
88
|
+
render_with_variable_warning("a {--var: #{str}}", expression || str, 1)
|
89
|
+
render_with_variable_warning(
|
90
|
+
"a\n --var: #{str}", expression || str, 2, :syntax => :sass)
|
91
|
+
end
|
92
|
+
|
93
|
+
def render_with_variable_warning(sass, expression, line, opts = {})
|
94
|
+
opts[:syntax] ||= :scss
|
95
|
+
assert_warning(<<WARNING) {render(sass, opts)}
|
96
|
+
DEPRECATION WARNING on line #{line} of #{filename_for_test(opts[:syntax])}:
|
97
|
+
Sass 3.6 will change the way CSS variables are parsed. Instead of being parsed as
|
98
|
+
normal properties, they will not allow any Sass-specific behavior other than \#{}.
|
99
|
+
For forwards-compatibility, use \#{}:
|
100
|
+
|
101
|
+
--variable: \#{#{expression}};
|
102
|
+
WARNING
|
103
|
+
end
|
104
|
+
|
105
|
+
def render(sass, options = {})
|
106
|
+
options[:syntax] ||= :scss
|
107
|
+
options[:cache] = false
|
108
|
+
munge_filename options
|
109
|
+
Sass::Engine.new(sass, options).render
|
110
|
+
end
|
111
|
+
|
112
|
+
def resolve(str, opts = {}, environment = env)
|
113
|
+
munge_filename opts
|
114
|
+
val = eval(str, opts, environment)
|
115
|
+
assert_kind_of Sass::Script::Value::Base, val
|
116
|
+
val.options = opts
|
117
|
+
val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s
|
118
|
+
end
|
119
|
+
|
120
|
+
def eval(str, opts = {}, environment = env)
|
121
|
+
munge_filename opts
|
122
|
+
Sass::Script.parse(str, opts.delete(:line) || 1,
|
123
|
+
opts.delete(:offset) || 0, opts).
|
124
|
+
perform(Sass::Environment.new(environment, opts))
|
125
|
+
end
|
126
|
+
|
127
|
+
def env(hash = {})
|
128
|
+
env = Sass::Environment.new
|
129
|
+
hash.each {|k, v| env.set_var(k, v)}
|
130
|
+
env
|
131
|
+
end
|
132
|
+
end
|