sass 3.4.20 → 3.4.21

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 (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