Skip to content

Commit 35675ce

Browse files
committed
Add API for delegate notifications and requests
1 parent c5043be commit 35675ce

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
@@ -144,6 +144,36 @@ def route(controller:, action:)
144144
nil
145145
end
146146

147+
# Delegates a notification to a server add-on
148+
sig { params(server_addon_name: String, request_name: String, params: T.untyped).void }
149+
def delegate_notification(server_addon_name, request_name, **params)
150+
send_notification(
151+
"server_addon/delegate",
152+
request_name: request_name,
153+
server_addon_name: server_addon_name,
154+
**params,
155+
)
156+
end
157+
158+
# Delegates a request to a server add-on
159+
sig do
160+
params(
161+
server_addon_name: String,
162+
request_name: String,
163+
params: T.untyped,
164+
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
165+
end
166+
def delegate_request(server_addon_name, request_name, **params)
167+
make_request(
168+
"server_addon/delegate",
169+
server_addon_name: server_addon_name,
170+
request_name: request_name,
171+
**params,
172+
)
173+
rescue IncompleteMessageError
174+
nil
175+
end
176+
147177
sig { void }
148178
def trigger_reload
149179
$stderr.puts("Reloading Rails application")
@@ -172,24 +202,24 @@ def stopped?
172202
sig do
173203
params(
174204
request: String,
175-
params: T.nilable(T::Hash[Symbol, T.untyped]),
205+
params: T.untyped,
176206
).returns(T.nilable(T::Hash[Symbol, T.untyped]))
177207
end
178-
def make_request(request, params = nil)
179-
send_message(request, params)
208+
def make_request(request, **params)
209+
send_message(request, **params)
180210
read_response
181211
end
182212

183213
# Notifications are like messages, but one-way, with no response sent back.
184-
sig { params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
185-
def send_notification(request, params = nil) = send_message(request, params)
214+
sig { params(request: String, params: T.untyped).void }
215+
def send_notification(request, **params) = send_message(request, **params)
186216

187217
private
188218

189-
sig { overridable.params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
190-
def send_message(request, params = nil)
219+
sig { overridable.params(request: String, params: T.untyped).void }
220+
def send_message(request, **params)
191221
message = { method: request }
192-
message[:params] = params if params
222+
message[:params] = params
193223
json = message.to_json
194224

195225
@mutex.synchronize do
@@ -255,8 +285,8 @@ def rails_root
255285

256286
private
257287

258-
sig { override.params(request: String, params: T.nilable(T::Hash[Symbol, T.untyped])).void }
259-
def send_message(request, params = nil)
288+
sig { override.params(request: String, params: T.untyped).void }
289+
def send_message(request, **params)
260290
# no-op
261291
end
262292

test/ruby_lsp_rails/runner_client_test.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,26 @@ class RunnerClientTest < ActiveSupport::TestCase
8686
ensure
8787
FileUtils.mv("test/dummy/config/application.rb.bak", "test/dummy/config/application.rb")
8888
end
89+
90+
test "delegate notification" do
91+
@client.expects(:send_notification).with(
92+
"server_addon/delegate",
93+
server_addon_name: "My Add-on",
94+
request_name: "do_something",
95+
id: 5,
96+
)
97+
@client.delegate_notification("My Add-on", "do_something", id: 5)
98+
end
99+
100+
test "delegate request" do
101+
@client.expects(:make_request).with(
102+
"server_addon/delegate",
103+
server_addon_name: "My Add-on",
104+
request_name: "do_something",
105+
id: 5,
106+
)
107+
@client.delegate_request("My Add-on", "do_something", id: 5)
108+
end
89109
end
90110

91111
class NullClientTest < ActiveSupport::TestCase
@@ -104,11 +124,11 @@ class NullClientTest < ActiveSupport::TestCase
104124
end
105125

106126
test "#send_message is a no-op" do
107-
assert_nothing_raised { @client.send(:send_message, "request", nil) }
127+
assert_nothing_raised { @client.send(:send_message, "request") }
108128
end
109129

110130
test "#send_notification is a no-op" do
111-
assert_nothing_raised { @client.send(:send_notification, "request", nil) }
131+
assert_nothing_raised { @client.send(:send_notification, "request") }
112132
end
113133

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

0 commit comments

Comments
 (0)