Skip to content

Commit e8a1c7a

Browse files
author
Takashi Kokubun
committed
Don't hardcode line_info line number
1 parent 607f661 commit e8a1c7a

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lib/sassc/error.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,19 @@ class UnsupportedValue < BaseError; end
1111
# it's important to provide filename and line number information.
1212
# This will be used in various error reports to users, including backtraces;
1313
class SyntaxError < BaseError
14+
LINE_INFO_REGEX = /on line (\d+) of (.+)/
15+
1416
def backtrace
1517
return nil if super.nil?
1618
sass_backtrace + super
1719
end
1820

1921
# The backtrace of the error within Sass files.
2022
def sass_backtrace
21-
line_info = message.split("\n")[1]
23+
line_info = message.split("\n").find { |line| line.match(LINE_INFO_REGEX) }
2224
return [] unless line_info
2325

24-
_, line, filename = line_info.match(/on line (\d+) of (.+)/).to_a
26+
_, line, filename = line_info.match(LINE_INFO_REGEX).to_a
2527
["#{Pathname.getwd.join(filename)}:#{line}"]
2628
end
2729
end

test/error_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@ def test_first_backtrace_is_sass
1717
expected = "#{Pathname.getwd.join(filename)}:#{line}"
1818
assert_equal expected, err.backtrace.first
1919
end
20+
21+
begin
22+
raise SassC::SyntaxError.new(<<-ERROR)
23+
Error: no mixin named border-radius
24+
25+
Backtrace:
26+
\t#{filename}:#{line}
27+
on line #{line} of #{filename}
28+
>> @include border-radius(5px);
29+
-------------^
30+
ERROR
31+
rescue SassC::SyntaxError => err
32+
expected = "#{Pathname.getwd.join(filename)}:#{line}"
33+
assert_equal expected, err.backtrace.first
34+
end
2035
end
2136
end
2237
end

0 commit comments

Comments
 (0)