pvincent
2 months ago
3 changed files with 46 additions and 74 deletions
-
40lib/semantic/abstract_formatter.rb
-
38lib/semantic/basic_formatter.rb
-
42lib/semantic/fancy_formatter.rb
@ -1,5 +1,45 @@ |
|||||
module Semantic |
module Semantic |
||||
# Abstract colorized formatter |
# Abstract colorized formatter |
||||
class AbstractFormatter < SemanticLogger::Formatters::Color |
class AbstractFormatter < SemanticLogger::Formatters::Color |
||||
|
include AnsiColors |
||||
|
|
||||
|
private |
||||
|
|
||||
|
def exception |
||||
|
return unless log.exception |
||||
|
|
||||
|
if log.exception.is_a?(Semantic::TagWrapError) |
||||
|
exc_wrapper = log.exception |
||||
|
# puts "TAG_WRAP detected #{exc_wrapper.tag}" |
||||
|
|
||||
|
exc = exc_wrapper.error |
||||
|
log.tags = Array.wrap(exc_wrapper.tag) |
||||
|
else |
||||
|
exc = log.exception |
||||
|
end |
||||
|
|
||||
|
clazz = colorize("#{exc.class}\n", color_map[:fatal]) |
||||
|
message = colorize(exc.message.chomp(''), color_map[:error]) |
||||
|
|
||||
|
# TODO: backtrace_cleaner might be optionally disable from Live::Constant |
||||
|
backtrace = stackisize(Rails.backtrace_cleaner.clean(exc.backtrace)) |
||||
|
|
||||
|
"#{clazz}#{message}#{backtrace}" |
||||
|
end |
||||
|
|
||||
|
def ansi_trace(trace, symbol) |
||||
|
match = trace.match(/(↳ )?(.*:\d+)(:in `)?(.*'?)/) # only m2(=file) and m4(=optional function) are useful |
||||
|
return trace unless match |
||||
|
|
||||
|
_, m2, _, m4 = match.captures |
||||
|
"#{symbol} #{m2} #{BOLD}#{m4.chop}#{CLEAR}" |
||||
|
end |
||||
|
|
||||
|
def stackisize(items) |
||||
|
return '' if items.empty? |
||||
|
|
||||
|
traces = items.map { |item| ansi_trace(item, '➟') } |
||||
|
"\n#{traces.join("\n")}" |
||||
|
end |
||||
end |
end |
||||
end |
end |
Write
Preview
Loading…
Cancel
Save
Reference in new issue