Module: Girb::IrbIntegration
- Defined in:
- lib/girb/irb_integration.rb
Constant Summary collapse
- DEBUG_COMMANDS =
%w[next n step s continue c finish break delete backtrace bt info catch debug].freeze
Class Attribute Summary collapse
-
.auto_continue ⇒ Object
Returns the value of attribute auto_continue.
-
.pending_user_question ⇒ Object
Store the original user question for continuation after debug mode transition.
Class Method Summary collapse
- .add_pending_input_command(cmd) ⇒ Object
- .add_pending_irb_command(cmd) ⇒ Object
- .auto_continue? ⇒ Boolean
- .debug_command?(cmd) ⇒ Boolean
- .has_pending_input? ⇒ Boolean
- .install_ai_keybinding ⇒ Object
- .install_debug_hook ⇒ Object
- .install_eval_hook ⇒ Object
- .install_readmultiline_patch ⇒ Object
-
.pending_input_commands ⇒ Object
Commands to be injected into IRB’s input stream.
- .pending_irb_commands ⇒ Object
- .save_session! ⇒ Object
- .session_started? ⇒ Boolean
- .setup ⇒ Object
- .setup_exit_hook ⇒ Object
- .start_session! ⇒ Object
- .take_next_input_command ⇒ Object
- .take_pending_irb_commands ⇒ Object
Class Attribute Details
.auto_continue ⇒ Object
Returns the value of attribute auto_continue.
63 64 65 |
# File 'lib/girb/irb_integration.rb', line 63 def auto_continue @auto_continue end |
.pending_user_question ⇒ Object
Store the original user question for continuation after debug mode transition
107 108 109 |
# File 'lib/girb/irb_integration.rb', line 107 def pending_user_question @pending_user_question end |
Class Method Details
.add_pending_input_command(cmd) ⇒ Object
84 85 86 |
# File 'lib/girb/irb_integration.rb', line 84 def add_pending_input_command(cmd) pending_input_commands << cmd end |
.add_pending_irb_command(cmd) ⇒ Object
69 70 71 |
# File 'lib/girb/irb_integration.rb', line 69 def add_pending_irb_command(cmd) pending_irb_commands << cmd end |
.auto_continue? ⇒ Boolean
102 103 104 |
# File 'lib/girb/irb_integration.rb', line 102 def auto_continue? @auto_continue end |
.debug_command?(cmd) ⇒ Boolean
97 98 99 100 |
# File 'lib/girb/irb_integration.rb', line 97 def debug_command?(cmd) name = cmd.strip.split(/\s+/, 2).first&.downcase DEBUG_COMMANDS.include?(name) end |
.has_pending_input? ⇒ Boolean
93 94 95 |
# File 'lib/girb/irb_integration.rb', line 93 def has_pending_input? @pending_input_commands && !@pending_input_commands.empty? end |
.install_ai_keybinding ⇒ Object
182 183 184 185 186 187 188 189 190 |
# File 'lib/girb/irb_integration.rb', line 182 def self.install_ai_keybinding return unless defined?(Reline) Reline::LineEditor.prepend(GirbLineEditorExtension) # Ctrl+Space (ASCII 0) にバインド Reline.core.config.add_default_key_binding_by_keymap(:emacs, [0], :girb_send_to_ai) Reline.core.config.add_default_key_binding_by_keymap(:vi_insert, [0], :girb_send_to_ai) end |
.install_debug_hook ⇒ Object
154 155 156 157 158 159 160 |
# File 'lib/girb/irb_integration.rb', line 154 def self.install_debug_hook return if @debug_hook_installed return unless defined?(IRB::Debug) IRB::Debug.singleton_class.prepend(Girb::IrbDebugHook) @debug_hook_installed = true end |
.install_eval_hook ⇒ Object
178 179 180 |
# File 'lib/girb/irb_integration.rb', line 178 def self.install_eval_hook IRB::Context.prepend(EvalHook) end |
.install_readmultiline_patch ⇒ Object
162 163 164 165 166 167 |
# File 'lib/girb/irb_integration.rb', line 162 def self.install_readmultiline_patch return if @readmultiline_patch_installed IRB::Irb.prepend(ReadmultilinePatch) @readmultiline_patch_installed = true end |
.pending_input_commands ⇒ Object
Commands to be injected into IRB’s input stream
80 81 82 |
# File 'lib/girb/irb_integration.rb', line 80 def pending_input_commands @pending_input_commands ||= [] end |
.pending_irb_commands ⇒ Object
65 66 67 |
# File 'lib/girb/irb_integration.rb', line 65 def pending_irb_commands @pending_irb_commands ||= [] end |
.save_session! ⇒ Object
122 123 124 125 126 127 128 |
# File 'lib/girb/irb_integration.rb', line 122 def save_session! return unless @session_started SessionPersistence.save_session rescue => e # exit時のエラーは静かに無視 STDERR.puts "[girb] Warning: Failed to save session: #{e.}" if ENV["GIRB_DEBUG"] end |
.session_started? ⇒ Boolean
109 110 111 |
# File 'lib/girb/irb_integration.rb', line 109 def session_started? @session_started end |
.setup ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/girb/irb_integration.rb', line 131 def self.setup # コマンドを登録 require_relative "../irb/command/qq" # 例外キャプチャのインストール ExceptionCapture.install # Ctrl+Space でAI送信するフックをインストール install_eval_hook # Ctrl+Space キーバインドをインストール install_ai_keybinding # readmultiline パッチをインストール(コマンド注入用) install_readmultiline_patch # セッション永続化が有効なら開始 start_session! if SessionPersistence.enabled? # IRB::Debugをフックして、debug開始時にgirb統合をセットアップ install_debug_hook end |
.setup_exit_hook ⇒ Object
169 170 171 172 173 174 175 176 |
# File 'lib/girb/irb_integration.rb', line 169 def self.setup_exit_hook return if @exit_hook_installed @exit_hook_installed = true at_exit do Girb::IrbIntegration.save_session! end end |
.start_session! ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'lib/girb/irb_integration.rb', line 113 def start_session! return if @session_started return unless SessionPersistence.enabled? SessionPersistence.start_session @session_started = true setup_exit_hook unless @exit_hook_installed end |
.take_next_input_command ⇒ Object
88 89 90 91 |
# File 'lib/girb/irb_integration.rb', line 88 def take_next_input_command @pending_input_commands ||= [] @pending_input_commands.shift end |
.take_pending_irb_commands ⇒ Object
73 74 75 76 77 |
# File 'lib/girb/irb_integration.rb', line 73 def take_pending_irb_commands cmds = @pending_irb_commands || [] @pending_irb_commands = [] cmds end |