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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -1
  3. data/CODE_OF_CONDUCT.md +10 -0
  4. data/CONTRIBUTING.md +148 -0
  5. data/MIT-LICENSE +1 -1
  6. data/README.md +26 -20
  7. data/Rakefile +103 -20
  8. data/VERSION +1 -1
  9. data/VERSION_DATE +1 -1
  10. data/extra/sass-spec-ref.sh +32 -0
  11. data/extra/update_watch.rb +1 -1
  12. data/lib/sass/cache_stores/filesystem.rb +7 -7
  13. data/lib/sass/cache_stores/memory.rb +4 -5
  14. data/lib/sass/callbacks.rb +2 -2
  15. data/lib/sass/css.rb +11 -10
  16. data/lib/sass/deprecation.rb +55 -0
  17. data/lib/sass/engine.rb +83 -38
  18. data/lib/sass/environment.rb +26 -2
  19. data/lib/sass/error.rb +12 -12
  20. data/lib/sass/exec/base.rb +15 -3
  21. data/lib/sass/exec/sass_convert.rb +34 -15
  22. data/lib/sass/exec/sass_scss.rb +23 -7
  23. data/lib/sass/features.rb +2 -2
  24. data/lib/sass/importers/base.rb +1 -1
  25. data/lib/sass/importers/deprecated_path.rb +51 -0
  26. data/lib/sass/importers/filesystem.rb +24 -16
  27. data/lib/sass/importers.rb +1 -0
  28. data/lib/sass/logger/base.rb +8 -2
  29. data/lib/sass/logger/delayed.rb +50 -0
  30. data/lib/sass/logger.rb +8 -3
  31. data/lib/sass/plugin/compiler.rb +42 -25
  32. data/lib/sass/plugin/configuration.rb +38 -22
  33. data/lib/sass/plugin/merb.rb +2 -2
  34. data/lib/sass/plugin/rack.rb +3 -3
  35. data/lib/sass/plugin/rails.rb +1 -1
  36. data/lib/sass/plugin/staleness_checker.rb +3 -3
  37. data/lib/sass/plugin.rb +3 -2
  38. data/lib/sass/script/css_parser.rb +2 -3
  39. data/lib/sass/script/css_variable_warning.rb +52 -0
  40. data/lib/sass/script/functions.rb +140 -73
  41. data/lib/sass/script/lexer.rb +37 -22
  42. data/lib/sass/script/parser.rb +235 -40
  43. data/lib/sass/script/tree/funcall.rb +12 -5
  44. data/lib/sass/script/tree/interpolation.rb +109 -4
  45. data/lib/sass/script/tree/list_literal.rb +31 -4
  46. data/lib/sass/script/tree/literal.rb +4 -0
  47. data/lib/sass/script/tree/node.rb +21 -3
  48. data/lib/sass/script/tree/operation.rb +54 -1
  49. data/lib/sass/script/tree/string_interpolation.rb +58 -37
  50. data/lib/sass/script/tree/variable.rb +1 -1
  51. data/lib/sass/script/value/base.rb +10 -9
  52. data/lib/sass/script/value/color.rb +42 -24
  53. data/lib/sass/script/value/helpers.rb +16 -6
  54. data/lib/sass/script/value/map.rb +1 -1
  55. data/lib/sass/script/value/number.rb +52 -19
  56. data/lib/sass/script/value/string.rb +46 -5
  57. data/lib/sass/script.rb +3 -3
  58. data/lib/sass/scss/css_parser.rb +16 -2
  59. data/lib/sass/scss/parser.rb +120 -75
  60. data/lib/sass/scss/rx.rb +9 -10
  61. data/lib/sass/scss/static_parser.rb +19 -14
  62. data/lib/sass/scss.rb +0 -2
  63. data/lib/sass/selector/abstract_sequence.rb +8 -6
  64. data/lib/sass/selector/comma_sequence.rb +25 -9
  65. data/lib/sass/selector/pseudo.rb +45 -35
  66. data/lib/sass/selector/sequence.rb +54 -18
  67. data/lib/sass/selector/simple.rb +11 -11
  68. data/lib/sass/selector/simple_sequence.rb +34 -15
  69. data/lib/sass/selector.rb +7 -10
  70. data/lib/sass/shared.rb +1 -1
  71. data/lib/sass/source/map.rb +7 -4
  72. data/lib/sass/source/position.rb +4 -4
  73. data/lib/sass/stack.rb +2 -2
  74. data/lib/sass/supports.rb +8 -10
  75. data/lib/sass/tree/comment_node.rb +1 -1
  76. data/lib/sass/tree/css_import_node.rb +9 -1
  77. data/lib/sass/tree/function_node.rb +8 -3
  78. data/lib/sass/tree/import_node.rb +6 -5
  79. data/lib/sass/tree/node.rb +5 -3
  80. data/lib/sass/tree/prop_node.rb +5 -6
  81. data/lib/sass/tree/rule_node.rb +14 -4
  82. data/lib/sass/tree/visitors/check_nesting.rb +18 -22
  83. data/lib/sass/tree/visitors/convert.rb +43 -26
  84. data/lib/sass/tree/visitors/cssize.rb +5 -1
  85. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  86. data/lib/sass/tree/visitors/extend.rb +15 -13
  87. data/lib/sass/tree/visitors/perform.rb +42 -17
  88. data/lib/sass/tree/visitors/set_options.rb +1 -1
  89. data/lib/sass/tree/visitors/to_css.rb +58 -30
  90. data/lib/sass/util/multibyte_string_scanner.rb +0 -2
  91. data/lib/sass/util/normalized_map.rb +0 -1
  92. data/lib/sass/util/subset_map.rb +1 -2
  93. data/lib/sass/util.rb +125 -68
  94. data/lib/sass/version.rb +2 -2
  95. data/lib/sass.rb +10 -3
  96. data/test/sass/compiler_test.rb +6 -2
  97. data/test/sass/conversion_test.rb +187 -53
  98. data/test/sass/css2sass_test.rb +50 -1
  99. data/test/sass/css_variable_test.rb +132 -0
  100. data/test/sass/engine_test.rb +207 -61
  101. data/test/sass/exec_test.rb +10 -0
  102. data/test/sass/extend_test.rb +101 -29
  103. data/test/sass/functions_test.rb +60 -9
  104. data/test/sass/importer_test.rb +9 -0
  105. data/test/sass/more_templates/more1.sass +10 -10
  106. data/test/sass/more_templates/more_import.sass +2 -2
  107. data/test/sass/plugin_test.rb +10 -8
  108. data/test/sass/results/script.css +3 -3
  109. data/test/sass/script_conversion_test.rb +58 -29
  110. data/test/sass/script_test.rb +430 -53
  111. data/test/sass/scss/css_test.rb +73 -7
  112. data/test/sass/scss/rx_test.rb +4 -0
  113. data/test/sass/scss/scss_test.rb +309 -4
  114. data/test/sass/source_map_test.rb +152 -74
  115. data/test/sass/superselector_test.rb +19 -0
  116. data/test/sass/templates/_partial.sass +1 -1
  117. data/test/sass/templates/basic.sass +10 -10
  118. data/test/sass/templates/bork1.sass +1 -1
  119. data/test/sass/templates/bork5.sass +1 -1
  120. data/test/sass/templates/compact.sass +10 -10
  121. data/test/sass/templates/complex.sass +187 -187
  122. data/test/sass/templates/compressed.sass +10 -10
  123. data/test/sass/templates/expanded.sass +10 -10
  124. data/test/sass/templates/import.sass +2 -2
  125. data/test/sass/templates/importee.sass +3 -3
  126. data/test/sass/templates/mixins.sass +22 -22
  127. data/test/sass/templates/multiline.sass +4 -4
  128. data/test/sass/templates/nested.sass +13 -13
  129. data/test/sass/templates/parent_ref.sass +12 -12
  130. data/test/sass/templates/script.sass +70 -70
  131. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
  132. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
  133. data/test/sass/templates/subdir/subdir.sass +3 -3
  134. data/test/sass/templates/units.sass +10 -10
  135. data/test/sass/util/multibyte_string_scanner_test.rb +10 -2
  136. data/test/sass/util_test.rb +15 -44
  137. data/test/sass-spec.yml +3 -0
  138. data/test/test_helper.rb +5 -4
  139. metadata +302 -295
  140. data/CONTRIBUTING +0 -3
  141. data/lib/sass/scss/script_lexer.rb +0 -15
  142. data/lib/sass/scss/script_parser.rb +0 -25
@@ -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