sass 3.3.0.alpha.391 → 3.3.0.alpha.392
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/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/engine.rb +6 -2
- data/lib/sass/environment.rb +5 -0
- data/lib/sass/script.rb +2 -1
- data/lib/sass/scss/parser.rb +13 -2
- data/lib/sass/scss/rx.rb +0 -1
- data/lib/sass/tree/variable_node.rb +7 -1
- data/lib/sass/tree/visitors/convert.rb +1 -1
- data/lib/sass/tree/visitors/perform.rb +18 -2
- data/test/sass/conversion_test.rb +17 -0
- data/test/sass/engine_test.rb +24 -10
- data/test/sass/script_test.rb +99 -0
- data/test/sass/scss/scss_test.rb +2 -2
- data/test/sass/source_map_test.rb +2 -2
- metadata +4 -4
data/REVISION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
7cd0572b56d7915a0b3af53d6776fa3f7fd10317
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.3.0.alpha.
|
|
1
|
+
3.3.0.alpha.392
|
data/VERSION_DATE
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
12 October 2013 15:27:22 GMT
|
data/lib/sass/engine.rb
CHANGED
|
@@ -736,11 +736,15 @@ WARNING
|
|
|
736
736
|
end
|
|
737
737
|
|
|
738
738
|
def parse_variable(line)
|
|
739
|
-
name, value,
|
|
739
|
+
name, value, flags = line.text.scan(Script::MATCH)[0]
|
|
740
740
|
raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath variable declarations.",
|
|
741
741
|
:line => @line + 1) unless line.children.empty?
|
|
742
742
|
raise SyntaxError.new("Invalid variable: \"#{line.text}\".",
|
|
743
743
|
:line => @line) unless name && value
|
|
744
|
+
flags = flags ? flags.split(/\s+/) : []
|
|
745
|
+
if (invalid_flag = flags.find {|f| f != '!default' && f != '!global'})
|
|
746
|
+
raise SyntaxError.new("Invalid flag \"#{invalid_flag}\".", :line => @line)
|
|
747
|
+
end
|
|
744
748
|
|
|
745
749
|
# This workaround is needed for the case when the variable value is part of the identifier,
|
|
746
750
|
# otherwise we end up with the offset equal to the value index inside the name:
|
|
@@ -749,7 +753,7 @@ WARNING
|
|
|
749
753
|
index = line.text.index(value, line.offset + var_lhs_length) || 0
|
|
750
754
|
expr = parse_script(value, :offset => to_parser_offset(line.offset + index))
|
|
751
755
|
|
|
752
|
-
Tree::VariableNode.new(name, expr, default)
|
|
756
|
+
Tree::VariableNode.new(name, expr, flags.include?('!default'), flags.include?('!global'))
|
|
753
757
|
end
|
|
754
758
|
|
|
755
759
|
def parse_comment(line)
|
data/lib/sass/environment.rb
CHANGED
|
@@ -21,6 +21,11 @@ module Sass
|
|
|
21
21
|
(@#{name}s && @#{name}s[name]) || @parent && @parent._#{name}(name)
|
|
22
22
|
end
|
|
23
23
|
protected :_#{name}
|
|
24
|
+
|
|
25
|
+
def is_#{name}_global?(name)
|
|
26
|
+
return !@parent if @#{name}s && @#{name}s.has_key?(name)
|
|
27
|
+
@parent && @parent.is_#{name}_global?(name)
|
|
28
|
+
end
|
|
24
29
|
RUBY
|
|
25
30
|
end
|
|
26
31
|
|
data/lib/sass/script.rb
CHANGED
|
@@ -7,7 +7,8 @@ module Sass
|
|
|
7
7
|
# This module contains code that handles the parsing and evaluation of SassScript.
|
|
8
8
|
module Script
|
|
9
9
|
# The regular expression used to parse variables.
|
|
10
|
-
MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?)
|
|
10
|
+
MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?)
|
|
11
|
+
(!#{Sass::SCSS::RX::IDENT}(?:\s+!#{Sass::SCSS::RX::IDENT})*)?$/x
|
|
11
12
|
|
|
12
13
|
# The regular expression used to validate variables without matching.
|
|
13
14
|
VALIDATE = /^\$#{Sass::SCSS::RX::IDENT}$/
|
data/lib/sass/scss/parser.rb
CHANGED
|
@@ -598,8 +598,19 @@ module Sass
|
|
|
598
598
|
ss; tok!(/:/); ss
|
|
599
599
|
|
|
600
600
|
expr = sass_script(:parse)
|
|
601
|
-
|
|
602
|
-
|
|
601
|
+
while tok(/!/)
|
|
602
|
+
flag_name = tok!(IDENT)
|
|
603
|
+
if flag_name == 'default'
|
|
604
|
+
guarded ||= true
|
|
605
|
+
elsif flag_name == 'global'
|
|
606
|
+
global ||= true
|
|
607
|
+
else
|
|
608
|
+
raise Sass::SyntaxError.new("Invalid flag \"!#{flag_name}\".", :line => @line)
|
|
609
|
+
end
|
|
610
|
+
ss
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
result = Sass::Tree::VariableNode.new(name, expr, guarded, global)
|
|
603
614
|
node(result, start_pos)
|
|
604
615
|
end
|
|
605
616
|
|
data/lib/sass/scss/rx.rb
CHANGED
|
@@ -16,13 +16,19 @@ module Sass
|
|
|
16
16
|
# @return [Boolean]
|
|
17
17
|
attr_reader :guarded
|
|
18
18
|
|
|
19
|
+
# Whether this is a global variable assignment (`!global`).
|
|
20
|
+
# @return [Boolean]
|
|
21
|
+
attr_reader :global
|
|
22
|
+
|
|
19
23
|
# @param name [String] The name of the variable
|
|
20
24
|
# @param expr [Script::Tree::Node] See \{#expr}
|
|
21
25
|
# @param guarded [Boolean] See \{#guarded}
|
|
22
|
-
|
|
26
|
+
# @param global [Boolean] See \{#global}
|
|
27
|
+
def initialize(name, expr, guarded, global)
|
|
23
28
|
@name = name
|
|
24
29
|
@expr = expr
|
|
25
30
|
@guarded = guarded
|
|
31
|
+
@global = global
|
|
26
32
|
super()
|
|
27
33
|
end
|
|
28
34
|
end
|
|
@@ -253,7 +253,7 @@ class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base
|
|
|
253
253
|
|
|
254
254
|
def visit_variable(node)
|
|
255
255
|
"#{tab_str}$#{dasherize(node.name)}: #{node.expr.to_sass(@options)}" +
|
|
256
|
-
"#{' !default' if node.guarded}#{semi}\n"
|
|
256
|
+
"#{' !global' if node.global}#{' !default' if node.guarded}#{semi}\n"
|
|
257
257
|
end
|
|
258
258
|
|
|
259
259
|
def visit_warn(node)
|
|
@@ -416,7 +416,23 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
|
416
416
|
|
|
417
417
|
# Loads the new variable value into the environment.
|
|
418
418
|
def visit_variable(node)
|
|
419
|
-
|
|
419
|
+
env = @environment
|
|
420
|
+
if node.global
|
|
421
|
+
env = env.global_env
|
|
422
|
+
elsif env.parent && env.is_var_global?(node.name)
|
|
423
|
+
var_expr = "$#{node.name}: #{node.expr.to_sass(env.options)} !global"
|
|
424
|
+
var_expr << " !default" if node.guarded
|
|
425
|
+
location = "on line #{node.line}"
|
|
426
|
+
location << " of #{node.filename}" if node.filename
|
|
427
|
+
Sass::Util.sass_warn <<WARNING
|
|
428
|
+
DEPRECATION WARNING #{location}:
|
|
429
|
+
Assigning to global variable "$#{node.name}" by default is deprecated.
|
|
430
|
+
In future versions of Sass, this will create a new local variable.
|
|
431
|
+
If you want to assign to the global variable, use "#{var_expr}" instead.
|
|
432
|
+
WARNING
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
var = env.var(node.name)
|
|
420
436
|
return [] if node.guarded && var && !var.null?
|
|
421
437
|
val = node.expr.perform(@environment)
|
|
422
438
|
if node.expr.source_range
|
|
@@ -424,7 +440,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
|
424
440
|
else
|
|
425
441
|
val.source_range = node.source_range
|
|
426
442
|
end
|
|
427
|
-
|
|
443
|
+
env.set_var(node.name, val)
|
|
428
444
|
[]
|
|
429
445
|
end
|
|
430
446
|
|
|
@@ -1893,6 +1893,23 @@ foo {
|
|
|
1893
1893
|
SCSS
|
|
1894
1894
|
end
|
|
1895
1895
|
|
|
1896
|
+
def test_variable_with_global
|
|
1897
|
+
assert_renders(<<SASS, <<SCSS)
|
|
1898
|
+
$var: 1
|
|
1899
|
+
|
|
1900
|
+
foo
|
|
1901
|
+
$var: 2 !global
|
|
1902
|
+
$var: 3 !global !default
|
|
1903
|
+
SASS
|
|
1904
|
+
$var: 1;
|
|
1905
|
+
|
|
1906
|
+
foo {
|
|
1907
|
+
$var: 2 !global;
|
|
1908
|
+
$var: 3 !global !default;
|
|
1909
|
+
}
|
|
1910
|
+
SCSS
|
|
1911
|
+
end
|
|
1912
|
+
|
|
1896
1913
|
private
|
|
1897
1914
|
|
|
1898
1915
|
def assert_sass_to_sass(sass, options = {})
|
data/test/sass/engine_test.rb
CHANGED
|
@@ -1579,7 +1579,7 @@ $a: 5
|
|
|
1579
1579
|
@while $a != 0
|
|
1580
1580
|
a-\#{$a}
|
|
1581
1581
|
blooble: gloop
|
|
1582
|
-
$a: $a - 1
|
|
1582
|
+
$a: $a - 1 !global
|
|
1583
1583
|
SASS
|
|
1584
1584
|
end
|
|
1585
1585
|
|
|
@@ -1673,8 +1673,8 @@ a {
|
|
|
1673
1673
|
b: 1;
|
|
1674
1674
|
c: 2; }
|
|
1675
1675
|
CSS
|
|
1676
|
-
$a: 1
|
|
1677
1676
|
a
|
|
1677
|
+
$a: 1
|
|
1678
1678
|
b: $a
|
|
1679
1679
|
$a: 2
|
|
1680
1680
|
c: $a
|
|
@@ -1682,7 +1682,7 @@ SASS
|
|
|
1682
1682
|
end
|
|
1683
1683
|
|
|
1684
1684
|
def test_variable_scope
|
|
1685
|
-
assert_equal(<<CSS, render(<<SASS))
|
|
1685
|
+
silence_warnings {assert_equal(<<CSS, render(<<SASS))}
|
|
1686
1686
|
a {
|
|
1687
1687
|
b-1: c;
|
|
1688
1688
|
b-2: c;
|
|
@@ -1708,9 +1708,6 @@ SASS
|
|
|
1708
1708
|
|
|
1709
1709
|
def test_hyphen_underscore_insensitive_variables
|
|
1710
1710
|
assert_equal(<<CSS, render(<<SASS))
|
|
1711
|
-
a {
|
|
1712
|
-
b: c; }
|
|
1713
|
-
|
|
1714
1711
|
d {
|
|
1715
1712
|
e: 13;
|
|
1716
1713
|
f: foobar; }
|
|
@@ -1718,10 +1715,8 @@ CSS
|
|
|
1718
1715
|
$var-hyphen: 12
|
|
1719
1716
|
$var_under: foo
|
|
1720
1717
|
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
$var-under: $var-under + bar
|
|
1724
|
-
b: c
|
|
1718
|
+
$var_hyphen: 1 + $var_hyphen
|
|
1719
|
+
$var-under: $var-under + bar
|
|
1725
1720
|
|
|
1726
1721
|
d
|
|
1727
1722
|
e: $var-hyphen
|
|
@@ -2489,6 +2484,25 @@ CSS
|
|
|
2489
2484
|
SASS
|
|
2490
2485
|
end
|
|
2491
2486
|
|
|
2487
|
+
def test_variable_assignment_with_global
|
|
2488
|
+
assert_no_warning {assert_equal(<<CSS, render(<<SASS))}
|
|
2489
|
+
.foo {
|
|
2490
|
+
a: x; }
|
|
2491
|
+
|
|
2492
|
+
.bar {
|
|
2493
|
+
b: x; }
|
|
2494
|
+
CSS
|
|
2495
|
+
$var: 1
|
|
2496
|
+
|
|
2497
|
+
.foo
|
|
2498
|
+
$var: x !global
|
|
2499
|
+
a: $var
|
|
2500
|
+
|
|
2501
|
+
.bar
|
|
2502
|
+
b: $var
|
|
2503
|
+
SASS
|
|
2504
|
+
end
|
|
2505
|
+
|
|
2492
2506
|
# Regression tests
|
|
2493
2507
|
|
|
2494
2508
|
def test_list_separator_with_arg_list
|
data/test/sass/script_test.rb
CHANGED
|
@@ -585,6 +585,105 @@ SASS
|
|
|
585
585
|
assert_equal ".bar", resolve("nth(nth(&, 1), 3)", {}, env)
|
|
586
586
|
end
|
|
587
587
|
|
|
588
|
+
def test_setting_global_variable_locally_warns
|
|
589
|
+
assert_warning(<<WARNING) {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
|
|
590
|
+
DEPRECATION WARNING on line 4 of test_setting_global_variable_locally_warns_inline.scss:
|
|
591
|
+
Assigning to global variable "$var" by default is deprecated.
|
|
592
|
+
In future versions of Sass, this will create a new local variable.
|
|
593
|
+
If you want to assign to the global variable, use "$var: x !global" instead.
|
|
594
|
+
WARNING
|
|
595
|
+
.foo {
|
|
596
|
+
a: x; }
|
|
597
|
+
|
|
598
|
+
.bar {
|
|
599
|
+
b: x; }
|
|
600
|
+
CSS
|
|
601
|
+
$var: 1;
|
|
602
|
+
|
|
603
|
+
.foo {
|
|
604
|
+
$var: x;
|
|
605
|
+
a: $var;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
.bar {
|
|
609
|
+
b: $var;
|
|
610
|
+
}
|
|
611
|
+
SCSS
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
def test_setting_global_variable_globally
|
|
615
|
+
assert_no_warning {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
|
|
616
|
+
.foo {
|
|
617
|
+
a: 1; }
|
|
618
|
+
|
|
619
|
+
.bar {
|
|
620
|
+
b: 2; }
|
|
621
|
+
CSS
|
|
622
|
+
$var: 1;
|
|
623
|
+
|
|
624
|
+
.foo {
|
|
625
|
+
a: $var;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
$var: 2;
|
|
629
|
+
|
|
630
|
+
.bar {
|
|
631
|
+
b: $var;
|
|
632
|
+
}
|
|
633
|
+
SCSS
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
def test_setting_global_variable_with_flag
|
|
637
|
+
assert_no_warning {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
|
|
638
|
+
.bar {
|
|
639
|
+
a: x;
|
|
640
|
+
b: y;
|
|
641
|
+
c: z; }
|
|
642
|
+
CSS
|
|
643
|
+
$var1: 1;
|
|
644
|
+
$var3: 3;
|
|
645
|
+
|
|
646
|
+
.foo {
|
|
647
|
+
$var1: x !global;
|
|
648
|
+
$var2: y !global;
|
|
649
|
+
@each $var3 in _ {
|
|
650
|
+
$var3: z !global;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
.bar {
|
|
655
|
+
a: $var1;
|
|
656
|
+
b: $var2;
|
|
657
|
+
c: $var3;
|
|
658
|
+
}
|
|
659
|
+
SCSS
|
|
660
|
+
end
|
|
661
|
+
|
|
662
|
+
def test_setting_global_variable_with_flag_and_default
|
|
663
|
+
assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))
|
|
664
|
+
.bar {
|
|
665
|
+
a: 1;
|
|
666
|
+
b: y;
|
|
667
|
+
c: z; }
|
|
668
|
+
CSS
|
|
669
|
+
$var1: 1;
|
|
670
|
+
|
|
671
|
+
.foo {
|
|
672
|
+
$var1: x !global !default;
|
|
673
|
+
$var2: y !global !default;
|
|
674
|
+
@each $var3 in _ {
|
|
675
|
+
$var3: z !global !default;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
.bar {
|
|
680
|
+
a: $var1;
|
|
681
|
+
b: $var2;
|
|
682
|
+
c: $var3;
|
|
683
|
+
}
|
|
684
|
+
SCSS
|
|
685
|
+
end
|
|
686
|
+
|
|
588
687
|
# Regression Tests
|
|
589
688
|
|
|
590
689
|
def test_funcall_has_higher_precedence_than_color_name
|
data/test/sass/scss/scss_test.rb
CHANGED
|
@@ -229,7 +229,7 @@ $i: 1;
|
|
|
229
229
|
.foo {
|
|
230
230
|
@while $i != 5 {
|
|
231
231
|
a: $i;
|
|
232
|
-
$i: $i + 1;
|
|
232
|
+
$i: $i + 1 !global;
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
SCSS
|
|
@@ -2639,7 +2639,7 @@ SCSS
|
|
|
2639
2639
|
CSS
|
|
2640
2640
|
$var: null;
|
|
2641
2641
|
.foo {
|
|
2642
|
-
$var:
|
|
2642
|
+
$var: & !global;
|
|
2643
2643
|
}
|
|
2644
2644
|
|
|
2645
2645
|
.bar {
|
|
@@ -488,7 +488,7 @@ CSS
|
|
|
488
488
|
$i: 6;
|
|
489
489
|
@while $i > 0 {
|
|
490
490
|
{{1}}{{4}}{{7}}.item-#{$i} {{/1}}{{/4}}{{/7}}{ {{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}}; }
|
|
491
|
-
$i: $i - 2;
|
|
491
|
+
$i: $i - 2 !global;
|
|
492
492
|
}
|
|
493
493
|
SCSS
|
|
494
494
|
{{1}}.item-6{{/1}} {
|
|
@@ -510,7 +510,7 @@ $i: 6
|
|
|
510
510
|
@while $i > 0
|
|
511
511
|
{{1}}{{4}}{{7}}.item-#{$i}{{/1}}{{/4}}{{/7}}
|
|
512
512
|
{{2}}{{5}}{{8}}width{{/2}}{{/5}}{{/8}}: {{3}}{{6}}{{9}}2em * $i{{/3}}{{/6}}{{/9}}
|
|
513
|
-
$i: $i - 2
|
|
513
|
+
$i: $i - 2 !global
|
|
514
514
|
SASS
|
|
515
515
|
{{1}}.item-6{{/1}} {
|
|
516
516
|
{{2}}width{{/2}}: {{3}}12em{{/3}}; }
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sass
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 592302109
|
|
5
5
|
prerelease: 6
|
|
6
6
|
segments:
|
|
7
7
|
- 3
|
|
8
8
|
- 3
|
|
9
9
|
- 0
|
|
10
10
|
- alpha
|
|
11
|
-
-
|
|
12
|
-
version: 3.3.0.alpha.
|
|
11
|
+
- 392
|
|
12
|
+
version: 3.3.0.alpha.392
|
|
13
13
|
platform: ruby
|
|
14
14
|
authors:
|
|
15
15
|
- Nathan Weizenbaum
|
|
@@ -19,7 +19,7 @@ autorequire:
|
|
|
19
19
|
bindir: bin
|
|
20
20
|
cert_chain: []
|
|
21
21
|
|
|
22
|
-
date: 2013-10-
|
|
22
|
+
date: 2013-10-12 00:00:00 -04:00
|
|
23
23
|
default_executable:
|
|
24
24
|
dependencies:
|
|
25
25
|
- !ruby/object:Gem::Dependency
|