Skip to content

Commit 04f5f16

Browse files
committed
Autoload with Zeitwerk
1 parent 4ec9d7a commit 04f5f16

File tree

4 files changed

+61
-5
lines changed

4 files changed

+61
-5
lines changed

debug.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
2929

3030
spec.add_dependency "irb", ">= 1.5.0" # for binding.irb(show_code: false)
3131
spec.add_dependency "reline", ">= 0.3.1"
32+
spec.add_development_dependency "zeitwerk", "~> 2.6.9"
3233
end

lib/debug/config.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ def update conf
142142
end
143143

144144
if_updated old_conf, conf, :postmortem do |_, new_p|
145-
if defined?(SESSION)
145+
# puts("const_defined? #{ DEBUGGER__.const_defined?(:SESSION)}, defined? #{defined?(SESSION)}")
146+
# if defined?(SESSION)
147+
if DEBUGGER__.const_defined?(:SESSION)
146148
SESSION.postmortem = new_p
147149
end
148150
end
@@ -152,7 +154,8 @@ def update conf
152154
end
153155

154156
if_updated old_conf, conf, :no_sigint_hook do |old, new|
155-
if defined?(SESSION)
157+
# if defined?(SESSION)
158+
if DEBUGGER__.const_defined?(:SESSION)
156159
SESSION.set_no_sigint_hook old, new
157160
end
158161
end

lib/debug/open.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,58 @@
66
# If RUBY_DEBUG_PORT envval is provided (digits), open TCP/IP port.
77
# Otherwise, UNIX domain socket is used.
88
#
9+
require "awesome_print"
10+
require "pry"
11+
require "zeitwerk"
12+
13+
# loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
14+
15+
module DEBUGGER__
16+
# Define these dummy constants so we silence errors like:
17+
# expected file lib/debug/local.rb to define constant DEBUGGER__::Local, but didn't (Zeitwerk::NameError)
18+
module Local; end
19+
module Server; end
20+
module ServerCdp; end
21+
module ServerDap; end
22+
module Version; end
23+
24+
# List special cases where constants are defined in files where they wouldn't otherwise be found
25+
autoload(:CONFIG, "#{__dir__}/config.rb")
26+
autoload(:SESSION, "#{__dir__}/config.rb")
27+
# autoload(:NaiveString, "#{__dir__}/server_dap.rb")
28+
autoload(:SkipPathHelper, "#{__dir__}/thread_client.rb")
29+
autoload(:UI_Base, "#{__dir__}/session.rb")
30+
end
31+
32+
loader = Zeitwerk::Loader.new
33+
loader.tag = File.basename(__FILE__, ".rb")
34+
loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
35+
# loader.push_dir(__dir__)
36+
37+
loader.ignore(
38+
"lib/debug/start.rb",
39+
"lib/debug/open.rb",
40+
"lib/debug/open_nonstop.rb",
41+
"lib/debug/prelude.rb",
42+
"lib/debug/dap_custom/traceInspector.rb"
43+
)
44+
45+
# Configure a special-case for this mangled module name
46+
loader.push_dir(__dir__, namespace: DEBUGGER__)
47+
# loader.inflector.inflect(
48+
# "debug" => "DEBUGGER__"
49+
# )
50+
51+
loader.enable_reloading
52+
loader.setup
53+
loader.log!
54+
puts "zeitwerk configured"
55+
56+
# ap({ roots: loader.send(:roots), ignored_paths: loader.send(:ignored_paths), all_paths: Zeitwerk::Loader.all_dirs })
57+
# loader.eager_load
58+
# puts("loaded constants under DEBUGGER__:")
59+
# ap(DEBUGGER__.constants)
60+
# exit(0)
961

1062
require_relative 'session'
1163
return unless defined?(DEBUGGER__)

lib/debug/session.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2212,7 +2212,7 @@ def self.open_tcp host: nil, port:, nonstop: false, **kw
22122212
CONFIG.set_config(**kw)
22132213
require_relative 'server'
22142214

2215-
if defined? SESSION
2215+
if DEBUGGER__.const_defined?(:SESSION)
22162216
SESSION.reset_ui UI_TcpServer.new(host: host, port: port)
22172217
else
22182218
initialize_session{ UI_TcpServer.new(host: host, port: port) }
@@ -2225,7 +2225,7 @@ def self.open_unix sock_path: nil, sock_dir: nil, nonstop: false, **kw
22252225
CONFIG.set_config(**kw)
22262226
require_relative 'server'
22272227

2228-
if defined? SESSION
2228+
if DEBUGGER__::const_defined?(:SESSION)
22292229
SESSION.reset_ui UI_UnixDomainServer.new(sock_dir: sock_dir, sock_path: sock_path)
22302230
else
22312231
initialize_session{ UI_UnixDomainServer.new(sock_dir: sock_dir, sock_path: sock_path) }
@@ -2376,7 +2376,7 @@ def self.log level, msg
23762376
@logfile = STDERR unless defined? @logfile
23772377
return if @logfile.closed?
23782378

2379-
if defined? SESSION
2379+
if DEBUGGER__::const_defined?(:SESSION)
23802380
pi = SESSION.process_info
23812381
process_info = pi ? "[#{pi}]" : nil
23822382
end

0 commit comments

Comments
 (0)