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
@@ -76,6 +76,26 @@ class SassScriptConversionTest < MiniTest::Test
76
76
  assert_renders "null"
77
77
  end
78
78
 
79
+ def test_space_list
80
+ assert_renders "foo bar baz"
81
+ assert_renders "foo (bar baz) bip"
82
+ assert_renders "foo (bar, baz) bip"
83
+ end
84
+
85
+ def test_comma_list
86
+ assert_renders "foo, bar, baz"
87
+ assert_renders "foo, (bar, baz), bip"
88
+ assert_renders "foo, bar baz, bip"
89
+ end
90
+
91
+ def test_space_list_adds_parens_for_clarity
92
+ assert_renders "(1 + 1) (2 / 4) (3 * 5)"
93
+ end
94
+
95
+ def test_comma_list_doesnt_add_parens
96
+ assert_renders "1 + 1, 2 / 4, 3 * 5"
97
+ end
98
+
79
99
  def test_empty_list
80
100
  assert_renders "()"
81
101
  end
@@ -221,8 +241,8 @@ RUBY
221
241
  assert_renders "$foo or ($bar $baz)"
222
242
  assert_renders "($foo $bar) or $baz"
223
243
 
224
- assert_equal "$foo $bar or $baz", render("$foo ($bar or $baz)")
225
- assert_equal "$foo or $bar $baz", render("($foo or $bar) $baz")
244
+ assert_renders "$foo ($bar or $baz)"
245
+ assert_renders "($foo or $bar) $baz"
226
246
 
227
247
  assert_equal "$foo ($bar $baz)", render("$foo ($bar $baz)")
228
248
  assert_equal "($foo $bar) $baz", render("($foo $bar) $baz")
@@ -244,23 +264,29 @@ RUBY
244
264
  end
245
265
 
246
266
  def test_interpolation
247
- assert_renders "$foo\#{$bar}$baz"
248
- assert_renders "$foo\#{$bar} $baz"
249
- assert_renders "$foo \#{$bar}$baz"
267
+ assert_equal 'unquote("#{$foo}#{$bar}#{$baz}")', render("$foo\#{$bar}$baz")
268
+ assert_equal 'unquote("#{$foo}#{$bar} #{$baz}")', render("$foo\#{$bar} $baz")
269
+ assert_equal 'unquote("#{$foo} #{$bar}#{$baz}")', render("$foo \#{$bar}$baz")
250
270
  assert_renders "$foo \#{$bar} $baz"
251
271
  assert_renders "$foo \#{$bar}\#{$bang} $baz"
252
272
  assert_renders "$foo \#{$bar} \#{$bang} $baz"
253
- assert_renders "\#{$bar}$baz"
254
- assert_renders "$foo\#{$bar}"
273
+ assert_equal 'unquote("#{$bar}#{$baz}")', render("\#{$bar}$baz")
274
+ assert_equal 'unquote("#{$foo}#{$bar}")', render("$foo\#{$bar}")
255
275
  assert_renders "\#{$bar}"
256
276
  end
257
277
 
258
278
  def test_interpolation_in_function
259
279
  assert_renders 'flabnabbit(#{1 + "foo"})'
260
- assert_renders 'flabnabbit($foo #{1 + "foo"}$baz)'
280
+ assert_equal 'flabnabbit(unquote("#{$foo} #{1 + "foo"}#{$baz}"))',
281
+ render('flabnabbit($foo #{1 + "foo"}$baz)')
261
282
  assert_renders 'flabnabbit($foo #{1 + "foo"}#{2 + "bar"} $baz)'
262
283
  end
263
284
 
285
+ def test_interpolation_in_string_function
286
+ assert_renders 'calc(#{1 + "foo"})'
287
+ assert_renders 'calc(foo#{1 + "foo"}baz)'
288
+ end
289
+
264
290
  def test_interpolation_near_operators
265
291
  assert_renders '#{1 + 2} , #{3 + 4}'
266
292
  assert_renders '#{1 + 2}, #{3 + 4}'
@@ -274,30 +300,30 @@ RUBY
274
300
  assert_renders '3/ #{3 + 4}'
275
301
  assert_renders '3/#{3 + 4}'
276
302
 
277
- assert_renders '#{1 + 2} * 7'
278
- assert_renders '#{1 + 2}* 7'
279
- assert_renders '#{1 + 2} *7'
280
- assert_renders '#{1 + 2}*7'
303
+ assert_equal 'unquote("#{1 + 2} * 7")', render('#{1 + 2} * 7')
304
+ assert_equal 'unquote("#{1 + 2}* 7")', render('#{1 + 2}* 7')
305
+ assert_equal 'unquote("#{1 + 2} *7")', render('#{1 + 2} *7')
306
+ assert_equal 'unquote("#{1 + 2}*7")', render('#{1 + 2}*7')
281
307
 
282
308
  assert_renders '-#{1 + 2}'
283
- assert_renders '- #{1 + 2}'
309
+ assert_equal 'unquote("- #{1 + 2}")', render('- #{1 + 2}')
284
310
 
285
- assert_renders '5 + #{1 + 2} * #{3 + 4}'
286
- assert_renders '5 +#{1 + 2} * #{3 + 4}'
287
- assert_renders '5+#{1 + 2} * #{3 + 4}'
288
- assert_renders '#{1 + 2} * #{3 + 4} + 5'
289
- assert_renders '#{1 + 2} * #{3 + 4}+ 5'
290
- assert_renders '#{1 + 2} * #{3 + 4}+5'
311
+ assert_equal 'unquote("5 + #{1 + 2} * #{3 + 4}")', render('5 + #{1 + 2} * #{3 + 4}')
312
+ assert_equal 'unquote("5 +#{1 + 2} * #{3 + 4}")', render('5 +#{1 + 2} * #{3 + 4}')
313
+ assert_equal 'unquote("5+#{1 + 2} * #{3 + 4}")', render('5+#{1 + 2} * #{3 + 4}')
314
+ assert_equal 'unquote("#{1 + 2} * #{3 + 4} + 5")', render('#{1 + 2} * #{3 + 4} + 5')
315
+ assert_equal 'unquote("#{1 + 2} * #{3 + 4}+ 5")', render('#{1 + 2} * #{3 + 4}+ 5')
316
+ assert_equal 'unquote("#{1 + 2} * #{3 + 4}+5")', render('#{1 + 2} * #{3 + 4}+5')
291
317
 
292
- assert_equal '5 / #{1 + 2} + #{3 + 4}', render('5 / (#{1 + 2} + #{3 + 4})')
293
- assert_equal '5 / #{1 + 2} + #{3 + 4}', render('5 /(#{1 + 2} + #{3 + 4})')
294
- assert_equal '5 / #{1 + 2} + #{3 + 4}', render('5 /( #{1 + 2} + #{3 + 4} )')
295
- assert_equal '#{1 + 2} + #{3 + 4} / 5', render('(#{1 + 2} + #{3 + 4}) / 5')
296
- assert_equal '#{1 + 2} + #{3 + 4} / 5', render('(#{1 + 2} + #{3 + 4})/ 5')
297
- assert_equal '#{1 + 2} + #{3 + 4} / 5', render('( #{1 + 2} + #{3 + 4} )/ 5')
318
+ assert_equal '5 / unquote("#{1 + 2} + #{3 + 4}")', render('5 / (#{1 + 2} + #{3 + 4})')
319
+ assert_equal '5 / unquote("#{1 + 2} + #{3 + 4}")', render('5 /(#{1 + 2} + #{3 + 4})')
320
+ assert_equal '5 / unquote("#{1 + 2} + #{3 + 4}")', render('5 /( #{1 + 2} + #{3 + 4} )')
321
+ assert_equal 'unquote("#{1 + 2} + #{3 + 4}") / 5', render('(#{1 + 2} + #{3 + 4}) / 5')
322
+ assert_equal 'unquote("#{1 + 2} + #{3 + 4}") / 5', render('(#{1 + 2} + #{3 + 4})/ 5')
323
+ assert_equal 'unquote("#{1 + 2} + #{3 + 4}") / 5', render('( #{1 + 2} + #{3 + 4} )/ 5')
298
324
 
299
- assert_renders '#{1 + 2} + 2 + 3'
300
- assert_renders '#{1 + 2} +2 + 3'
325
+ assert_equal 'unquote("#{1 + 2} + #{2 + 3}")', render('#{1 + 2} + 2 + 3')
326
+ assert_equal 'unquote("#{1 + 2} +#{2 + 3}")', render('#{1 + 2} +2 + 3')
301
327
  end
302
328
 
303
329
  def test_string_interpolation
@@ -309,7 +335,10 @@ RUBY
309
335
  assert_renders '"foo #{$bar} #{$bang} baz"'
310
336
  assert_renders '"#{$bar}baz"'
311
337
  assert_renders '"foo#{$bar}"'
312
- assert_equal '#{$bar}', render('"#{$bar}"')
338
+ assert_renders '"#{$bar}"'
339
+
340
+ assert_renders "'\"\#{\"bar\"}\"'"
341
+ assert_renders '"\#{bar}"'
313
342
 
314
343
  assert_equal '"foo#{$bar}baz"', render("'foo\#{$bar}baz'")
315
344
  end
@@ -322,7 +351,7 @@ RUBY
322
351
 
323
352
  def render(script, options = {})
324
353
  munge_filename(options)
325
- node = Sass::Script.parse(script, 1, 0, options)
354
+ node = Sass::Script.parse(script, 1, 0, options.merge(:_convert => true))
326
355
  node.to_sass
327
356
  end
328
357
  end