klenod-runtime 0.0.25 → 0.0.26
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.
- checksums.yaml +4 -4
- data/lib/klenod/runtime/backtrace_rewriter.rb +6 -88
- data/lib/klenod/runtime/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b6f0c91d7317fbce5a7fb31ca1053250d8948a1d79c651cc326c60d4e8320e48
|
|
4
|
+
data.tar.gz: 64a1db410a43c214bdd5d890d08edb43349d0a25735e497dd2d38892f29b1b7d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f8d93b47b5c8ff28e4be3818962129f505a6b889fa8555f8aa1592dc1089bf40388311c6c984d302afc79769617da996f2141e399c4d8e60ef4db993f6f57b9e
|
|
7
|
+
data.tar.gz: 4f9eaf10ab9690a834eeaa42eb7f5e3508635ef05fd942e3af987cf1ed539c48916958608cdfd9b4782f65642f05981e153abb9f78a5e5a7487bc5a73e7b0243
|
|
@@ -44,31 +44,6 @@ module Klenod
|
|
|
44
44
|
@constant_display_names = constant_display_names_for(mods)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def format_exception(e, source_path: nil)
|
|
48
|
-
reset = "\e[0;48;5;52m"
|
|
49
|
-
rewrite_exception(e)
|
|
50
|
-
sources = format_sources(e.backtrace)
|
|
51
|
-
|
|
52
|
-
[
|
|
53
|
-
"\e[1;31;47m ERROR \e[3;31;47m #{e.class.name}: #{e.message} #{reset}",
|
|
54
|
-
"\e[1;34mBacktrace:#{reset}",
|
|
55
|
-
e
|
|
56
|
-
.backtrace
|
|
57
|
-
.map do |line|
|
|
58
|
-
if line in BacktraceString
|
|
59
|
-
format(
|
|
60
|
-
"#{reset}\e[2mfrom #{reset}\e[1m%<file>s:%<line>d#{reset}\e[2m:in '#{reset}\e[1m%<description>s#{reset}\e[2m'#{reset}",
|
|
61
|
-
line.parsed_backtrace_entry.to_h
|
|
62
|
-
)
|
|
63
|
-
else
|
|
64
|
-
"from #{line}"
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
.join("\n"),
|
|
68
|
-
formatted_sources(sources, reset)
|
|
69
|
-
].compact.join("\n") + "\e[0m"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
47
|
def rewrite_exception(e)
|
|
73
48
|
rewrite_exception_message(e)
|
|
74
49
|
e.set_backtrace(rewrite_backtrace(e.backtrace))
|
|
@@ -84,21 +59,14 @@ module Klenod
|
|
|
84
59
|
end
|
|
85
60
|
end
|
|
86
61
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
[
|
|
93
|
-
"\e[1;34mSources:#{reset}",
|
|
94
|
-
sources
|
|
95
|
-
.map do |file, formatted_source|
|
|
96
|
-
"\e[1m#{file}\e[0m\n#{formatted_source}"
|
|
97
|
-
end
|
|
98
|
-
.join("\n")
|
|
99
|
-
].join("\n")
|
|
62
|
+
# The original source of the module evaluated from `file`, for tools
|
|
63
|
+
# that show an excerpt next to a frame.
|
|
64
|
+
def source_for(file)
|
|
65
|
+
@source_map_cache[file]&.input
|
|
100
66
|
end
|
|
101
67
|
|
|
68
|
+
private
|
|
69
|
+
|
|
102
70
|
def source_maps_for(mods)
|
|
103
71
|
mods.each_with_object({}) do |(key, mod), index|
|
|
104
72
|
next unless mod.respond_to?(:source_map)
|
|
@@ -148,56 +116,6 @@ module Klenod
|
|
|
148
116
|
def find_original_line_no(file, line_no)
|
|
149
117
|
@source_map_cache[file]&.find_original_line_no(line_no)
|
|
150
118
|
end
|
|
151
|
-
|
|
152
|
-
def format_sources(backtrace)
|
|
153
|
-
backtrace
|
|
154
|
-
.select { |line| line.is_a?(BacktraceString) }
|
|
155
|
-
.map(&:parsed_backtrace_entry)
|
|
156
|
-
.group_by(&:file)
|
|
157
|
-
.map do |file, entries|
|
|
158
|
-
if (source_map = @source_map_cache[file])
|
|
159
|
-
[file, format_source(source_map.input, entries.map(&:line))]
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
.compact
|
|
163
|
-
.to_h
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def format_source(source, interesting_lines)
|
|
167
|
-
ranges =
|
|
168
|
-
merge_overlapping_ranges(interesting_lines.map { (it - 2)..(it + 2) })
|
|
169
|
-
lines = source.each_line.to_a
|
|
170
|
-
|
|
171
|
-
ranges
|
|
172
|
-
.map do |range|
|
|
173
|
-
range
|
|
174
|
-
.map do |i|
|
|
175
|
-
next if i <= 0
|
|
176
|
-
line = lines[i - 1]
|
|
177
|
-
next unless line
|
|
178
|
-
|
|
179
|
-
str = format("%3d: %s", i, line.chomp)
|
|
180
|
-
interesting_lines.include?(i) ? "\e[1;31m#{str}\e[0m" : str
|
|
181
|
-
end
|
|
182
|
-
.compact
|
|
183
|
-
.join("\n")
|
|
184
|
-
end
|
|
185
|
-
.join("\n\e[37;44m ... \e[0m\n")
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def merge_overlapping_ranges(ranges)
|
|
189
|
-
ranges.each_with_object([]) do |range, merged|
|
|
190
|
-
if (idx = merged.find_index { |r| r.overlap?(range) })
|
|
191
|
-
overlapping = merged[idx]
|
|
192
|
-
merged[idx] = [overlapping.begin, range.begin].min..[
|
|
193
|
-
overlapping.end,
|
|
194
|
-
range.end
|
|
195
|
-
].max
|
|
196
|
-
else
|
|
197
|
-
merged << range
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
119
|
end
|
|
202
120
|
end
|
|
203
121
|
end
|