Exception: Sass::SyntaxError
- Inherits:
- StandardError
- Object
- StandardError
- Sass::SyntaxError
- Defined in:
- /Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb
Overview
An exception class that keeps track of the line of the Sass template it was raised on and the Sass file that was being parsed (if applicable).
All Sass errors are raised as SyntaxErrors.
When dealing with SyntaxErrors, it’s important to provide filename and line number information. This will be used in various error reports to users, including backtraces; see #sass_backtrace for details.
Some of this information is usually provided as part of the constructor. New backtrace entries can be added with #add_backtrace, which is called when an exception is raised between files (e.g. with @import
).
Often, a chunk of code will all have similar backtrace information - the same filename or even line. It may also be useful to have a default line number set. In those situations, the default values can be used by omitting the information on the original exception, and then calling #modify_backtrace in a wrapper rescue
. When doing this, be sure that all exceptions ultimately end up with the information filled in.
Direct Known Subclasses
Instance Attribute Summary (collapse)
- - (Aray<{Symbol => Object>}) sass_backtrace
The backtrace of the error within Sass files.
- - (String) sass_template
The text of the template where this error was raised.
Class Method Summary (collapse)
- + (String) exception_to_css(e, line_offset = 1)
Returns an error report for an exception in CSS format.
Instance Method Summary (collapse)
- - add_backtrace(attrs)
Adds an entry to the exception’s Sass backtrace.
- - (Array<String>) backtrace
Returns the standard exception backtrace, including the Sass backtrace.
- - (SyntaxError) initialize(msg, attrs = {}) constructor
A new instance of SyntaxError.
- - modify_backtrace(attrs)
Modify the top Sass backtrace entries (that is, the most deeply nested ones) to have the given attributes.
- - (String) sass_backtrace_str(default_filename = "an unknown file")
Returns a string representation of the Sass backtrace.
- - (String?) sass_filename
The name of the file in which the exception was raised.
- - (Fixnum) sass_line
The line of the Sass template on which the error occurred.
- - (Fixnum) sass_mixin
The name of the mixin in which the error occurred.
- - (String) to_s
The error message.
Constructor Details
- (SyntaxError) initialize(msg, attrs = {})
Returns a new instance of SyntaxError
55 56 57 58 59 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 55
def initialize(msg, attrs = {})
@message = msg
@sass_backtrace = []
add_backtrace(attrs)
end |
Instance Attribute Details
- (Aray<{Symbol => Object>}) sass_backtrace
The backtrace of the error within Sass files. This is an array of hashes containing information for a single entry. The hashes have the following keys:
:filename
- The name of the file in which the exception was raised, or
nil
if no filename is available. :mixin
- The name of the mixin in which the exception was raised, or
nil
if it wasn’t raised in a mixin. :line
- The line of the file on which the error occurred. Never nil.
This information is also included in standard backtrace format in the output of #backtrace.
45 46 47 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 45
def sass_backtrace
@sass_backtrace
end |
- (String) sass_template
The text of the template where this error was raised.
50 51 52 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 50
def sass_template
@sass_template
end |
Class Method Details
+ (String) exception_to_css(e, line_offset = 1)
Returns an error report for an exception in CSS format.
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 161
def exception_to_css(e, line_offset = 1)
header = header_string(e, line_offset)
<<END
/*
#{header.gsub('*/', '*\\/')}
Backtrace:\n#{e.backtrace.join("\n").gsub('*/', '*\\/')}
*/
body:before {
white-space: pre;
font-family: monospace;
content: "#{header.gsub('"', '\"').gsub("\n", '\\A ')}"; }
END
end |
Instance Method Details
- add_backtrace(attrs)
Adds an entry to the exception’s Sass backtrace.
88 89 90 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 88
def add_backtrace(attrs)
sass_backtrace << attrs.reject {|_k, v| v.nil?}
end |
- (Array<String>) backtrace
Returns the standard exception backtrace, including the Sass backtrace.
126 127 128 129 130 131 132 133 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 126
def backtrace
return nil if super.nil?
return super if sass_backtrace.all? {|h| h.empty?}
sass_backtrace.map do |h|
"#{h[:filename] || '(sass)'}:#{h[:line]}" +
(h[:mixin] ? ":in `#{h[:mixin]}'" : "")
end + super
end |
- modify_backtrace(attrs)
Modify the top Sass backtrace entries (that is, the most deeply nested ones) to have the given attributes.
Specifically, this goes through the backtrace entries from most deeply nested to least, setting the given attributes for each entry. If an entry already has one of the given attributes set, the pre-existing attribute takes precedence and is not used for less deeply-nested entries (even if they don’t have that attribute set).
106 107 108 109 110 111 112 113 114 115 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 106
def modify_backtrace(attrs)
attrs = attrs.reject {|_k, v| v.nil?}
# Move backwards through the backtrace
(0...sass_backtrace.size).to_a.reverse_each do |i|
entry = sass_backtrace[i]
sass_backtrace[i] = attrs.merge(entry)
attrs.reject! {|k, _v| entry.include?(k)}
break if attrs.empty?
end
end |
- (String) sass_backtrace_str(default_filename = "an unknown file")
Returns a string representation of the Sass backtrace.
140 141 142 143 144 145 146 147 148 149 150 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 140
def sass_backtrace_str(default_filename = "an unknown file")
lines = message.split("\n")
msg = lines[0] + lines[1..-1].
map {|l| "\n" + (" " * "Error: ".size) + l}.join
"Error: #{msg}" +
Sass::Util.enum_with_index(sass_backtrace).map do |entry, i|
"\n #{i == 0 ? 'on' : 'from'} line #{entry[:line]}" +
" of #{entry[:filename] || default_filename}" +
(entry[:mixin] ? ", in `#{entry[:mixin]}'" : "")
end.join
end |
- (String?) sass_filename
The name of the file in which the exception was raised. This could be nil
if no filename is available.
65 66 67 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 65
def sass_filename
sass_backtrace.first[:filename]
end |
- (Fixnum) sass_line
The line of the Sass template on which the error occurred.
80 81 82 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 80
def sass_line
sass_backtrace.first[:line]
end |
- (Fixnum) sass_mixin
The name of the mixin in which the error occurred. This could be nil
if the error occurred outside a mixin.
73 74 75 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 73
def sass_mixin
sass_backtrace.first[:mixin]
end |
- (String) to_s
Returns The error message
118 119 120 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/error.rb', line 118
def to_s
@message
end |