Skip to content

Commit 8f7fc5b

Browse files
authored
Add API for delegate notifications and requests (#474)
1 parent 2f9b081 commit 8f7fc5b

File tree

2 files changed

+62
-12
lines changed

2 files changed

+62
-12
lines changed

lib/ruby_lsp/ruby_lsp_rails/runner_client.rb

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,36 @@ def route(controller:, action:)
174174
nil
175175
end
176176

177+
# Delegates a notification to a server add-on
178+
sig { params(server_addon_name: String, request_name: String, params: T.untyped).void }
179+
def delegate_notification(server_addon_name:, request_name:, **params)
180+
send_notification(
181+
"server_addon/delegate",
182+
request_name: request_name,
183+
server_addon_name: server_addon_name,
184+
**params,
185+
)
186+
end
187+
188+
# Delegates a request to a server add-on
189+
sig do
190+
params(
191+
server_addon_name: String,
192+
request_name: String,
193+
params: T.untyped,
194+
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
195+
end
196+
def delegate_request(server_addon_name:, request_name:, **params)
197+
make_request(
198+
"server_addon/delegate",
199+
server_addon_name: server_addon_name,
200+
request_name: request_name,
201+
**params,
202+
)
203+
rescue IncompleteMessageError
204+
nil
205+
end
206+
177207
sig { void }
178208
def trigger_reload
179209
log_message("Reloading Rails application")
@@ -205,24 +235,24 @@ def stopped?
205235
sig do
206236
params(
207237
request: String,
208-
params: T.nilable(T::Hash[Symbol, T.untyped]),
238+
params: T.untyped,
209239
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
210240
end
211-
def make_request(request, params = nil)
212-
send_message(request, params)
241+
def make_request(request, **params)
242+
send_message(request, **params)
213243
read_response
214244
end
215245

216246
# Notifications are like messages, but one-way, with no response sent back.
217-
sig { params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
218-
def send_notification(request, params = nil) = send_message(request, params)
247+
sig { params(request: String, params: T.untyped).void }
248+
def send_notification(request, **params) = send_message(request, **params)
219249

220250
private
221251

222-
sig { overridable.params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
223-
def send_message(request, params = nil)
252+
sig { overridable.params(request: String, params: T.untyped).void }
253+
def send_message(request, **params)
224254
message = { method: request }
225-
message[:params] = params if params
255+
message[:params] = params
226256
json = message.to_json
227257

228258
@mutex.synchronize do
@@ -303,8 +333,8 @@ def log_message(message, type: RubyLsp::Constant::MessageType::LOG)
303333
# no-op
304334
end
305335

306-
sig { override.params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
307-
def send_message(request, params = nil)
336+
sig { override.params(request: String, params: T.untyped).void }
337+
def send_message(request, **params)
308338
# no-op
309339
end
310340

test/ruby_lsp_rails/runner_client_test.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,26 @@ class RunnerClientTest < ActiveSupport::TestCase
9999
FileUtils.mv("test/dummy/config/application.rb.bak", "test/dummy/config/application.rb")
100100
end
101101

102+
test "delegate notification" do
103+
@client.expects(:send_notification).with(
104+
"server_addon/delegate",
105+
server_addon_name: "My Add-on",
106+
request_name: "do_something",
107+
id: 5,
108+
)
109+
@client.delegate_notification(server_addon_name: "My Add-on", request_name: "do_something", id: 5)
110+
end
111+
112+
test "delegate request" do
113+
@client.expects(:make_request).with(
114+
"server_addon/delegate",
115+
server_addon_name: "My Add-on",
116+
request_name: "do_something",
117+
id: 5,
118+
)
119+
@client.delegate_request(server_addon_name: "My Add-on", request_name: "do_something", id: 5)
120+
end
121+
102122
private
103123

104124
def pop_log_notification(message_queue, type)
@@ -124,11 +144,11 @@ class NullClientTest < ActiveSupport::TestCase
124144
end
125145

126146
test "#send_message is a no-op" do
127-
assert_nothing_raised { @client.send(:send_message, "request", nil) }
147+
assert_nothing_raised { @client.send(:send_message, "request") }
128148
end
129149

130150
test "#send_notification is a no-op" do
131-
assert_nothing_raised { @client.send(:send_notification, "request", nil) }
151+
assert_nothing_raised { @client.send(:send_notification, "request") }
132152
end
133153

134154
test "#read_response is a no-op" do

0 commit comments

Comments
 (0)