klenod-runtime 0.0.25 → 0.0.27

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a97cfa8ffe99cf3ca9b6945dd5ffb00651033260a351bd410f15c5a27ff9914
4
- data.tar.gz: 241211ea238eef38293d64dfd153df4ee10e0e67f57159c6902d5d6f61a77dfd
3
+ metadata.gz: ec22e411f49459149641d8ea8b1aaa0a55e619c4c45e4d34a189b0ff0f4fcb9b
4
+ data.tar.gz: d800fd32dc4db55d8595fb0227f62de71860c8da8048c2fa7dd8dae2ef38efce
5
5
  SHA512:
6
- metadata.gz: a5084b92b42713e06965b08fed7e53880fc8309e0a9705556a0a7b7c36a9bb587ab4694cbe1568ab9e48e6f908c0525edd884879854411e79de032a167ff89d1
7
- data.tar.gz: 0ae0cc9c9c99aa5df9dc6e049fe699d4b6469cae2aad0ee2784a18c1926aa79a34d33bb766d4874d0b95edd5f0556b669985c7f047d35eea49a15a2502811492
6
+ metadata.gz: ae054ac59be068695833d60a5115f16d222dc0861ecdca5f71b3b0a7568ab2ba89c4f016b9d80535867239102ca4fcea8c059290a9e48117f00c50193300a76a
7
+ data.tar.gz: 60a7dff20e4563100af20037ccdfee2f940e407c512e1c7c409e5b0c37d9955e19e0b3989a5e4ce2290e9859c639d6b2198166f3215b793a756e6c654620158d
data/README.md CHANGED
@@ -10,7 +10,7 @@ It contains only the runtime pieces needed after a bundle has already been built
10
10
  - lazy import support
11
11
  - source maps and backtrace rewriting
12
12
 
13
- This gem should stay free of build plugins and heavyweight build-time dependencies such as RMagick, Syntax Tree, Haml, CSS processing, or file watching.
13
+ This gem should stay free of build plugins and heavyweight build-time dependencies such as RMagick, Haml, CSS processing, or file watching.
14
14
 
15
15
  Use this gem in applications that load an existing bundle:
16
16
 
@@ -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
- private
88
-
89
- def formatted_sources(sources, reset)
90
- return nil if sources.empty?
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Klenod
4
4
  module Runtime
5
- VERSION = "0.0.25"
5
+ VERSION = "0.0.27"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klenod-runtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.25
4
+ version: 0.0.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrés Alin