sass 3.3.0.alpha.50 → 3.3.0.alpha.59
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 +3 -1
- data/lib/sass/importers/filesystem.rb +9 -4
- data/lib/sass/plugin/compiler.rb +0 -29
- data/lib/sass/plugin/configuration.rb +0 -11
- data/lib/sass/script/number.rb +0 -11
- data/lib/sass/scss/parser.rb +3 -1
- data/lib/sass/scss/rx.rb +1 -6
- data/lib/sass/selector/simple_sequence.rb +10 -11
- data/lib/sass/source/range.rb +0 -1
- data/lib/sass/tree/visitors/extend.rb +7 -7
- data/test/sass/engine_test.rb +0 -6
- data/test/sass/extend_test.rb +78 -125
- data/test/sass/plugin_test.rb +0 -12
- data/test/sass/scss/scss_test.rb +35 -0
- metadata +10 -10
data/REVISION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
6b1a36d5126d1d8e2b9550a69e3aab09db566fed
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.3.0.alpha.
|
|
1
|
+
3.3.0.alpha.59
|
data/VERSION_DATE
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
22 December 2012 00:18:55 GMT
|
data/lib/sass/engine.rb
CHANGED
|
@@ -268,7 +268,9 @@ module Sass
|
|
|
268
268
|
|
|
269
269
|
# Render the template to CSS and return the source map.
|
|
270
270
|
#
|
|
271
|
-
# @param sourcemap_uri [String] The sourcemap URI to use in the
|
|
271
|
+
# @param sourcemap_uri [String] The sourcemap URI to use in the
|
|
272
|
+
# @sourceMappingURL comment. This should be relative to the location of
|
|
273
|
+
# the CSS file.
|
|
272
274
|
# @return [(String, Sass::Source::Map)] The rendered CSS and the associated source map
|
|
273
275
|
# @raise [Sass::SyntaxError] if there's an error in the document
|
|
274
276
|
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
|
@@ -91,8 +91,14 @@ module Sass
|
|
|
91
91
|
sorted_exts = extensions.sort
|
|
92
92
|
syntax = extensions[extname]
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
if syntax
|
|
95
|
+
ret = [["#{dirname}/{_,}#{basename}.#{extensions.invert[syntax]}", syntax]]
|
|
96
|
+
else
|
|
97
|
+
ret = sorted_exts.map {|ext, syn| ["#{dirname}/{_,}#{basename}.#{ext}", syn]}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# JRuby chokes when trying to import files from JARs when the path starts with './'.
|
|
101
|
+
ret.map {|f, s| [f.sub(%r{^\./}, ''), s]}
|
|
96
102
|
end
|
|
97
103
|
|
|
98
104
|
def escape_glob_characters(name)
|
|
@@ -118,7 +124,7 @@ module Sass
|
|
|
118
124
|
end
|
|
119
125
|
found = Sass::Util.flatten(found, 1)
|
|
120
126
|
return if found.empty?
|
|
121
|
-
|
|
127
|
+
|
|
122
128
|
if found.size > 1 && !@same_name_warnings.include?(found.first.first)
|
|
123
129
|
found.each {|(f, _)| @same_name_warnings << f}
|
|
124
130
|
relative_to = Pathname.new(dir)
|
|
@@ -141,7 +147,6 @@ MESSAGE
|
|
|
141
147
|
WARNING: In #{File.dirname(name)}:
|
|
142
148
|
There are multiple files that match the name "#{File.basename(name)}":
|
|
143
149
|
#{candidates}
|
|
144
|
-
This will be an error in future versions of Sass.
|
|
145
150
|
WARNING
|
|
146
151
|
end
|
|
147
152
|
end
|
data/lib/sass/plugin/compiler.rb
CHANGED
|
@@ -69,31 +69,6 @@ module Sass::Plugin
|
|
|
69
69
|
# The location of the sourcemap being generated, if any.
|
|
70
70
|
define_callback :updated_stylesheet
|
|
71
71
|
|
|
72
|
-
# Register a callback to be run before a single stylesheet is updated.
|
|
73
|
-
# The callback is only run if the stylesheet is guaranteed to be updated;
|
|
74
|
-
# if the CSS file is fresh, this won't be run.
|
|
75
|
-
#
|
|
76
|
-
# Even if the \{file:SASS_REFERENCE.md#full_exception-option `:full_exception` option}
|
|
77
|
-
# is enabled, this callback won't be run
|
|
78
|
-
# when an exception CSS file is being written.
|
|
79
|
-
# To run an action for those files, use \{#on\_compilation\_error}.
|
|
80
|
-
#
|
|
81
|
-
# @yield [template, css]
|
|
82
|
-
# @yieldparam template [String]
|
|
83
|
-
# The location of the Sass/SCSS file being updated.
|
|
84
|
-
# @yieldparam css [String]
|
|
85
|
-
# The location of the CSS file being generated.
|
|
86
|
-
# @yieldparam sourcemap [String]
|
|
87
|
-
# The location of the sourcemap file being generated, if any.
|
|
88
|
-
define_callback :updating_stylesheet
|
|
89
|
-
|
|
90
|
-
def on_updating_stylesheet_with_deprecation_warning(&block)
|
|
91
|
-
Sass::Util.sass_warn("Sass::Compiler#on_updating_stylesheet callback is deprecated and will be removed in a future release. Use Sass::Compiler#on_updated_stylesheet instead, which is run after stylesheet compilation.")
|
|
92
|
-
on_updating_stylesheet_without_deprecation_warning(&block)
|
|
93
|
-
end
|
|
94
|
-
alias_method :on_updating_stylesheet_without_deprecation_warning, :on_updating_stylesheet
|
|
95
|
-
alias_method :on_updating_stylesheet, :on_updating_stylesheet_with_deprecation_warning
|
|
96
|
-
|
|
97
72
|
# Register a callback to be run when Sass decides not to update a stylesheet.
|
|
98
73
|
# In particular, the callback is run when Sass finds that
|
|
99
74
|
# the template file and none of its dependencies
|
|
@@ -201,8 +176,6 @@ module Sass::Plugin
|
|
|
201
176
|
end
|
|
202
177
|
end
|
|
203
178
|
|
|
204
|
-
run_updating_stylesheets individual_files
|
|
205
|
-
|
|
206
179
|
individual_files.each do |file, css, sourcemap|
|
|
207
180
|
# TODO: Does staleness_checker need to check the sourcemap file as well?
|
|
208
181
|
if options[:always_update] || staleness_checker.stylesheet_needs_update?(css, file)
|
|
@@ -355,8 +328,6 @@ module Sass::Plugin
|
|
|
355
328
|
compilation_error_occured = true
|
|
356
329
|
run_compilation_error e, filename, css, sourcemap
|
|
357
330
|
rendered = Sass::SyntaxError.exception_to_css(e, options)
|
|
358
|
-
else
|
|
359
|
-
run_updating_stylesheet filename, css, sourcemap
|
|
360
331
|
end
|
|
361
332
|
|
|
362
333
|
write_file(css, rendered)
|
|
@@ -33,17 +33,6 @@ module Sass
|
|
|
33
33
|
@options ||= default_options.dup
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
# Sets the options hash.
|
|
37
|
-
# See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
|
|
38
|
-
# See {Sass::Plugin::Configuration#reset!}
|
|
39
|
-
# @deprecated Instead, modify the options hash in-place.
|
|
40
|
-
# @param value [{Symbol => Object}] The options hash
|
|
41
|
-
def options=(value)
|
|
42
|
-
Sass::Util.sass_warn("Setting Sass::Plugin.options is deprecated " +
|
|
43
|
-
"and will be removed in a future release.")
|
|
44
|
-
options.merge!(value)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
36
|
# Adds a new template-location/css-location mapping.
|
|
48
37
|
# This means that Sass/SCSS files in `template_location`
|
|
49
38
|
# will be compiled to CSS files in `css_location`.
|
data/lib/sass/script/number.rb
CHANGED
|
@@ -53,17 +53,6 @@ module Sass::Script
|
|
|
53
53
|
@precision_factor ||= 10.0**precision
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
# Handles the deprecation warning for the PRECISION constant
|
|
57
|
-
# This can be removed in 3.2.
|
|
58
|
-
def self.const_missing(const)
|
|
59
|
-
if const == :PRECISION
|
|
60
|
-
Sass::Util.sass_warn("Sass::Script::Number::PRECISION is deprecated and will be removed in a future release. Use Sass::Script::Number.precision_factor instead.")
|
|
61
|
-
const_set(:PRECISION, self.precision_factor)
|
|
62
|
-
else
|
|
63
|
-
super
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
56
|
# Used so we don't allocate two new arrays for each new number.
|
|
68
57
|
NO_UNITS = []
|
|
69
58
|
|
data/lib/sass/scss/parser.rb
CHANGED
data/lib/sass/scss/rx.rb
CHANGED
|
@@ -128,12 +128,7 @@ module Sass
|
|
|
128
128
|
# We could use it for 1.9 only, but I don't want to introduce a cross-version
|
|
129
129
|
# behavior difference.
|
|
130
130
|
# In any case, almost all CSS idents will be matched by this.
|
|
131
|
-
|
|
132
|
-
# We explicitly avoid parsing newlines or values/selectors longer than
|
|
133
|
-
# about 50 characters. This mitigates the problem of exponential parsing
|
|
134
|
-
# time when a value has a long string of valid, parsable content followed
|
|
135
|
-
# by something invalid.
|
|
136
|
-
STATIC_VALUE = /(-?#{NMSTART}|#{STRING_NOINTERP}|[ \t](?!%)|#[a-f0-9]|[,%]|#{NUM}|\!important){1,50}([;}])/i
|
|
131
|
+
STATIC_VALUE = /(-?#{NMSTART}|#{STRING_NOINTERP}|#[a-f0-9]|[,%]|-?#{NUMBER}|\!important)+([;}])/i
|
|
137
132
|
STATIC_SELECTOR = /(#{NMCHAR}|[ \t]|[,>+*]|[:#.]#{NMSTART}){0,50}([{])/i
|
|
138
133
|
end
|
|
139
134
|
end
|
|
@@ -105,7 +105,7 @@ module Sass
|
|
|
105
105
|
group.each {|e, _| e.result = :failed_to_unify}
|
|
106
106
|
next unless unified = seq.members.last.unify(self_without_sel, subject?)
|
|
107
107
|
group.each {|e, _| e.result = :succeeded}
|
|
108
|
-
|
|
108
|
+
group.each {|e, _| check_directives_match!(e, parent_directives)}
|
|
109
109
|
new_seq = Sequence.new(seq.members[0...-1] + [unified])
|
|
110
110
|
new_seq.add_sources!(sources + [seq])
|
|
111
111
|
[sels, new_seq]
|
|
@@ -180,16 +180,15 @@ module Sass
|
|
|
180
180
|
def check_directives_match!(extend, parent_directives)
|
|
181
181
|
dirs1 = extend.directives.map {|d| d.resolved_value}
|
|
182
182
|
dirs2 = parent_directives.map {|d| d.resolved_value}
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
Sass
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return false
|
|
183
|
+
return if Sass::Util.subsequence?(dirs1, dirs2)
|
|
184
|
+
|
|
185
|
+
# TODO(nweiz): this should use the Sass stack trace of the extend node,
|
|
186
|
+
# not the selector.
|
|
187
|
+
raise Sass::SyntaxError.new(<<MESSAGE)
|
|
188
|
+
You may not @extend an outer selector from within #{extend.directives.last.name}.
|
|
189
|
+
You may only @extend selectors within the same directive.
|
|
190
|
+
From "@extend #{extend.target.join(', ')}" on line #{extend.node.line}#{" of #{extend.node.filename}" if extend.node.filename}.
|
|
191
|
+
MESSAGE
|
|
193
192
|
end
|
|
194
193
|
|
|
195
194
|
def _hash
|
data/lib/sass/source/range.rb
CHANGED
|
@@ -20,7 +20,6 @@ module Sass::Source
|
|
|
20
20
|
# @param end_pos [Sass::Source::Position] See \{#end_pos}
|
|
21
21
|
# @param file [String] See \{#file}
|
|
22
22
|
def initialize(start_pos, end_pos, file)
|
|
23
|
-
raise 'hell' if end_pos.is_a?(Fixnum)
|
|
24
23
|
@start_pos = start_pos
|
|
25
24
|
@end_pos = end_pos
|
|
26
25
|
@file = file
|
|
@@ -49,7 +49,7 @@ class Sass::Tree::Visitors::Extend < Sass::Tree::Visitors::Base
|
|
|
49
49
|
def self.check_extends_fired!(extends)
|
|
50
50
|
extends.each_value do |ex|
|
|
51
51
|
next if ex.result == :succeeded || ex.node.optional?
|
|
52
|
-
|
|
52
|
+
message = "\"#{ex.extender}\" failed to @extend \"#{ex.target.join}\"."
|
|
53
53
|
reason =
|
|
54
54
|
if ex.result == :not_found
|
|
55
55
|
"The selector \"#{ex.target.join}\" was not found."
|
|
@@ -57,12 +57,12 @@ class Sass::Tree::Visitors::Extend < Sass::Tree::Visitors::Base
|
|
|
57
57
|
"No selectors matching \"#{ex.target.join}\" could be unified with \"#{ex.extender}\"."
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
Sass
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
# TODO(nweiz): this should use the Sass stack trace of the extend node.
|
|
61
|
+
raise Sass::SyntaxError.new(<<MESSAGE, :filename => ex.node.filename, :line => ex.node.line)
|
|
62
|
+
#{message}
|
|
63
|
+
#{reason}
|
|
64
|
+
Use "@extend #{ex.target.join} !optional" if the extend should be able to fail.
|
|
65
|
+
MESSAGE
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
end
|
data/test/sass/engine_test.rb
CHANGED
|
@@ -2903,12 +2903,6 @@ SCSS
|
|
|
2903
2903
|
assert_equal original_filename, importer.engine("imported").options[:original_filename]
|
|
2904
2904
|
end
|
|
2905
2905
|
|
|
2906
|
-
def test_deprecated_PRECISION
|
|
2907
|
-
assert_warning(<<END) {assert_equal 100_000.0, Sass::Script::Number::PRECISION}
|
|
2908
|
-
Sass::Script::Number::PRECISION is deprecated and will be removed in a future release. Use Sass::Script::Number.precision_factor instead.
|
|
2909
|
-
END
|
|
2910
|
-
end
|
|
2911
|
-
|
|
2912
2906
|
def test_changing_precision
|
|
2913
2907
|
old_precision = Sass::Script::Number.precision
|
|
2914
2908
|
begin
|
data/test/sass/extend_test.rb
CHANGED
|
@@ -154,7 +154,7 @@ SCSS
|
|
|
154
154
|
assert_unification '.foo#baz', '#baz {@extend .foo}', '#baz'
|
|
155
155
|
|
|
156
156
|
assert_extend_doesnt_match('#bar', '.foo', :failed_to_unify, 2) do
|
|
157
|
-
|
|
157
|
+
render_unification '.foo#baz', '#bar {@extend .foo}'
|
|
158
158
|
end
|
|
159
159
|
end
|
|
160
160
|
|
|
@@ -180,7 +180,7 @@ SCSS
|
|
|
180
180
|
assert_unification 'ns|*.foo', '*|* {@extend .foo}', 'ns|*'
|
|
181
181
|
|
|
182
182
|
assert_extend_doesnt_match('ns2|*', '.foo', :failed_to_unify, 2) do
|
|
183
|
-
|
|
183
|
+
render_unification 'ns1|*.foo', 'ns2|* {@extend .foo}'
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
assert_unification 'ns|*.foo', 'ns|* {@extend .foo}', 'ns|*'
|
|
@@ -200,7 +200,7 @@ SCSS
|
|
|
200
200
|
assert_unification 'ns|a.foo', '*|* {@extend .foo}', 'ns|a'
|
|
201
201
|
|
|
202
202
|
assert_extend_doesnt_match('ns2|*', '.foo', :failed_to_unify, 2) do
|
|
203
|
-
|
|
203
|
+
render_unification 'ns1|a.foo', 'ns2|* {@extend .foo}'
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
assert_unification 'ns|a.foo', 'ns|* {@extend .foo}', 'ns|a'
|
|
@@ -227,7 +227,7 @@ SCSS
|
|
|
227
227
|
assert_unification 'ns|*.foo', '*|a {@extend .foo}', 'ns|*.foo, ns|a'
|
|
228
228
|
|
|
229
229
|
assert_extend_doesnt_match('ns2|a', '.foo', :failed_to_unify, 2) do
|
|
230
|
-
|
|
230
|
+
render_unification 'ns1|*.foo', 'ns2|a {@extend .foo}'
|
|
231
231
|
end
|
|
232
232
|
|
|
233
233
|
assert_unification 'ns|*.foo', 'ns|a {@extend .foo}', 'ns|*.foo, ns|a'
|
|
@@ -242,7 +242,7 @@ SCSS
|
|
|
242
242
|
assert_unification '*|a.foo', 'ns|a {@extend .foo}', '*|a.foo, ns|a'
|
|
243
243
|
|
|
244
244
|
assert_extend_doesnt_match('h1', '.foo', :failed_to_unify, 2) do
|
|
245
|
-
|
|
245
|
+
render_unification 'a.foo', 'h1 {@extend .foo}'
|
|
246
246
|
end
|
|
247
247
|
end
|
|
248
248
|
|
|
@@ -251,7 +251,7 @@ SCSS
|
|
|
251
251
|
assert_unification 'ns|a.foo', '*|a {@extend .foo}', 'ns|a'
|
|
252
252
|
|
|
253
253
|
assert_extend_doesnt_match('ns2|a', '.foo', :failed_to_unify, 2) do
|
|
254
|
-
|
|
254
|
+
render_unification 'ns1|a.foo', 'ns2|a {@extend .foo}'
|
|
255
255
|
end
|
|
256
256
|
|
|
257
257
|
assert_unification 'ns|a.foo', 'ns|a {@extend .foo}', 'ns|a'
|
|
@@ -270,11 +270,11 @@ SCSS
|
|
|
270
270
|
assert_unification ':foo.baz', '::foo {@extend .baz}', ':foo.baz, :foo::foo'
|
|
271
271
|
|
|
272
272
|
assert_extend_doesnt_match('::bar', '.baz', :failed_to_unify, 2) do
|
|
273
|
-
|
|
273
|
+
render_unification '::foo.baz', '::bar {@extend .baz}'
|
|
274
274
|
end
|
|
275
275
|
|
|
276
276
|
assert_extend_doesnt_match('::foo(2n+1)', '.baz', :failed_to_unify, 2) do
|
|
277
|
-
|
|
277
|
+
render_unification '::foo.baz', '::foo(2n+1) {@extend .baz}'
|
|
278
278
|
end
|
|
279
279
|
|
|
280
280
|
assert_unification '::foo.baz', '::foo {@extend .baz}', '::foo'
|
|
@@ -348,7 +348,7 @@ SCSS
|
|
|
348
348
|
|
|
349
349
|
def test_long_extendee_requires_all_selectors
|
|
350
350
|
assert_extend_doesnt_match('.baz', '.foo.bar', :not_found, 2) do
|
|
351
|
-
|
|
351
|
+
render_extends '.foo', '.baz {@extend .foo.bar}'
|
|
352
352
|
end
|
|
353
353
|
end
|
|
354
354
|
|
|
@@ -372,11 +372,11 @@ SCSS
|
|
|
372
372
|
|
|
373
373
|
def test_long_extender_aborts_unification
|
|
374
374
|
assert_extend_doesnt_match('h1.baz', '.foo', :failed_to_unify, 2) do
|
|
375
|
-
|
|
375
|
+
render_extends 'a.foo#bar', 'h1.baz {@extend .foo}'
|
|
376
376
|
end
|
|
377
377
|
|
|
378
378
|
assert_extend_doesnt_match('.bang#baz', '.foo', :failed_to_unify, 2) do
|
|
379
|
-
|
|
379
|
+
render_extends 'a.foo#bar', '.bang#baz {@extend .foo}'
|
|
380
380
|
end
|
|
381
381
|
end
|
|
382
382
|
|
|
@@ -392,7 +392,7 @@ SCSS
|
|
|
392
392
|
|
|
393
393
|
def test_nested_extender_aborts_unification
|
|
394
394
|
assert_extend_doesnt_match('foo bar', '.foo', :failed_to_unify, 2) do
|
|
395
|
-
|
|
395
|
+
render_extends 'baz.foo', 'foo bar {@extend .foo}'
|
|
396
396
|
end
|
|
397
397
|
end
|
|
398
398
|
|
|
@@ -810,10 +810,7 @@ SCSS
|
|
|
810
810
|
|
|
811
811
|
def test_placeholder_selector_as_modifier
|
|
812
812
|
assert_extend_doesnt_match('div', '%foo', :failed_to_unify, 3) do
|
|
813
|
-
|
|
814
|
-
a.baz.bar {
|
|
815
|
-
color: blue; }
|
|
816
|
-
CSS
|
|
813
|
+
render(<<SCSS)
|
|
817
814
|
a%foo.baz {color: blue}
|
|
818
815
|
.bar {@extend %foo}
|
|
819
816
|
div {@extend %foo}
|
|
@@ -844,16 +841,11 @@ SCSS
|
|
|
844
841
|
end
|
|
845
842
|
|
|
846
843
|
def test_extend_out_of_media
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
It can only work once @extend is supported natively in the browser.
|
|
853
|
-
WARN
|
|
854
|
-
.foo {
|
|
855
|
-
a: b; }
|
|
856
|
-
CSS
|
|
844
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
845
|
+
You may not @extend an outer selector from within @media.
|
|
846
|
+
You may only @extend selectors within the same directive.
|
|
847
|
+
From "@extend .foo" on line 3 of test_extend_out_of_media_inline.scss.
|
|
848
|
+
ERR
|
|
857
849
|
.foo {a: b}
|
|
858
850
|
@media screen {
|
|
859
851
|
.bar {@extend .foo}
|
|
@@ -862,18 +854,11 @@ SCSS
|
|
|
862
854
|
end
|
|
863
855
|
|
|
864
856
|
def test_extend_out_of_unknown_directive
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
It can only work once @extend is supported natively in the browser.
|
|
871
|
-
WARN
|
|
872
|
-
.foo {
|
|
873
|
-
a: b; }
|
|
874
|
-
|
|
875
|
-
@flooblehoof {}
|
|
876
|
-
CSS
|
|
857
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
858
|
+
You may not @extend an outer selector from within @flooblehoof.
|
|
859
|
+
You may only @extend selectors within the same directive.
|
|
860
|
+
From "@extend .foo" on line 3 of test_extend_out_of_unknown_directive_inline.scss.
|
|
861
|
+
ERR
|
|
877
862
|
.foo {a: b}
|
|
878
863
|
@flooblehoof {
|
|
879
864
|
.bar {@extend .foo}
|
|
@@ -882,19 +867,11 @@ SCSS
|
|
|
882
867
|
end
|
|
883
868
|
|
|
884
869
|
def test_extend_out_of_nested_directives
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
It can only work once @extend is supported natively in the browser.
|
|
891
|
-
WARN
|
|
892
|
-
@media screen {
|
|
893
|
-
.foo {
|
|
894
|
-
a: b; }
|
|
895
|
-
|
|
896
|
-
@flooblehoof {} }
|
|
897
|
-
CSS
|
|
870
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
871
|
+
You may not @extend an outer selector from within @flooblehoof.
|
|
872
|
+
You may only @extend selectors within the same directive.
|
|
873
|
+
From "@extend .foo" on line 4 of test_extend_out_of_nested_directives_inline.scss.
|
|
874
|
+
ERR
|
|
898
875
|
@media screen {
|
|
899
876
|
.foo {a: b}
|
|
900
877
|
@flooblehoof {
|
|
@@ -985,20 +962,11 @@ SCSS
|
|
|
985
962
|
end
|
|
986
963
|
|
|
987
964
|
def test_extend_within_and_without_media
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
It can only work once @extend is supported natively in the browser.
|
|
994
|
-
WARN
|
|
995
|
-
.foo {
|
|
996
|
-
a: b; }
|
|
997
|
-
|
|
998
|
-
@media screen {
|
|
999
|
-
.foo, .bar {
|
|
1000
|
-
c: d; } }
|
|
1001
|
-
CSS
|
|
965
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
966
|
+
You may not @extend an outer selector from within @media.
|
|
967
|
+
You may only @extend selectors within the same directive.
|
|
968
|
+
From "@extend .foo" on line 4 of test_extend_within_and_without_media_inline.scss.
|
|
969
|
+
ERR
|
|
1002
970
|
.foo {a: b}
|
|
1003
971
|
@media screen {
|
|
1004
972
|
.foo {c: d}
|
|
@@ -1008,20 +976,11 @@ SCSS
|
|
|
1008
976
|
end
|
|
1009
977
|
|
|
1010
978
|
def test_extend_within_and_without_unknown_directive
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
It can only work once @extend is supported natively in the browser.
|
|
1017
|
-
WARN
|
|
1018
|
-
.foo {
|
|
1019
|
-
a: b; }
|
|
1020
|
-
|
|
1021
|
-
@flooblehoof {
|
|
1022
|
-
.foo, .bar {
|
|
1023
|
-
c: d; } }
|
|
1024
|
-
CSS
|
|
979
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
980
|
+
You may not @extend an outer selector from within @flooblehoof.
|
|
981
|
+
You may only @extend selectors within the same directive.
|
|
982
|
+
From "@extend .foo" on line 4 of test_extend_within_and_without_unknown_directive_inline.scss.
|
|
983
|
+
ERR
|
|
1025
984
|
.foo {a: b}
|
|
1026
985
|
@flooblehoof {
|
|
1027
986
|
.foo {c: d}
|
|
@@ -1031,21 +990,11 @@ SCSS
|
|
|
1031
990
|
end
|
|
1032
991
|
|
|
1033
992
|
def test_extend_within_and_without_nested_directives
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
It can only work once @extend is supported natively in the browser.
|
|
1040
|
-
WARN
|
|
1041
|
-
@media screen {
|
|
1042
|
-
.foo {
|
|
1043
|
-
a: b; }
|
|
1044
|
-
|
|
1045
|
-
@flooblehoof {
|
|
1046
|
-
.foo, .bar {
|
|
1047
|
-
c: d; } } }
|
|
1048
|
-
CSS
|
|
993
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
994
|
+
You may not @extend an outer selector from within @flooblehoof.
|
|
995
|
+
You may only @extend selectors within the same directive.
|
|
996
|
+
From "@extend .foo" on line 5 of test_extend_within_and_without_nested_directives_inline.scss.
|
|
997
|
+
ERR
|
|
1049
998
|
@media screen {
|
|
1050
999
|
.foo {a: b}
|
|
1051
1000
|
@flooblehoof {
|
|
@@ -1115,33 +1064,28 @@ SCSS
|
|
|
1115
1064
|
end
|
|
1116
1065
|
|
|
1117
1066
|
def test_extend_warns_when_extendee_doesnt_exist
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
WARN
|
|
1067
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
1068
|
+
".foo" failed to @extend ".bar".
|
|
1069
|
+
The selector ".bar" was not found.
|
|
1070
|
+
Use "@extend .bar !optional" if the extend should be able to fail.
|
|
1071
|
+
ERR
|
|
1124
1072
|
.foo {@extend .bar}
|
|
1125
1073
|
SCSS
|
|
1126
1074
|
end
|
|
1127
1075
|
|
|
1128
1076
|
def test_extend_warns_when_extension_fails
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
WARN
|
|
1135
|
-
a.bar {
|
|
1136
|
-
a: b; }
|
|
1137
|
-
CSS
|
|
1077
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
|
1078
|
+
"b.foo" failed to @extend ".bar".
|
|
1079
|
+
No selectors matching ".bar" could be unified with "b.foo".
|
|
1080
|
+
Use "@extend .bar !optional" if the extend should be able to fail.
|
|
1081
|
+
ERR
|
|
1138
1082
|
a.bar {a: b}
|
|
1139
1083
|
b.foo {@extend .bar}
|
|
1140
1084
|
SCSS
|
|
1141
1085
|
end
|
|
1142
1086
|
|
|
1143
|
-
def
|
|
1144
|
-
|
|
1087
|
+
def test_extend_succeeds_when_one_extension_fails_but_others_dont
|
|
1088
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1145
1089
|
a.bar {
|
|
1146
1090
|
a: b; }
|
|
1147
1091
|
|
|
@@ -1154,8 +1098,8 @@ b.foo {@extend .bar}
|
|
|
1154
1098
|
SCSS
|
|
1155
1099
|
end
|
|
1156
1100
|
|
|
1157
|
-
def
|
|
1158
|
-
|
|
1101
|
+
def test_extend_succeeds_when_one_extension_fails_but_others_dont
|
|
1102
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1159
1103
|
a.bar {
|
|
1160
1104
|
a: b; }
|
|
1161
1105
|
|
|
@@ -1168,14 +1112,14 @@ b.foo {@extend .bar}
|
|
|
1168
1112
|
SCSS
|
|
1169
1113
|
end
|
|
1170
1114
|
|
|
1171
|
-
def
|
|
1172
|
-
|
|
1115
|
+
def test_optional_extend_succeeds_when_extendee_doesnt_exist
|
|
1116
|
+
assert_equal("", render(<<SCSS))
|
|
1173
1117
|
.foo {@extend .bar !optional}
|
|
1174
1118
|
SCSS
|
|
1175
1119
|
end
|
|
1176
1120
|
|
|
1177
|
-
def
|
|
1178
|
-
|
|
1121
|
+
def test_optional_extend_succeeds_when_extension_fails
|
|
1122
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1179
1123
|
a.bar {
|
|
1180
1124
|
a: b; }
|
|
1181
1125
|
CSS
|
|
@@ -1295,7 +1239,7 @@ SCSS
|
|
|
1295
1239
|
private
|
|
1296
1240
|
|
|
1297
1241
|
def assert_extend_doesnt_match(extender, target, reason, line, syntax = :scss)
|
|
1298
|
-
|
|
1242
|
+
message = "\"#{extender}\" failed to @extend \"#{target}\"."
|
|
1299
1243
|
reason =
|
|
1300
1244
|
if reason == :not_found
|
|
1301
1245
|
"The selector \"#{target}\" was not found."
|
|
@@ -1303,12 +1247,11 @@ SCSS
|
|
|
1303
1247
|
"No selectors matching \"#{target}\" could be unified with \"#{extender}\"."
|
|
1304
1248
|
end
|
|
1305
1249
|
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
WARNING
|
|
1250
|
+
assert_raise_message(Sass::SyntaxError, <<ERR) {yield}
|
|
1251
|
+
#{message}
|
|
1252
|
+
#{reason}
|
|
1253
|
+
Use "@extend #{target} !optional" if the extend should be able to fail.
|
|
1254
|
+
ERR
|
|
1312
1255
|
end
|
|
1313
1256
|
|
|
1314
1257
|
def assert_unification(selector, extension, unified)
|
|
@@ -1319,11 +1262,21 @@ WARNING
|
|
|
1319
1262
|
unified.split(', ').map {|s| "-a #{s}"}.join(', '))
|
|
1320
1263
|
end
|
|
1321
1264
|
|
|
1265
|
+
def render_unification(selector, extension)
|
|
1266
|
+
render_extends(
|
|
1267
|
+
"%-a #{selector}",
|
|
1268
|
+
extension + " -a {@extend %-a}")
|
|
1269
|
+
end
|
|
1270
|
+
|
|
1322
1271
|
def assert_extends(selector, extension, result)
|
|
1323
|
-
assert_equal <<CSS,
|
|
1272
|
+
assert_equal <<CSS, render_extends(selector, extension)
|
|
1324
1273
|
#{result} {
|
|
1325
1274
|
a: b; }
|
|
1326
1275
|
CSS
|
|
1276
|
+
end
|
|
1277
|
+
|
|
1278
|
+
def render_extends(selector, extension)
|
|
1279
|
+
render(<<SCSS)
|
|
1327
1280
|
#{selector} {a: b}
|
|
1328
1281
|
#{extension}
|
|
1329
1282
|
SCSS
|
data/test/sass/plugin_test.rb
CHANGED
|
@@ -222,7 +222,6 @@ WARNING: In #{template_loc}:
|
|
|
222
222
|
There are multiple files that match the name "same_name_different_partiality.scss":
|
|
223
223
|
_same_name_different_partiality.scss
|
|
224
224
|
same_name_different_partiality.scss
|
|
225
|
-
This will be an error in future versions of Sass.
|
|
226
225
|
WARNING
|
|
227
226
|
touch "_same_name_different_partiality"
|
|
228
227
|
assert_needs_update "same_name_different_partiality"
|
|
@@ -231,17 +230,6 @@ WARNING
|
|
|
231
230
|
|
|
232
231
|
# Callbacks
|
|
233
232
|
|
|
234
|
-
def test_updating_stylesheets_callback
|
|
235
|
-
# Should run even when there's nothing to update
|
|
236
|
-
Sass::Plugin.options[:template_location] = nil
|
|
237
|
-
assert_callback :updating_stylesheets, []
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
def test_updating_stylesheets_callback_with_never_update
|
|
241
|
-
Sass::Plugin.options[:never_update] = true
|
|
242
|
-
assert_no_callback :updating_stylesheets
|
|
243
|
-
end
|
|
244
|
-
|
|
245
233
|
def test_updated_stylesheet_callback_for_updated_template
|
|
246
234
|
Sass::Plugin.options[:always_update] = false
|
|
247
235
|
touch 'basic'
|
data/test/sass/scss/scss_test.rb
CHANGED
|
@@ -1711,6 +1711,41 @@ SCSS
|
|
|
1711
1711
|
|
|
1712
1712
|
# Regression
|
|
1713
1713
|
|
|
1714
|
+
def test_parsing_decimals_followed_by_comments_doesnt_take_forever
|
|
1715
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1716
|
+
.foo {
|
|
1717
|
+
padding: 4.21053% 4.21053% 5.63158%; }
|
|
1718
|
+
CSS
|
|
1719
|
+
.foo {
|
|
1720
|
+
padding: 4.21052631578947% 4.21052631578947% 5.631578947368421% /**/
|
|
1721
|
+
}
|
|
1722
|
+
SCSS
|
|
1723
|
+
end
|
|
1724
|
+
|
|
1725
|
+
def test_parsing_many_numbers_doesnt_take_forever
|
|
1726
|
+
values = ["80% 90%"] * 1000
|
|
1727
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1728
|
+
.foo {
|
|
1729
|
+
padding: #{values.join(', ')}; }
|
|
1730
|
+
CSS
|
|
1731
|
+
.foo {
|
|
1732
|
+
padding: #{values.join(', ')};
|
|
1733
|
+
}
|
|
1734
|
+
SCSS
|
|
1735
|
+
end
|
|
1736
|
+
|
|
1737
|
+
def test_import_comments_in_imports
|
|
1738
|
+
assert_equal(<<CSS, render(<<SCSS))
|
|
1739
|
+
@import url(foo.css);
|
|
1740
|
+
@import url(bar.css);
|
|
1741
|
+
@import url(baz.css);
|
|
1742
|
+
CSS
|
|
1743
|
+
@import "foo.css", // this is a comment
|
|
1744
|
+
"bar.css", // this is another comment
|
|
1745
|
+
"baz.css"; // this is a third comment
|
|
1746
|
+
SCSS
|
|
1747
|
+
end
|
|
1748
|
+
|
|
1714
1749
|
def test_reference_combinator_with_parent_ref
|
|
1715
1750
|
assert_equal <<CSS, render(<<SCSS)
|
|
1716
1751
|
a /foo/ b {
|
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: 592302971
|
|
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
|
+
- 59
|
|
12
|
+
version: 3.3.0.alpha.59
|
|
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: 2012-
|
|
22
|
+
date: 2012-12-21 00:00:00 -05:00
|
|
23
23
|
default_executable:
|
|
24
24
|
dependencies:
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
@@ -132,6 +132,7 @@ files:
|
|
|
132
132
|
- lib/sass/selector/simple.rb
|
|
133
133
|
- lib/sass/selector/simple_sequence.rb
|
|
134
134
|
- lib/sass/shared.rb
|
|
135
|
+
- lib/sass/util.rb
|
|
135
136
|
- lib/sass/supports.rb
|
|
136
137
|
- lib/sass/tree/charset_node.rb
|
|
137
138
|
- lib/sass/tree/comment_node.rb
|
|
@@ -167,13 +168,12 @@ files:
|
|
|
167
168
|
- lib/sass/tree/visitors/to_css.rb
|
|
168
169
|
- lib/sass/tree/warn_node.rb
|
|
169
170
|
- lib/sass/tree/while_node.rb
|
|
170
|
-
- lib/sass/util.rb
|
|
171
|
-
- lib/sass/util/multibyte_string_scanner.rb
|
|
172
|
-
- lib/sass/util/subset_map.rb
|
|
173
|
-
- lib/sass/version.rb
|
|
174
171
|
- lib/sass/source/map.rb
|
|
175
172
|
- lib/sass/source/position.rb
|
|
176
173
|
- lib/sass/source/range.rb
|
|
174
|
+
- lib/sass/util/multibyte_string_scanner.rb
|
|
175
|
+
- lib/sass/util/subset_map.rb
|
|
176
|
+
- lib/sass/version.rb
|
|
177
177
|
- vendor/listen/CHANGELOG.md
|
|
178
178
|
- vendor/listen/Gemfile
|
|
179
179
|
- vendor/listen/Guardfile
|
|
@@ -268,6 +268,7 @@ files:
|
|
|
268
268
|
- test/sass/scss/rx_test.rb
|
|
269
269
|
- test/sass/scss/scss_test.rb
|
|
270
270
|
- test/sass/scss/test_helper.rb
|
|
271
|
+
- test/sass/util_test.rb
|
|
271
272
|
- test/sass/templates/_cached_import_option_partial.scss
|
|
272
273
|
- test/sass/templates/_double_import_loop2.sass
|
|
273
274
|
- test/sass/templates/_filename_fn_import.scss
|
|
@@ -326,7 +327,6 @@ files:
|
|
|
326
327
|
- test/sass/test_helper.rb
|
|
327
328
|
- test/sass/util/multibyte_string_scanner_test.rb
|
|
328
329
|
- test/sass/util/subset_map_test.rb
|
|
329
|
-
- test/sass/util_test.rb
|
|
330
330
|
- test/sass/source_map_test.rb
|
|
331
331
|
- test/test_helper.rb
|
|
332
332
|
- extra/update_watch.rb
|
|
@@ -394,7 +394,7 @@ test_files:
|
|
|
394
394
|
- test/sass/scss/css_test.rb
|
|
395
395
|
- test/sass/scss/rx_test.rb
|
|
396
396
|
- test/sass/scss/scss_test.rb
|
|
397
|
+
- test/sass/util_test.rb
|
|
397
398
|
- test/sass/util/multibyte_string_scanner_test.rb
|
|
398
399
|
- test/sass/util/subset_map_test.rb
|
|
399
|
-
- test/sass/util_test.rb
|
|
400
400
|
- test/sass/source_map_test.rb
|