sass 3.4.20 → 3.4.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +5 -13
  2. data/Rakefile +3 -1
  3. data/VERSION +1 -1
  4. data/VERSION_DATE +1 -1
  5. data/lib/sass/cache_stores/filesystem.rb +1 -1
  6. data/lib/sass/cache_stores/memory.rb +4 -5
  7. data/lib/sass/engine.rb +4 -10
  8. data/lib/sass/error.rb +4 -4
  9. data/lib/sass/exec/sass_convert.rb +6 -4
  10. data/lib/sass/exec/sass_scss.rb +5 -2
  11. data/lib/sass/plugin.rb +2 -1
  12. data/lib/sass/plugin/compiler.rb +14 -11
  13. data/lib/sass/plugin/configuration.rb +1 -1
  14. data/lib/sass/plugin/merb.rb +1 -1
  15. data/lib/sass/script/css_parser.rb +2 -3
  16. data/lib/sass/script/functions.rb +20 -33
  17. data/lib/sass/script/lexer.rb +7 -8
  18. data/lib/sass/script/parser.rb +1 -1
  19. data/lib/sass/script/tree/node.rb +1 -1
  20. data/lib/sass/script/tree/operation.rb +1 -1
  21. data/lib/sass/script/tree/variable.rb +1 -1
  22. data/lib/sass/script/value/base.rb +6 -6
  23. data/lib/sass/script/value/color.rb +2 -2
  24. data/lib/sass/script/value/helpers.rb +7 -7
  25. data/lib/sass/script/value/number.rb +9 -2
  26. data/lib/sass/scss/parser.rb +34 -33
  27. data/lib/sass/scss/rx.rb +2 -3
  28. data/lib/sass/selector.rb +7 -10
  29. data/lib/sass/selector/abstract_sequence.rb +3 -1
  30. data/lib/sass/selector/comma_sequence.rb +4 -2
  31. data/lib/sass/selector/pseudo.rb +2 -2
  32. data/lib/sass/selector/sequence.rb +2 -2
  33. data/lib/sass/selector/simple.rb +3 -1
  34. data/lib/sass/selector/simple_sequence.rb +4 -4
  35. data/lib/sass/tree/function_node.rb +2 -3
  36. data/lib/sass/tree/prop_node.rb +4 -5
  37. data/lib/sass/tree/rule_node.rb +1 -1
  38. data/lib/sass/tree/visitors/check_nesting.rb +16 -22
  39. data/lib/sass/tree/visitors/convert.rb +2 -2
  40. data/lib/sass/tree/visitors/extend.rb +15 -13
  41. data/lib/sass/tree/visitors/perform.rb +1 -1
  42. data/lib/sass/tree/visitors/set_options.rb +1 -1
  43. data/lib/sass/tree/visitors/to_css.rb +18 -15
  44. data/lib/sass/util.rb +7 -8
  45. data/lib/sass/util/multibyte_string_scanner.rb +0 -2
  46. data/test/sass/engine_test.rb +45 -4
  47. data/test/sass/script_test.rb +31 -0
  48. metadata +99 -98
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZmQ4ODgyYzJhYWQzYjhkN2YwM2MxNTUxNDU1ZmUwZmRjMTdjNzc0ZQ==
5
- data.tar.gz: !binary |-
6
- YjBlMTNlNzkwYjBjMzQ5MzUxNGM1OTliZTdhNGE1ZTMzMTI3NmM1Yg==
2
+ SHA1:
3
+ metadata.gz: 58d1f34ed3be5533eff693b26e97e7ff371a075b
4
+ data.tar.gz: b37b28619e83950329b0c7421ba1dac2610e0e71
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YTQ5ZWU3MWJkYTU3OTk3YTgzNjVlMzQzZDljYzg0NTVlM2U1ZGE0YWI1YzQ0
10
- NmE3YjE4OWIzOTRlMDdkY2Q2OWY5ZTRjYjdmODc1OGU4NGRiMmUzZjNiMTIx
11
- MWUxMDYyOGY2OWE0MmJhMThmNGRkNzNjZDJjMmM0ODk1NjA2YTY=
12
- data.tar.gz: !binary |-
13
- Nzg1YTgxNTdmOWI3MjQxOGYwYWQzZTM4OTE3Mjk4NjAzNzRiYTYxNmRmOTIx
14
- NDgwODRiNzQ4ZGIyZDFjMTZmNTUwMzM5NTNjMmZmN2Y5OGYzNTcyOTRhOTU1
15
- NmE1NjY1NTVlYzZhMzUyMjE0ZTFkNTQ4MTNiODUwM2E3YzUzNDk=
6
+ metadata.gz: 974eaab5ff1c88be44d765065daf43bb56d5fc74be054332bbbbba3396ba8ba1605a90a994d7815f31ec3eafaebfb7c30a03f960beb9b14295bc44328d750a7b
7
+ data.tar.gz: f84b2caf06a1e0d42e78297d73f1441b9e9e796d6370f916acd2446893fa3a00335fc454dd7e1437bf16baa3f65bedb8d1d581da6cbeac6cec97316b68c51651
data/Rakefile CHANGED
@@ -32,7 +32,9 @@ if (version[0] > 1 || (version[0] == 1 && version[1] > 8)) &&
32
32
  (ENV.has_key?("RUBOCOP") && ENV["RUBOCOP"] == "true" ||
33
33
  !(ENV.has_key?("RUBOCOP") || ENV.has_key?("TEST")))
34
34
  require 'rubocop/rake_task'
35
- Rubocop::RakeTask.new do |t|
35
+ RuboCop = Rubocop unless defined?(RuboCop)
36
+ RuboCop::RakeTask.new do |t|
37
+ t.options = ['-c', '.rubocop_0.18.0.yml'] if RUBY_VERSION < '1.9.3'
36
38
  t.patterns = FileList["lib/**/*"]
37
39
  end
38
40
  else
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.4.20
1
+ 3.4.21
@@ -1 +1 @@
1
- 09 December 2015 23:08:32 UTC
1
+ 12 January 2016 01:03:01 UTC
@@ -52,7 +52,7 @@ module Sass
52
52
  # @param key [String]
53
53
  # @return [String] The path to the cache file.
54
54
  def path_to(key)
55
- key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % Sass::Util.ord(c)}
55
+ key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % (Sass::Util.ord(c))}
56
56
  File.join(cache_location, key)
57
57
  end
58
58
  end
@@ -26,11 +26,10 @@ module Sass
26
26
 
27
27
  # @see Base#retrieve
28
28
  def retrieve(key, sha)
29
- if @contents.has_key?(key)
30
- return unless @contents[key][:sha] == sha
31
- obj = @contents[key][:obj]
32
- obj.respond_to?(:deep_copy) ? obj.deep_copy : obj.dup
33
- end
29
+ return unless @contents.has_key?(key)
30
+ return unless @contents[key][:sha] == sha
31
+ obj = @contents[key][:obj]
32
+ obj.respond_to?(:deep_copy) ? obj.deep_copy : obj.dup
34
33
  end
35
34
 
36
35
  # @see Base#store
@@ -172,7 +172,7 @@ module Sass
172
172
  # @return [{Symbol => Object}] The normalized options hash.
173
173
  # @private
174
174
  def self.normalize_options(options)
175
- options = DEFAULT_OPTIONS.merge(options.reject {|k, v| v.nil?})
175
+ options = DEFAULT_OPTIONS.merge(options.reject {|_k, v| v.nil?})
176
176
 
177
177
  # If the `:filename` option is passed in without an importer,
178
178
  # assume it's using the default filesystem importer.
@@ -476,7 +476,7 @@ ERR
476
476
 
477
477
  line_tabs = line_tab_str.scan(tab_str).size
478
478
  if tab_str * line_tabs != line_tab_str
479
- message = <<END.strip.gsub("\n", ' ')
479
+ message = <<END.strip.tr("\n", ' ')
480
480
  Inconsistent indentation: #{Sass::Shared.human_indentation line_tab_str, true} used for indentation,
481
481
  but the rest of the document was indented using #{Sass::Shared.human_indentation tab_str}.
482
482
  END
@@ -489,15 +489,13 @@ END
489
489
  end
490
490
 
491
491
  # @comment
492
- # rubocop:disable ParameterLists
493
492
  def try_comment(line, last, tab_str, comment_tab_str, index)
494
- # rubocop:enable ParameterLists
495
493
  return unless last && last.comment?
496
494
  # Nested comment stuff must be at least one whitespace char deeper
497
495
  # than the normal indentation
498
496
  return unless line =~ /^#{tab_str}\s/
499
497
  unless line =~ /^(?:#{comment_tab_str})(.*)$/
500
- raise SyntaxError.new(<<MSG.strip.gsub("\n", " "), :line => index)
498
+ raise SyntaxError.new(<<MSG.strip.tr("\n", " "), :line => index)
501
499
  Inconsistent indentation:
502
500
  previous line was indented by #{Sass::Shared.human_indentation comment_tab_str},
503
501
  but this line was indented by #{Sass::Shared.human_indentation line[/^\s*/]}.
@@ -798,14 +796,12 @@ WARNING
798
796
  :each, :while, :if, :else, :extend, :import, :media, :charset, :content,
799
797
  :at_root, :error]
800
798
 
801
- # @comment
802
- # rubocop:disable MethodLength
803
799
  def parse_directive(parent, line, root)
804
800
  directive, whitespace, value = line.text[1..-1].split(/(\s+)/, 2)
805
801
  raise SyntaxError.new("Invalid directive: '@'.") unless directive
806
802
  offset = directive.size + whitespace.size + 1 if whitespace
807
803
 
808
- directive_name = directive.gsub('-', '_').to_sym
804
+ directive_name = directive.tr('-', '_').to_sym
809
805
  if DIRECTIVES.include?(directive_name)
810
806
  return send("parse_#{directive_name}_directive", parent, line, root, value, offset)
811
807
  end
@@ -860,8 +856,6 @@ WARNING
860
856
  )
861
857
  Tree::ExtendNode.new(interp_parsed, optional, selector_range)
862
858
  end
863
- # @comment
864
- # rubocop:enable MethodLength
865
859
 
866
860
  def parse_warn_directive(parent, line, root, value, offset)
867
861
  raise SyntaxError.new("Invalid warn directive '@warn': expected expression.") unless value
@@ -86,7 +86,7 @@ module Sass
86
86
  # @param attrs [{Symbol => Object}] The information in the backtrace entry.
87
87
  # See \{#sass\_backtrace}
88
88
  def add_backtrace(attrs)
89
- sass_backtrace << attrs.reject {|k, v| v.nil?}
89
+ sass_backtrace << attrs.reject {|_k, v| v.nil?}
90
90
  end
91
91
 
92
92
  # Modify the top Sass backtrace entries
@@ -104,12 +104,12 @@ module Sass
104
104
  # @param attrs [{Symbol => Object}] The information to add to the backtrace entry.
105
105
  # See \{#sass\_backtrace}
106
106
  def modify_backtrace(attrs)
107
- attrs = attrs.reject {|k, v| v.nil?}
107
+ attrs = attrs.reject {|_k, v| v.nil?}
108
108
  # Move backwards through the backtrace
109
- (0...sass_backtrace.size).to_a.reverse.each do |i|
109
+ (0...sass_backtrace.size).to_a.reverse_each do |i|
110
110
  entry = sass_backtrace[i]
111
111
  sass_backtrace[i] = attrs.merge(entry)
112
- attrs.reject! {|k, v| entry.include?(k)}
112
+ attrs.reject! {|k, _v| entry.include?(k)}
113
113
  break if attrs.empty?
114
114
  end
115
115
  end
@@ -108,10 +108,11 @@ END
108
108
  @options[:for_tree][:dasherize] = true
109
109
  end
110
110
 
111
- opts.on('--indent NUM',
111
+ opts.on(
112
+ '--indent NUM',
112
113
  'How many spaces to use for each level of indentation. Defaults to 2.',
113
- '"t" means use hard tabs.') do |indent|
114
-
114
+ '"t" means use hard tabs.'
115
+ ) do |indent|
115
116
  if indent == 't'
116
117
  @options[:for_tree][:indent] = "\t"
117
118
  else
@@ -162,7 +163,8 @@ END
162
163
  end
163
164
 
164
165
  def process_directory
165
- unless @options[:input] = @args.shift
166
+ @options[:input] = @args.shift
167
+ unless @options[:input]
166
168
  raise "Error: directory required when using --recursive."
167
169
  end
168
170
 
@@ -299,8 +299,9 @@ MSG
299
299
  # #watched_paths.
300
300
  # rubocop:disable ClassVars
301
301
  @@working_directory = Sass::Util.realpath('.').to_s
302
- # rubocop:ensable ClassVars
302
+ # rubocop:enable ClassVars
303
303
 
304
+ # rubocop:disable NestedMethodDefinition
304
305
  def watched_file?(file)
305
306
  super(file) ||
306
307
  (file =~ /\.s[ac]ss$/ && file.start_with?(@@working_directory + File::SEPARATOR))
@@ -309,6 +310,7 @@ MSG
309
310
  def watched_paths
310
311
  @watched_paths ||= super + [@@working_directory]
311
312
  end
313
+ # rubocop:enable NestedMethodDefinition
312
314
  end
313
315
 
314
316
  dirs, files = @args.map {|name| split_colon_path(name)}.
@@ -411,7 +413,8 @@ WARNING
411
413
  @options[:sourcemap_filename], Sass::Util.pathname(@options[:output_filename]).dirname)
412
414
  rendered, mapping = engine.render_with_sourcemap(relative_sourcemap_path.to_s)
413
415
  write_output(rendered, output)
414
- write_output(mapping.to_json(
416
+ write_output(
417
+ mapping.to_json(
415
418
  :type => @options[:sourcemap],
416
419
  :css_path => @options[:output_filename],
417
420
  :sourcemap_path => @options[:sourcemap_filename]) + "\n",
@@ -93,7 +93,8 @@ module Sass
93
93
  # the second is the location of the CSS file that it should be compiled to.
94
94
  # @see #update_stylesheets
95
95
  def force_update_stylesheets(individual_files = [])
96
- Compiler.new(options.dup.merge(
96
+ Compiler.new(
97
+ options.dup.merge(
97
98
  :never_update => false,
98
99
  :always_update => true,
99
100
  :cache => false)).update_stylesheets(individual_files)
@@ -463,12 +463,12 @@ module Sass::Plugin
463
463
  end
464
464
  end
465
465
 
466
- if recompile_required
467
- # In case a file we're watching is removed and then recreated we
468
- # prune out the non-existant files here.
469
- watched_files_remaining = individual_files.select {|(source, _, _)| File.exist?(source)}
470
- update_stylesheets(watched_files_remaining)
471
- end
466
+ return unless recompile_required
467
+
468
+ # In case a file we're watching is removed and then recreated we
469
+ # prune out the non-existant files here.
470
+ watched_files_remaining = individual_files.select {|(source, _, _)| File.exist?(source)}
471
+ update_stylesheets(watched_files_remaining)
472
472
  end
473
473
 
474
474
  def update_stylesheet(filename, css, sourcemap)
@@ -500,7 +500,9 @@ module Sass::Plugin
500
500
 
501
501
  write_file(css, rendered)
502
502
  if mapping
503
- write_file(sourcemap, mapping.to_json(
503
+ write_file(
504
+ sourcemap,
505
+ mapping.to_json(
504
506
  :css_path => css, :sourcemap_path => sourcemap, :type => options[:sourcemap]))
505
507
  end
506
508
  run_updated_stylesheet(filename, css, sourcemap) unless compilation_error_occured
@@ -521,10 +523,11 @@ module Sass::Plugin
521
523
  File.delete css
522
524
  end
523
525
  map = Sass::Util.sourcemap_name(css)
524
- if File.exist?(map)
525
- run_deleting_sourcemap map
526
- File.delete map
527
- end
526
+
527
+ return unless File.exist?(map)
528
+
529
+ run_deleting_sourcemap map
530
+ File.delete map
528
531
  end
529
532
 
530
533
  def watched_file?(file)
@@ -127,7 +127,7 @@ module Sass
127
127
 
128
128
  def normalize_template_location!
129
129
  options[:template_location] = convert_template_location(
130
- options[:template_location], options[:css_location])
130
+ options[:template_location], options[:css_location])
131
131
  end
132
132
  end
133
133
  end
@@ -15,7 +15,7 @@ unless defined?(Sass::MERB_LOADED)
15
15
  end
16
16
 
17
17
  {
18
- :always_update => false,
18
+ :always_update => false,
19
19
  :template_location => root + '/public/stylesheets/sass',
20
20
  :css_location => root + '/public/stylesheets',
21
21
  :cache_location => root + '/tmp/sass-cache',
@@ -19,9 +19,8 @@ module Sass
19
19
  def string
20
20
  tok = try_tok(:string)
21
21
  return number unless tok
22
- unless @lexer.peek && @lexer.peek.type == :begin_interpolation
23
- return literal_node(tok.value, tok.source_range)
24
- end
22
+ return if @lexer.peek && @lexer.peek.type == :begin_interpolation
23
+ literal_node(tok.value, tok.source_range)
25
24
  end
26
25
 
27
26
  # Short-circuit all the SassScript-only productions
@@ -356,6 +356,7 @@ module Sass::Script
356
356
  #
357
357
  # @comment
358
358
  # rubocop:enable LineLength
359
+ # rubocop:disable ModuleLength
359
360
  module Functions
360
361
  @signatures = {}
361
362
 
@@ -454,8 +455,8 @@ module Sass::Script
454
455
  t_arg_arity = sig_arity
455
456
  end
456
457
 
457
- if (t_arg_arity == sig_arity || t_arg_arity > sig_arity && signature.var_args) &&
458
- (t_kwarg_arity == 0 || t_kwarg_arity > 0 && signature.var_kwargs)
458
+ if (t_arg_arity == sig_arity || t_arg_arity > sig_arity && signature.var_args) &&
459
+ (t_kwarg_arity == 0 || t_kwarg_arity > 0 && signature.var_kwargs)
459
460
  return signature
460
461
  end
461
462
  end
@@ -533,7 +534,7 @@ module Sass::Script
533
534
 
534
535
  return if value.is_a?(Sass::Script::Value::List) && type == :Map && value.value.empty?
535
536
  err = "#{value.inspect} is not a #{TYPE_NAMES[type] || type.to_s.downcase}"
536
- err = "$#{name.to_s.gsub('_', '-')}: " + err if name
537
+ err = "$#{name.to_s.tr('_', '-')}: " + err if name
537
538
  raise ArgumentError.new(err)
538
539
  end
539
540
 
@@ -641,7 +642,7 @@ module Sass::Script
641
642
  assert_type green, :Number, :green
642
643
  assert_type blue, :Number, :blue
643
644
 
644
- color_attrs = [[red, :red], [green, :green], [blue, :blue]].map do |(c, name)|
645
+ color_attrs = [red, green, blue].map do |c|
645
646
  if c.is_unit?("%")
646
647
  c.value * 255 / 100.0
647
648
  elsif c.unitless?
@@ -1102,11 +1103,7 @@ module Sass::Script
1102
1103
  # adjust-color(#102030, $blue: 5) => #102035
1103
1104
  # adjust-color(#102030, $red: -5, $blue: 5) => #0b2035
1104
1105
  # adjust-color(hsl(25, 100%, 80%), $lightness: -30%, $alpha: -0.4) => hsla(25, 100%, 50%, 0.6)
1105
- # @comment
1106
- # rubocop:disable LineLength
1107
1106
  # @overload adjust_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])
1108
- # @comment
1109
- # rubocop:disable LineLength
1110
1107
  # @param $color [Sass::Script::Value::Color]
1111
1108
  # @param $red [Sass::Script::Value::Number] The adjustment to make on the
1112
1109
  # red component, between -255 and 255 inclusive
@@ -1129,15 +1126,14 @@ module Sass::Script
1129
1126
  def adjust_color(color, kwargs)
1130
1127
  assert_type color, :Color, :color
1131
1128
  with = Sass::Util.map_hash(
1132
- "red" => [-255..255, ""],
1133
- "green" => [-255..255, ""],
1134
- "blue" => [-255..255, ""],
1135
- "hue" => nil,
1136
- "saturation" => [-100..100, "%"],
1137
- "lightness" => [-100..100, "%"],
1138
- "alpha" => [-1..1, ""]
1139
- ) do |name, (range, units)|
1140
-
1129
+ "red" => [-255..255, ""],
1130
+ "green" => [-255..255, ""],
1131
+ "blue" => [-255..255, ""],
1132
+ "hue" => nil,
1133
+ "saturation" => [-100..100, "%"],
1134
+ "lightness" => [-100..100, "%"],
1135
+ "alpha" => [-1..1, ""]
1136
+ ) do |name, (range, units)|
1141
1137
  val = kwargs.delete(name)
1142
1138
  next unless val
1143
1139
  assert_type val, :Number, name
@@ -1183,11 +1179,7 @@ module Sass::Script
1183
1179
  # scale-color(hsl(120, 70%, 80%), $lightness: 50%) => hsl(120, 70%, 90%)
1184
1180
  # scale-color(rgb(200, 150%, 170%), $green: -40%, $blue: 70%) => rgb(200, 90, 229)
1185
1181
  # scale-color(hsl(200, 70%, 80%), $saturation: -90%, $alpha: -30%) => hsla(200, 7%, 80%, 0.7)
1186
- # @comment
1187
- # rubocop:disable LineLength
1188
1182
  # @overload scale_color($color, [$red], [$green], [$blue], [$saturation], [$lightness], [$alpha])
1189
- # @comment
1190
- # rubocop:disable LineLength
1191
1183
  # @param $color [Sass::Script::Value::Color]
1192
1184
  # @param $red [Sass::Script::Value::Number]
1193
1185
  # @param $green [Sass::Script::Value::Number]
@@ -1202,14 +1194,13 @@ module Sass::Script
1202
1194
  def scale_color(color, kwargs)
1203
1195
  assert_type color, :Color, :color
1204
1196
  with = Sass::Util.map_hash(
1205
- "red" => 255,
1206
- "green" => 255,
1207
- "blue" => 255,
1208
- "saturation" => 100,
1209
- "lightness" => 100,
1210
- "alpha" => 1
1211
- ) do |name, max|
1212
-
1197
+ "red" => 255,
1198
+ "green" => 255,
1199
+ "blue" => 255,
1200
+ "saturation" => 100,
1201
+ "lightness" => 100,
1202
+ "alpha" => 1
1203
+ ) do |name, max|
1213
1204
  val = kwargs.delete(name)
1214
1205
  next unless val
1215
1206
  assert_type val, :Number, name
@@ -1244,11 +1235,7 @@ module Sass::Script
1244
1235
  # change-color(#102030, $blue: 5) => #102005
1245
1236
  # change-color(#102030, $red: 120, $blue: 5) => #782005
1246
1237
  # change-color(hsl(25, 100%, 80%), $lightness: 40%, $alpha: 0.8) => hsla(25, 100%, 40%, 0.8)
1247
- # @comment
1248
- # rubocop:disable LineLength
1249
1238
  # @overload change_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])
1250
- # @comment
1251
- # rubocop:disable LineLength
1252
1239
  # @param $color [Sass::Script::Value::Color]
1253
1240
  # @param $red [Sass::Script::Value::Number] The new red component for the
1254
1241
  # color, within 0 and 255 inclusive
@@ -71,8 +71,8 @@ module Sass
71
71
  OPERATORS_REVERSE = Sass::Util.map_hash(OPERATORS) {|k, v| [v, k]}
72
72
 
73
73
  TOKEN_NAMES = Sass::Util.map_hash(OPERATORS_REVERSE) {|k, v| [k, v.inspect]}.merge(
74
- :const => "variable (e.g. $foo)",
75
- :ident => "identifier (e.g. middle)")
74
+ :const => "variable (e.g. $foo)",
75
+ :ident => "identifier (e.g. middle)")
76
76
 
77
77
  # A list of operator strings ordered with longer names first
78
78
  # so that `>` and `<` don't clobber `>=` and `<=`.
@@ -80,7 +80,7 @@ module Sass
80
80
 
81
81
  # A sub-list of {OP_NAMES} that only includes operators
82
82
  # with identifier names.
83
- IDENT_OP_NAMES = OP_NAMES.select {|k, v| k =~ /^\w+/}
83
+ IDENT_OP_NAMES = OP_NAMES.select {|k, _v| k =~ /^\w+/}
84
84
 
85
85
  PARSEABLE_NUMBER = /(?:(\d*\.\d+)|(\d+))(?:[eE]([+-]?\d+))?(#{UNIT})?/
86
86
 
@@ -196,11 +196,10 @@ module Sass
196
196
  # Rewinds the underlying StringScanner
197
197
  # to before the token returned by \{#peek}.
198
198
  def unpeek!
199
- if @tok
200
- @scanner.pos = @tok.pos
201
- @line = @tok.source_range.start_pos.line
202
- @offset = @tok.source_range.start_pos.offset
203
- end
199
+ return unless @tok
200
+ @scanner.pos = @tok.pos
201
+ @line = @tok.source_range.start_pos.line
202
+ @offset = @tok.source_range.start_pos.offset
204
203
  end
205
204
 
206
205
  # @return [Boolean] Whether or not there's more source text to lex.
@@ -110,7 +110,7 @@ module Sass
110
110
  a.options = @options
111
111
  end
112
112
 
113
- keywords.each do |k, v|
113
+ keywords.each do |_k, v|
114
114
  check_for_interpolation v
115
115
  v.options = @options
116
116
  end