sass 3.1.0 → 3.3.0
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 +7 -0
- data/CONTRIBUTING +1 -1
- data/MIT-LICENSE +2 -2
- data/README.md +29 -17
- data/Rakefile +43 -9
- data/VERSION +1 -1
- data/VERSION_DATE +1 -0
- data/VERSION_NAME +1 -1
- data/bin/sass +6 -1
- data/bin/sass-convert +6 -1
- data/bin/scss +6 -1
- data/ext/mkrf_conf.rb +27 -0
- data/lib/sass/cache_stores/base.rb +7 -3
- data/lib/sass/cache_stores/chain.rb +3 -2
- data/lib/sass/cache_stores/filesystem.rb +5 -7
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +2 -1
- data/lib/sass/css.rb +168 -53
- data/lib/sass/engine.rb +502 -174
- data/lib/sass/environment.rb +151 -111
- data/lib/sass/error.rb +7 -7
- data/lib/sass/exec.rb +176 -60
- data/lib/sass/features.rb +40 -0
- data/lib/sass/importers/base.rb +46 -7
- data/lib/sass/importers/deprecated_path.rb +51 -0
- data/lib/sass/importers/filesystem.rb +113 -30
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +30 -0
- data/lib/sass/logger/log_level.rb +45 -0
- data/lib/sass/logger.rb +12 -0
- data/lib/sass/media.rb +213 -0
- data/lib/sass/plugin/compiler.rb +194 -104
- data/lib/sass/plugin/configuration.rb +18 -25
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +37 -11
- data/lib/sass/plugin.rb +10 -13
- data/lib/sass/railtie.rb +2 -1
- data/lib/sass/repl.rb +5 -6
- data/lib/sass/script/css_lexer.rb +8 -4
- data/lib/sass/script/css_parser.rb +5 -2
- data/lib/sass/script/functions.rb +1547 -618
- data/lib/sass/script/lexer.rb +122 -72
- data/lib/sass/script/parser.rb +304 -135
- data/lib/sass/script/tree/funcall.rb +306 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +43 -13
- data/lib/sass/script/tree/list_literal.rb +77 -0
- data/lib/sass/script/tree/literal.rb +45 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +30 -12
- data/lib/sass/script/{operation.rb → tree/operation.rb} +33 -21
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +14 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +21 -9
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +15 -0
- data/lib/sass/script/value/arg_list.rb +36 -0
- data/lib/sass/script/value/base.rb +238 -0
- data/lib/sass/script/value/bool.rb +40 -0
- data/lib/sass/script/{color.rb → value/color.rb} +256 -74
- data/lib/sass/script/value/deprecated_false.rb +55 -0
- data/lib/sass/script/value/helpers.rb +155 -0
- data/lib/sass/script/value/list.rb +128 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +49 -0
- data/lib/sass/script/{number.rb → value/number.rb} +115 -62
- data/lib/sass/script/{string.rb → value/string.rb} +9 -11
- data/lib/sass/script/value.rb +12 -0
- data/lib/sass/script.rb +35 -9
- data/lib/sass/scss/css_parser.rb +2 -12
- data/lib/sass/scss/parser.rb +657 -230
- data/lib/sass/scss/rx.rb +17 -12
- data/lib/sass/scss/static_parser.rb +37 -6
- data/lib/sass/scss.rb +0 -1
- data/lib/sass/selector/abstract_sequence.rb +35 -3
- data/lib/sass/selector/comma_sequence.rb +29 -14
- data/lib/sass/selector/sequence.rb +371 -74
- data/lib/sass/selector/simple.rb +28 -13
- data/lib/sass/selector/simple_sequence.rb +163 -36
- data/lib/sass/selector.rb +138 -36
- data/lib/sass/shared.rb +3 -5
- data/lib/sass/source/map.rb +196 -0
- data/lib/sass/source/position.rb +39 -0
- data/lib/sass/source/range.rb +41 -0
- data/lib/sass/stack.rb +126 -0
- data/lib/sass/supports.rb +228 -0
- data/lib/sass/tree/at_root_node.rb +82 -0
- data/lib/sass/tree/comment_node.rb +34 -29
- data/lib/sass/tree/content_node.rb +9 -0
- data/lib/sass/tree/css_import_node.rb +60 -0
- data/lib/sass/tree/debug_node.rb +3 -3
- data/lib/sass/tree/directive_node.rb +33 -3
- data/lib/sass/tree/each_node.rb +9 -9
- data/lib/sass/tree/extend_node.rb +20 -6
- data/lib/sass/tree/for_node.rb +6 -6
- data/lib/sass/tree/function_node.rb +12 -4
- data/lib/sass/tree/if_node.rb +2 -15
- data/lib/sass/tree/import_node.rb +11 -5
- data/lib/sass/tree/media_node.rb +27 -11
- data/lib/sass/tree/mixin_def_node.rb +15 -4
- data/lib/sass/tree/mixin_node.rb +27 -7
- data/lib/sass/tree/node.rb +69 -35
- data/lib/sass/tree/prop_node.rb +47 -31
- data/lib/sass/tree/return_node.rb +4 -3
- data/lib/sass/tree/root_node.rb +20 -4
- data/lib/sass/tree/rule_node.rb +37 -26
- data/lib/sass/tree/supports_node.rb +38 -0
- data/lib/sass/tree/trace_node.rb +33 -0
- data/lib/sass/tree/variable_node.rb +10 -4
- data/lib/sass/tree/visitors/base.rb +5 -8
- data/lib/sass/tree/visitors/check_nesting.rb +67 -52
- data/lib/sass/tree/visitors/convert.rb +134 -53
- data/lib/sass/tree/visitors/cssize.rb +245 -51
- data/lib/sass/tree/visitors/deep_copy.rb +102 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +331 -105
- data/lib/sass/tree/visitors/set_options.rb +125 -0
- data/lib/sass/tree/visitors/to_css.rb +259 -95
- data/lib/sass/tree/warn_node.rb +3 -3
- data/lib/sass/tree/while_node.rb +3 -3
- data/lib/sass/util/cross_platform_random.rb +19 -0
- data/lib/sass/util/multibyte_string_scanner.rb +157 -0
- data/lib/sass/util/normalized_map.rb +130 -0
- data/lib/sass/util/ordered_hash.rb +192 -0
- data/lib/sass/util/subset_map.rb +11 -2
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +565 -39
- data/lib/sass/version.rb +27 -15
- data/lib/sass.rb +39 -4
- data/test/sass/cache_test.rb +15 -0
- data/test/sass/compiler_test.rb +223 -0
- data/test/sass/conversion_test.rb +901 -107
- data/test/sass/css2sass_test.rb +94 -0
- data/test/sass/engine_test.rb +1059 -164
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +933 -837
- data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/test/sass/functions_test.rb +995 -136
- data/test/sass/importer_test.rb +338 -18
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/more_results/more_import.css +2 -2
- data/test/sass/plugin_test.rb +114 -30
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/import.css +2 -2
- data/test/sass/results/import_charset.css +1 -0
- data/test/sass/results/import_charset_1_8.css +1 -0
- data/test/sass/results/import_charset_ibm866.css +1 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/script.css +1 -1
- data/test/sass/results/scss_import.css +2 -2
- data/test/sass/results/units.css +2 -2
- data/test/sass/script_conversion_test.rb +43 -1
- data/test/sass/script_test.rb +380 -36
- data/test/sass/scss/css_test.rb +257 -75
- data/test/sass/scss/scss_test.rb +2322 -110
- data/test/sass/source_map_test.rb +887 -0
- data/test/sass/templates/_cached_import_option_partial.scss +1 -0
- data/test/sass/templates/_double_import_loop2.sass +1 -0
- data/test/sass/templates/_filename_fn_import.scss +11 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/import_charset.sass +2 -0
- data/test/sass/templates/import_charset_1_8.sass +2 -0
- data/test/sass/templates/import_charset_ibm866.sass +2 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/same_name_different_ext.sass +2 -0
- data/test/sass/templates/same_name_different_ext.scss +1 -0
- data/test/sass/templates/same_name_different_partiality.scss +1 -0
- data/test/sass/templates/single_import_loop.sass +1 -0
- data/test/sass/templates/subdir/import_up1.scss +1 -0
- data/test/sass/templates/subdir/import_up2.scss +1 -0
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
- data/test/sass/util/normalized_map_test.rb +51 -0
- data/test/sass/util_test.rb +183 -0
- data/test/sass/value_helpers_test.rb +181 -0
- data/test/test_helper.rb +45 -5
- data/vendor/listen/CHANGELOG.md +228 -0
- data/vendor/listen/CONTRIBUTING.md +38 -0
- data/vendor/listen/Gemfile +30 -0
- data/vendor/listen/Guardfile +8 -0
- data/vendor/{fssm → listen}/LICENSE +1 -1
- data/vendor/listen/README.md +315 -0
- data/vendor/listen/Rakefile +47 -0
- data/vendor/listen/Vagrantfile +96 -0
- data/vendor/listen/lib/listen/adapter.rb +214 -0
- data/vendor/listen/lib/listen/adapters/bsd.rb +112 -0
- data/vendor/listen/lib/listen/adapters/darwin.rb +85 -0
- data/vendor/listen/lib/listen/adapters/linux.rb +113 -0
- data/vendor/listen/lib/listen/adapters/polling.rb +67 -0
- data/vendor/listen/lib/listen/adapters/windows.rb +87 -0
- data/vendor/listen/lib/listen/dependency_manager.rb +126 -0
- data/vendor/listen/lib/listen/directory_record.rb +371 -0
- data/vendor/listen/lib/listen/listener.rb +225 -0
- data/vendor/listen/lib/listen/multi_listener.rb +143 -0
- data/vendor/listen/lib/listen/turnstile.rb +28 -0
- data/vendor/listen/lib/listen/version.rb +3 -0
- data/vendor/listen/lib/listen.rb +40 -0
- data/vendor/listen/listen.gemspec +22 -0
- data/vendor/listen/spec/listen/adapter_spec.rb +183 -0
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +36 -0
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +37 -0
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +47 -0
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +30 -0
- data/vendor/listen/spec/listen/dependency_manager_spec.rb +107 -0
- data/vendor/listen/spec/listen/directory_record_spec.rb +1225 -0
- data/vendor/listen/spec/listen/listener_spec.rb +169 -0
- data/vendor/listen/spec/listen/multi_listener_spec.rb +174 -0
- data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
- data/vendor/listen/spec/listen_spec.rb +73 -0
- data/vendor/listen/spec/spec_helper.rb +21 -0
- data/vendor/listen/spec/support/adapter_helper.rb +629 -0
- data/vendor/listen/spec/support/directory_record_helper.rb +55 -0
- data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
- data/vendor/listen/spec/support/listeners_helper.rb +156 -0
- data/vendor/listen/spec/support/platform_helper.rb +15 -0
- metadata +344 -271
- data/lib/sass/less.rb +0 -382
- data/lib/sass/script/bool.rb +0 -18
- data/lib/sass/script/funcall.rb +0 -162
- data/lib/sass/script/list.rb +0 -76
- data/lib/sass/script/literal.rb +0 -245
- data/lib/sass/script/variable.rb +0 -54
- data/lib/sass/scss/sass_parser.rb +0 -11
- data/test/sass/less_conversion_test.rb +0 -653
- data/vendor/fssm/README.markdown +0 -55
- data/vendor/fssm/Rakefile +0 -59
- data/vendor/fssm/VERSION.yml +0 -5
- data/vendor/fssm/example.rb +0 -9
- data/vendor/fssm/fssm.gemspec +0 -77
- data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
- data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
- data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
- data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
- data/vendor/fssm/lib/fssm/monitor.rb +0 -26
- data/vendor/fssm/lib/fssm/path.rb +0 -91
- data/vendor/fssm/lib/fssm/pathname.rb +0 -502
- data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
- data/vendor/fssm/lib/fssm/state/file.rb +0 -24
- data/vendor/fssm/lib/fssm/support.rb +0 -63
- data/vendor/fssm/lib/fssm/tree.rb +0 -176
- data/vendor/fssm/lib/fssm.rb +0 -33
- data/vendor/fssm/profile/prof-cache.rb +0 -40
- data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
- data/vendor/fssm/profile/prof-pathname.rb +0 -68
- data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
- data/vendor/fssm/profile/prof.html +0 -2379
- data/vendor/fssm/spec/path_spec.rb +0 -75
- data/vendor/fssm/spec/root/duck/quack.txt +0 -0
- data/vendor/fssm/spec/root/file.css +0 -0
- data/vendor/fssm/spec/root/file.rb +0 -0
- data/vendor/fssm/spec/root/file.yml +0 -0
- data/vendor/fssm/spec/root/moo/cow.txt +0 -0
- data/vendor/fssm/spec/spec_helper.rb +0 -14
data/lib/sass/environment.rb
CHANGED
@@ -1,114 +1,20 @@
|
|
1
1
|
require 'set'
|
2
2
|
|
3
3
|
module Sass
|
4
|
-
# The lexical
|
5
|
-
|
6
|
-
#
|
7
|
-
# A new environment is created for each level of Sass nesting.
|
8
|
-
# This allows variables to be lexically scoped.
|
9
|
-
# The new environment refers to the environment in the upper scope,
|
10
|
-
# so it has access to variables defined in enclosing scopes,
|
11
|
-
# but new variables are defined locally.
|
12
|
-
#
|
13
|
-
# Environment also keeps track of the {Engine} options
|
14
|
-
# so that they can be made available to {Sass::Script::Functions}.
|
15
|
-
class Environment
|
16
|
-
# The enclosing environment,
|
17
|
-
# or nil if this is the global environment.
|
18
|
-
#
|
19
|
-
# @return [Environment]
|
20
|
-
attr_reader :parent
|
21
|
-
attr_writer :options
|
22
|
-
|
23
|
-
# @param parent [Environment] See \{#parent}
|
24
|
-
def initialize(parent = nil)
|
25
|
-
@parent = parent
|
26
|
-
unless parent
|
27
|
-
@stack = []
|
28
|
-
@mixins_in_use = Set.new
|
29
|
-
set_var("important", Script::String.new("!important"))
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# The options hash.
|
34
|
-
# See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
|
35
|
-
#
|
36
|
-
# @return [{Symbol => Object}]
|
37
|
-
def options
|
38
|
-
@options || parent_options || {}
|
39
|
-
end
|
40
|
-
|
41
|
-
# Push a new stack frame onto the mixin/include stack.
|
42
|
-
#
|
43
|
-
# @param frame_info [{Symbol => Object}]
|
44
|
-
# Frame information has the following keys:
|
45
|
-
#
|
46
|
-
# `:filename`
|
47
|
-
# : The name of the file in which the lexical scope changed.
|
48
|
-
#
|
49
|
-
# `:mixin`
|
50
|
-
# : The name of the mixin in which the lexical scope changed,
|
51
|
-
# or `nil` if it wasn't within in a mixin.
|
52
|
-
#
|
53
|
-
# `:line`
|
54
|
-
# : The line of the file on which the lexical scope changed. Never nil.
|
55
|
-
def push_frame(frame_info)
|
56
|
-
top_of_stack = stack.last
|
57
|
-
if top_of_stack && top_of_stack.delete(:prepared)
|
58
|
-
top_of_stack.merge!(frame_info)
|
59
|
-
else
|
60
|
-
stack.push(top_of_stack = frame_info)
|
61
|
-
end
|
62
|
-
mixins_in_use << top_of_stack[:mixin] if top_of_stack[:mixin] && !top_of_stack[:prepared]
|
63
|
-
end
|
64
|
-
|
65
|
-
# Like \{#push\_frame}, but next time a stack frame is pushed,
|
66
|
-
# it will be merged with this frame.
|
67
|
-
#
|
68
|
-
# @param frame_info [{Symbol => Object}] Same as for \{#push\_frame}.
|
69
|
-
def prepare_frame(frame_info)
|
70
|
-
push_frame(frame_info.merge(:prepared => true))
|
71
|
-
end
|
72
|
-
|
73
|
-
# Pop a stack frame from the mixin/include stack.
|
74
|
-
def pop_frame
|
75
|
-
stack.pop if stack.last && stack.last[:prepared]
|
76
|
-
popped = stack.pop
|
77
|
-
mixins_in_use.delete(popped[:mixin]) if popped && popped[:mixin]
|
78
|
-
end
|
79
|
-
|
80
|
-
# A list of stack frames in the mixin/include stack.
|
81
|
-
# The last element in the list is the most deeply-nested frame.
|
82
|
-
#
|
83
|
-
# @return [Array<{Symbol => Object}>] The stack frames,
|
84
|
-
# of the form passed to \{#push\_frame}.
|
85
|
-
def stack
|
86
|
-
@stack ||= @parent.stack
|
87
|
-
end
|
88
|
-
|
89
|
-
# A set of names of mixins currently present in the stack.
|
90
|
-
#
|
91
|
-
# @return [Set<String>] The mixin names.
|
92
|
-
def mixins_in_use
|
93
|
-
@mixins_in_use ||= @parent.mixins_in_use
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def parent_options
|
99
|
-
@parent_options ||= @parent && @parent.options
|
100
|
-
end
|
101
|
-
|
4
|
+
# The abstract base class for lexical environments for SassScript.
|
5
|
+
class BaseEnvironment
|
102
6
|
class << self
|
103
|
-
private
|
104
|
-
UNDERSCORE, DASH = '_', '-'
|
105
|
-
|
106
7
|
# Note: when updating this,
|
107
8
|
# update sass/yard/inherited_hash.rb as well.
|
108
|
-
def
|
109
|
-
|
9
|
+
def inherited_hash_accessor(name)
|
10
|
+
inherited_hash_reader(name)
|
11
|
+
inherited_hash_writer(name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def inherited_hash_reader(name)
|
15
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
110
16
|
def #{name}(name)
|
111
|
-
_#{name}(name.tr(
|
17
|
+
_#{name}(name.tr('_', '-'))
|
112
18
|
end
|
113
19
|
|
114
20
|
def _#{name}(name)
|
@@ -116,8 +22,17 @@ module Sass
|
|
116
22
|
end
|
117
23
|
protected :_#{name}
|
118
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
|
29
|
+
RUBY
|
30
|
+
end
|
31
|
+
|
32
|
+
def inherited_hash_writer(name)
|
33
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
119
34
|
def set_#{name}(name, value)
|
120
|
-
name = name.tr(
|
35
|
+
name = name.tr('_', '-')
|
121
36
|
@#{name}s[name] = value unless try_set_#{name}(name, value)
|
122
37
|
end
|
123
38
|
|
@@ -136,20 +51,145 @@ module Sass
|
|
136
51
|
|
137
52
|
def set_local_#{name}(name, value)
|
138
53
|
@#{name}s ||= {}
|
139
|
-
@#{name}s[name.tr(
|
54
|
+
@#{name}s[name.tr('_', '-')] = value
|
140
55
|
end
|
141
|
-
RUBY
|
56
|
+
RUBY
|
142
57
|
end
|
143
58
|
end
|
144
59
|
|
60
|
+
# The options passed to the Sass Engine.
|
61
|
+
attr_reader :options
|
62
|
+
|
63
|
+
attr_writer :caller
|
64
|
+
attr_writer :content
|
65
|
+
attr_writer :selector
|
66
|
+
|
67
|
+
# variable
|
68
|
+
# Script::Value
|
69
|
+
inherited_hash_reader :var
|
70
|
+
|
71
|
+
# mixin
|
72
|
+
# Sass::Callable
|
73
|
+
inherited_hash_reader :mixin
|
74
|
+
|
75
|
+
# function
|
76
|
+
# Sass::Callable
|
77
|
+
inherited_hash_reader :function
|
78
|
+
|
79
|
+
# Whether a warning has been emitted for assigning to the given
|
80
|
+
# global variable. This is a set of tuples containing the name of
|
81
|
+
# the variable, its filename, and its line number.
|
82
|
+
#
|
83
|
+
# @return [Set<[String, String, int]>]
|
84
|
+
attr_reader :global_warning_given
|
85
|
+
|
86
|
+
# Whether a warning has been emitted for misusing a deprecated false value.
|
87
|
+
# This is a set of tuples containing the filename and its line number.
|
88
|
+
#
|
89
|
+
# @return [Set<[String, int]>]
|
90
|
+
attr_reader :deprecated_false_warning_given
|
91
|
+
|
92
|
+
# @param options [{Symbol => Object}] The options hash. See
|
93
|
+
# {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
|
94
|
+
# @param parent [Environment] See \{#parent}
|
95
|
+
def initialize(parent = nil, options = nil)
|
96
|
+
@parent = parent
|
97
|
+
@options = options || (parent && parent.options) || {}
|
98
|
+
@stack = Sass::Stack.new if @parent.nil?
|
99
|
+
@global_warning_given = Set.new
|
100
|
+
@deprecated_false_warning_given = Set.new
|
101
|
+
end
|
102
|
+
|
103
|
+
# The environment of the caller of this environment's mixin or function.
|
104
|
+
# @return {Environment?}
|
105
|
+
def caller
|
106
|
+
@caller || (@parent && @parent.caller)
|
107
|
+
end
|
108
|
+
|
109
|
+
# The content passed to this environment. This is naturally only set
|
110
|
+
# for mixin body environments with content passed in.
|
111
|
+
#
|
112
|
+
# @return {[Array<Sass::Tree::Node>, Environment]?} The content nodes and
|
113
|
+
# the lexical environment of the content block.
|
114
|
+
def content
|
115
|
+
@content || (@parent && @parent.content)
|
116
|
+
end
|
117
|
+
|
118
|
+
# The selector for the current CSS rule, or nil if there is no
|
119
|
+
# current CSS rule.
|
120
|
+
#
|
121
|
+
# @return [Selector::CommaSequence?] The current selector, with any
|
122
|
+
# nesting fully resolved.
|
123
|
+
def selector
|
124
|
+
@selector || (@caller && @caller.selector) || (@parent && @parent.selector)
|
125
|
+
end
|
126
|
+
|
127
|
+
# The top-level Environment object.
|
128
|
+
#
|
129
|
+
# @return [Environment]
|
130
|
+
def global_env
|
131
|
+
@global_env ||= @parent.nil? ? self : @parent.global_env
|
132
|
+
end
|
133
|
+
|
134
|
+
# The import/mixin stack.
|
135
|
+
#
|
136
|
+
# @return [Sass::Stack]
|
137
|
+
def stack
|
138
|
+
@stack || global_env.stack
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# The lexical environment for SassScript.
|
143
|
+
# This keeps track of variable, mixin, and function definitions.
|
144
|
+
#
|
145
|
+
# A new environment is created for each level of Sass nesting.
|
146
|
+
# This allows variables to be lexically scoped.
|
147
|
+
# The new environment refers to the environment in the upper scope,
|
148
|
+
# so it has access to variables defined in enclosing scopes,
|
149
|
+
# but new variables are defined locally.
|
150
|
+
#
|
151
|
+
# Environment also keeps track of the {Engine} options
|
152
|
+
# so that they can be made available to {Sass::Script::Functions}.
|
153
|
+
class Environment < BaseEnvironment
|
154
|
+
# The enclosing environment,
|
155
|
+
# or nil if this is the global environment.
|
156
|
+
#
|
157
|
+
# @return [Environment]
|
158
|
+
attr_reader :parent
|
159
|
+
|
145
160
|
# variable
|
146
|
-
# Script::
|
147
|
-
|
161
|
+
# Script::Value
|
162
|
+
inherited_hash_writer :var
|
163
|
+
|
148
164
|
# mixin
|
149
165
|
# Sass::Callable
|
150
|
-
|
166
|
+
inherited_hash_writer :mixin
|
167
|
+
|
151
168
|
# function
|
152
169
|
# Sass::Callable
|
153
|
-
|
170
|
+
inherited_hash_writer :function
|
171
|
+
end
|
172
|
+
|
173
|
+
# A read-only wrapper for a lexical environment for SassScript.
|
174
|
+
class ReadOnlyEnvironment < BaseEnvironment
|
175
|
+
# The read-only environment of the caller of this environment's mixin or function.
|
176
|
+
#
|
177
|
+
# @see BaseEnvironment#caller
|
178
|
+
# @return {ReadOnlyEnvironment}
|
179
|
+
def caller
|
180
|
+
return @caller if @caller
|
181
|
+
env = super
|
182
|
+
@caller ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options)
|
183
|
+
end
|
184
|
+
|
185
|
+
# The read-only content passed to this environment.
|
186
|
+
#
|
187
|
+
# @see BaseEnvironment#content
|
188
|
+
# @return {ReadOnlyEnvironment}
|
189
|
+
def content
|
190
|
+
return @content if @content
|
191
|
+
env = super
|
192
|
+
@content ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options)
|
193
|
+
end
|
154
194
|
end
|
155
195
|
end
|
data/lib/sass/error.rb
CHANGED
@@ -138,15 +138,15 @@ module Sass
|
|
138
138
|
# @see #sass_backtrace
|
139
139
|
# @return [String]
|
140
140
|
def sass_backtrace_str(default_filename = "an unknown file")
|
141
|
-
lines =
|
141
|
+
lines = message.split("\n")
|
142
142
|
msg = lines[0] + lines[1..-1].
|
143
143
|
map {|l| "\n" + (" " * "Syntax error: ".size) + l}.join
|
144
144
|
"Syntax error: #{msg}" +
|
145
145
|
Sass::Util.enum_with_index(sass_backtrace).map do |entry, i|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
146
|
+
"\n #{i == 0 ? "on" : "from"} line #{entry[:line]}" +
|
147
|
+
" of #{entry[:filename] || default_filename}" +
|
148
|
+
(entry[:mixin] ? ", in `#{entry[:mixin]}'" : "")
|
149
|
+
end.join
|
150
150
|
end
|
151
151
|
|
152
152
|
class << self
|
@@ -165,9 +165,9 @@ module Sass
|
|
165
165
|
|
166
166
|
<<END
|
167
167
|
/*
|
168
|
-
#{header}
|
168
|
+
#{header.gsub("*/", "*\\/")}
|
169
169
|
|
170
|
-
Backtrace:\n#{e.backtrace.join("\n")}
|
170
|
+
Backtrace:\n#{e.backtrace.join("\n").gsub("*/", "*\\/")}
|
171
171
|
*/
|
172
172
|
body:before {
|
173
173
|
white-space: pre;
|