Skip to content

Commit 607f661

Browse files
author
Takashi Kokubun
committed
Show sass file on the top of backtrace
1 parent fce7b73 commit 607f661

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

lib/sassc/error.rb

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
1+
require 'pathname'
12
require 'sass/error'
23

34
module SassC
45
class BaseError < StandardError; end
5-
class SyntaxError < BaseError; end
66
class NotRenderedError < BaseError; end
77
class InvalidStyleError < BaseError; end
88
class UnsupportedValue < BaseError; end
9+
10+
# When dealing with SyntaxErrors,
11+
# it's important to provide filename and line number information.
12+
# This will be used in various error reports to users, including backtraces;
13+
class SyntaxError < BaseError
14+
def backtrace
15+
return nil if super.nil?
16+
sass_backtrace + super
17+
end
18+
19+
# The backtrace of the error within Sass files.
20+
def sass_backtrace
21+
line_info = message.split("\n")[1]
22+
return [] unless line_info
23+
24+
_, line, filename = line_info.match(/on line (\d+) of (.+)/).to_a
25+
["#{Pathname.getwd.join(filename)}:#{line}"]
26+
end
27+
end
928
end

test/error_test.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require_relative "test_helper"
2+
3+
module SassC
4+
class ErrorTest < MiniTest::Test
5+
def test_first_backtrace_is_sass
6+
line = 2
7+
filename = "app/assets/stylesheets/application.scss"
8+
9+
begin
10+
raise SassC::SyntaxError.new(<<-ERROR)
11+
Error: property "padding" must be followed by a ':'
12+
on line #{line} of #{filename}
13+
>> padding top: 10px;
14+
--^
15+
ERROR
16+
rescue SassC::SyntaxError => err
17+
expected = "#{Pathname.getwd.join(filename)}:#{line}"
18+
assert_equal expected, err.backtrace.first
19+
end
20+
end
21+
end
22+
end

0 commit comments

Comments
 (0)