Skip to content

Commit 0bf809b

Browse files
author
Andy Waite
authored
Convert to use inline RBS signatures (#573)
* Update sorbet and spoom * Update rubocop-sorbet * Update RuboCop config * $ be spoom srb sigs translate --from rbi --to rbs * Enable --enable-experimental-rbs-signatures * $ bundle lock --add-platform x64-mingw-ucrt
1 parent d44779e commit 0bf809b

File tree

13 files changed

+161
-236
lines changed

13 files changed

+161
-236
lines changed

.rubocop.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,9 @@ Sorbet/StrictSigil:
3636
- "**/*.rake"
3737
- "test/**/*.rb"
3838
- "lib/ruby_lsp/ruby_lsp_rails/server.rb" # we can't assume sorbet-runtime is available
39+
40+
Layout/LeadingCommentSpace:
41+
AllowRBSInlineAnnotation: true
42+
43+
Layout/LineLength:
44+
AllowedPatterns: ['\A\s*#:'] # for inline RBS signaturs

Gemfile.lock

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,9 @@ GEM
100100
irb (1.14.1)
101101
rdoc (>= 4.0.0)
102102
reline (>= 0.4.2)
103-
json (2.7.6)
104-
language_server-protocol (3.17.0.3)
103+
json (2.10.1)
104+
language_server-protocol (3.17.0.4)
105+
lint_roller (1.1.0)
105106
logger (1.6.5)
106107
loofah (2.23.1)
107108
crass (~> 1.0.2)
@@ -142,7 +143,7 @@ GEM
142143
nokogiri (1.18.1-x86_64-linux-musl)
143144
racc (~> 1.4)
144145
parallel (1.26.3)
145-
parser (3.3.6.0)
146+
parser (3.3.7.1)
146147
ast (~> 2.4.1)
147148
racc
148149
prism (1.3.0)
@@ -196,20 +197,21 @@ GEM
196197
logger
197198
rdoc (6.7.0)
198199
psych (>= 4.0.0)
199-
regexp_parser (2.9.2)
200+
regexp_parser (2.10.0)
200201
reline (0.5.11)
201202
io-console (~> 0.5)
202-
rubocop (1.68.0)
203+
rubocop (1.73.1)
203204
json (~> 2.3)
204-
language_server-protocol (>= 3.17.0)
205+
language_server-protocol (~> 3.17.0.2)
206+
lint_roller (~> 1.1.0)
205207
parallel (~> 1.10)
206208
parser (>= 3.3.0.2)
207209
rainbow (>= 2.2.2, < 4.0)
208-
regexp_parser (>= 2.4, < 3.0)
209-
rubocop-ast (>= 1.32.2, < 2.0)
210+
regexp_parser (>= 2.9.3, < 3.0)
211+
rubocop-ast (>= 1.38.0, < 2.0)
210212
ruby-progressbar (~> 1.7)
211-
unicode-display_width (>= 2.4.0, < 3.0)
212-
rubocop-ast (1.34.0)
213+
unicode-display_width (>= 2.4.0, < 4.0)
214+
rubocop-ast (1.38.1)
213215
parser (>= 3.3.1.0)
214216
rubocop-minitest (0.36.0)
215217
rubocop (>= 1.61, < 2.0)
@@ -218,7 +220,7 @@ GEM
218220
rubocop (~> 1.0)
219221
rubocop-shopify (2.15.1)
220222
rubocop (~> 1.51)
221-
rubocop-sorbet (0.8.7)
223+
rubocop-sorbet (0.8.9)
222224
rubocop (>= 1)
223225
ruby-lsp (0.23.6)
224226
language_server-protocol (~> 3.17.0)
@@ -228,18 +230,19 @@ GEM
228230
ruby-progressbar (1.13.0)
229231
ruby2_keywords (0.0.5)
230232
securerandom (0.3.1)
231-
sorbet (0.5.11761)
232-
sorbet-static (= 0.5.11761)
233-
sorbet-runtime (0.5.11761)
234-
sorbet-static (0.5.11761-aarch64-linux)
235-
sorbet-static (0.5.11761-universal-darwin)
236-
sorbet-static (0.5.11761-x86_64-linux)
237-
sorbet-static-and-runtime (0.5.11761)
238-
sorbet (= 0.5.11761)
239-
sorbet-runtime (= 0.5.11761)
240-
spoom (1.5.1)
233+
sorbet (0.5.11865)
234+
sorbet-static (= 0.5.11865)
235+
sorbet-runtime (0.5.11865)
236+
sorbet-static (0.5.11865-aarch64-linux)
237+
sorbet-static (0.5.11865-universal-darwin)
238+
sorbet-static (0.5.11865-x86_64-linux)
239+
sorbet-static-and-runtime (0.5.11865)
240+
sorbet (= 0.5.11865)
241+
sorbet-runtime (= 0.5.11865)
242+
spoom (1.5.4)
241243
erubi (>= 1.10.0)
242244
prism (>= 0.28.0)
245+
rbi (>= 0.2.3)
243246
sorbet-static-and-runtime (>= 0.5.10187)
244247
thor (>= 0.19.2)
245248
sqlite3 (2.5.0-aarch64-linux-gnu)
@@ -264,9 +267,11 @@ GEM
264267
timeout (0.4.2)
265268
tzinfo (2.0.6)
266269
concurrent-ruby (~> 1.0)
267-
tzinfo-data (1.2024.2)
270+
tzinfo-data (1.2025.1)
268271
tzinfo (>= 1.0.0)
269-
unicode-display_width (2.6.0)
272+
unicode-display_width (3.1.4)
273+
unicode-emoji (~> 4.0, >= 4.0.4)
274+
unicode-emoji (4.0.4)
270275
uri (1.0.1)
271276
useragent (0.16.10)
272277
websocket-driver (0.7.6)

lib/ruby_lsp/ruby_lsp_rails/addon.rb

Lines changed: 31 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class Addon < ::RubyLsp::Addon
2323

2424
RUN_MIGRATIONS_TITLE = "Run Migrations"
2525

26-
sig { void }
26+
#: -> void
2727
def initialize
2828
super
2929

@@ -53,12 +53,13 @@ def initialize
5353
end
5454
end
5555

56-
sig { returns(RunnerClient) }
56+
#: -> RunnerClient
5757
def rails_runner_client
5858
@addon_mutex.synchronize { @rails_runner_client }
5959
end
6060

61-
sig { override.params(global_state: GlobalState, outgoing_queue: Thread::Queue).void }
61+
# @override
62+
#: (GlobalState global_state, Thread::Queue outgoing_queue) -> void
6263
def activate(global_state, outgoing_queue)
6364
@global_state = global_state
6465
@outgoing_queue = outgoing_queue
@@ -73,82 +74,56 @@ def activate(global_state, outgoing_queue)
7374
@client_mutex.unlock
7475
end
7576

76-
sig { override.void }
77+
# @override
78+
#: -> void
7779
def deactivate
7880
@rails_runner_client.shutdown
7981
end
8082

81-
sig { override.returns(String) }
83+
# @override
84+
#: -> String
8285
def version
8386
VERSION
8487
end
8588

8689
# Creates a new CodeLens listener. This method is invoked on every CodeLens request
87-
sig do
88-
override.params(
89-
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
90-
uri: URI::Generic,
91-
dispatcher: Prism::Dispatcher,
92-
).void
93-
end
90+
# @override
91+
#: (ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens] response_builder, URI::Generic uri, Prism::Dispatcher dispatcher) -> void
9492
def create_code_lens_listener(response_builder, uri, dispatcher)
9593
return unless @global_state
9694

9795
CodeLens.new(@rails_runner_client, @global_state, response_builder, uri, dispatcher)
9896
end
9997

100-
sig do
101-
override.params(
102-
response_builder: ResponseBuilders::Hover,
103-
node_context: NodeContext,
104-
dispatcher: Prism::Dispatcher,
105-
).void
106-
end
98+
# @override
99+
#: (ResponseBuilders::Hover response_builder, NodeContext node_context, Prism::Dispatcher dispatcher) -> void
107100
def create_hover_listener(response_builder, node_context, dispatcher)
108101
return unless @global_state
109102

110103
Hover.new(@rails_runner_client, response_builder, node_context, @global_state, dispatcher)
111104
end
112105

113-
sig do
114-
override.params(
115-
response_builder: ResponseBuilders::DocumentSymbol,
116-
dispatcher: Prism::Dispatcher,
117-
).returns(Object)
118-
end
106+
# @override
107+
#: (ResponseBuilders::DocumentSymbol response_builder, Prism::Dispatcher dispatcher) -> Object
119108
def create_document_symbol_listener(response_builder, dispatcher)
120109
DocumentSymbol.new(response_builder, dispatcher)
121110
end
122111

123-
sig do
124-
override.params(
125-
response_builder: ResponseBuilders::CollectionResponseBuilder[T.any(
126-
Interface::Location, Interface::LocationLink
127-
)],
128-
uri: URI::Generic,
129-
node_context: NodeContext,
130-
dispatcher: Prism::Dispatcher,
131-
).void
132-
end
112+
# @override
113+
#: (ResponseBuilders::CollectionResponseBuilder[(Interface::Location | Interface::LocationLink)] response_builder, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher) -> void
133114
def create_definition_listener(response_builder, uri, node_context, dispatcher)
134115
return unless @global_state
135116

136117
Definition.new(@rails_runner_client, response_builder, node_context, @global_state.index, dispatcher)
137118
end
138119

139-
sig do
140-
override.params(
141-
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CompletionItem],
142-
node_context: NodeContext,
143-
dispatcher: Prism::Dispatcher,
144-
uri: URI::Generic,
145-
).void
146-
end
120+
# @override
121+
#: (ResponseBuilders::CollectionResponseBuilder[Interface::CompletionItem] response_builder, NodeContext node_context, Prism::Dispatcher dispatcher, URI::Generic uri) -> void
147122
def create_completion_listener(response_builder, node_context, dispatcher, uri)
148123
Completion.new(@rails_runner_client, response_builder, node_context, dispatcher, uri)
149124
end
150125

151-
sig { params(changes: T::Array[{ uri: String, type: Integer }]).void }
126+
#: (Array[{uri: String, type: Integer}] changes) -> void
152127
def workspace_did_change_watched_files(changes)
153128
if changes.any? { |c| c[:uri].end_with?("db/schema.rb") || c[:uri].end_with?("structure.sql") }
154129
@rails_runner_client.trigger_reload
@@ -162,12 +137,14 @@ def workspace_did_change_watched_files(changes)
162137
end
163138
end
164139

165-
sig { override.returns(String) }
140+
# @override
141+
#: -> String
166142
def name
167143
"Ruby LSP Rails"
168144
end
169145

170-
sig { override.params(title: String).void }
146+
# @override
147+
#: (String title) -> void
171148
def handle_window_show_message_response(title)
172149
if title == RUN_MIGRATIONS_TITLE
173150

@@ -194,7 +171,7 @@ def handle_window_show_message_response(title)
194171

195172
private
196173

197-
sig { params(id: String, title: String, percentage: T.nilable(Integer), message: T.nilable(String)).void }
174+
#: (String id, String title, ?percentage: Integer?, ?message: String?) -> void
198175
def begin_progress(id, title, percentage: nil, message: nil)
199176
return unless @global_state&.client_capabilities&.supports_progress && @outgoing_queue
200177

@@ -212,21 +189,21 @@ def begin_progress(id, title, percentage: nil, message: nil)
212189
)
213190
end
214191

215-
sig { params(id: String, percentage: T.nilable(Integer), message: T.nilable(String)).void }
216-
def report_progress(id, percentage: nil, message: nil)
192+
#: (String id, ?percentage: Integer?, ?message: String?) -> void
193+
def report_progress(id, percentage: nil, message: nil)
217194
return unless @global_state&.client_capabilities&.supports_progress && @outgoing_queue
218195

219196
@outgoing_queue << Notification.progress_report(id, percentage: percentage, message: message)
220197
end
221198

222-
sig { params(id: String).void }
199+
#: (String id) -> void
223200
def end_progress(id)
224201
return unless @global_state&.client_capabilities&.supports_progress && @outgoing_queue
225202

226203
@outgoing_queue << Notification.progress_end(id)
227204
end
228205

229-
sig { params(global_state: GlobalState, outgoing_queue: Thread::Queue).void }
206+
#: (global_state: GlobalState, outgoing_queue: Thread::Queue) -> void
230207
def register_additional_file_watchers(global_state:, outgoing_queue:)
231208
return unless global_state.client_capabilities.supports_watching_files
232209

@@ -247,23 +224,23 @@ def register_additional_file_watchers(global_state:, outgoing_queue:)
247224
)
248225
end
249226

250-
sig { returns(Interface::FileSystemWatcher) }
227+
#: -> Interface::FileSystemWatcher
251228
def structure_sql_file_watcher
252229
Interface::FileSystemWatcher.new(
253230
glob_pattern: "**/*structure.sql",
254231
kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE,
255232
)
256233
end
257234

258-
sig { returns(Interface::FileSystemWatcher) }
235+
#: -> Interface::FileSystemWatcher
259236
def fixture_file_watcher
260237
Interface::FileSystemWatcher.new(
261238
glob_pattern: "**/fixtures/**/*.{yml,yaml,yml.erb,yaml.erb}",
262239
kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE,
263240
)
264241
end
265242

266-
sig { void }
243+
#: -> void
267244
def offer_to_run_pending_migrations
268245
return unless @outgoing_queue
269246
return unless @global_state&.client_capabilities&.window_show_message_supports_extra_properties

0 commit comments

Comments
 (0)