Skip to content

Commit 34babd4

Browse files
authored
Merge pull request #120 from Shopify/vs/handle_breaking_changes
Upgrade to Ruby LSP v0.8.0 and handle breaking changes
2 parents 93fa0ac + da85d91 commit 34babd4

File tree

14 files changed

+546
-350
lines changed

14 files changed

+546
-350
lines changed

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ PATH
33
specs:
44
ruby-lsp-rails (0.2.2)
55
rails (>= 6.0)
6-
ruby-lsp (>= 0.6.2, < 0.8.0)
6+
ruby-lsp (>= 0.8.0, < 0.9.0)
77
sorbet-runtime (>= 0.5.9897)
88

99
GEM
@@ -197,7 +197,7 @@ GEM
197197
rubocop (~> 1.51)
198198
rubocop-sorbet (0.7.2)
199199
rubocop (>= 0.90.0)
200-
ruby-lsp (0.7.6)
200+
ruby-lsp (0.8.0)
201201
language_server-protocol (~> 3.17.0)
202202
sorbet-runtime
203203
syntax_tree (>= 6.1.1, < 7)

lib/ruby_lsp/ruby_lsp_rails/code_lens.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,13 @@ class CodeLens < ::RubyLsp::Listener
3939
ResponseType = type_member { { fixed: T::Array[::RubyLsp::Interface::CodeLens] } }
4040
BASE_COMMAND = "bin/rails test"
4141

42-
::RubyLsp::Requests::CodeLens.add_listener(self)
43-
4442
sig { override.returns(ResponseType) }
4543
attr_reader :response
4644

47-
sig { params(uri: String, emitter: EventEmitter, message_queue: Thread::Queue).void }
45+
sig { params(uri: URI::Generic, emitter: EventEmitter, message_queue: Thread::Queue).void }
4846
def initialize(uri, emitter, message_queue)
4947
@response = T.let([], ResponseType)
50-
@path = T.let(URI(uri).path, T.nilable(String))
48+
@path = T.let(uri.to_standardized_path, T.nilable(String))
5149
emitter.register(self, :on_command, :on_class, :on_def)
5250

5351
super(emitter, message_queue)
@@ -109,6 +107,8 @@ def on_class(node)
109107

110108
sig { params(node: SyntaxTree::Node, name: String, command: String, kind: Symbol).void }
111109
def add_test_code_lens(node, name:, command:, kind:)
110+
return unless @path
111+
112112
arguments = [
113113
@path,
114114
name,

lib/ruby_lsp/ruby_lsp_rails/extension.rb

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,39 @@ module Rails
1212
class Extension < ::RubyLsp::Extension
1313
extend T::Sig
1414

15+
sig { returns(RailsClient) }
16+
def client
17+
@client ||= T.let(RailsClient.new, T.nilable(RailsClient))
18+
end
19+
1520
sig { override.void }
1621
def activate
17-
RubyLsp::Rails::RailsClient.instance.check_if_server_is_running!
22+
client.check_if_server_is_running!
23+
end
24+
25+
sig { override.void }
26+
def deactivate; end
27+
28+
# Creates a new CodeLens listener. This method is invoked on every CodeLens request
29+
sig do
30+
override.params(
31+
uri: URI::Generic,
32+
emitter: EventEmitter,
33+
message_queue: Thread::Queue,
34+
).returns(T.nilable(Listener[T::Array[Interface::CodeLens]]))
35+
end
36+
def create_code_lens_listener(uri, emitter, message_queue)
37+
CodeLens.new(uri, emitter, message_queue)
38+
end
39+
40+
sig do
41+
override.params(
42+
emitter: EventEmitter,
43+
message_queue: Thread::Queue,
44+
).returns(T.nilable(Listener[T.nilable(Interface::Hover)]))
45+
end
46+
def create_hover_listener(emitter, message_queue)
47+
Hover.new(client, emitter, message_queue)
1848
end
1949

2050
sig { override.returns(String) }

lib/ruby_lsp/ruby_lsp_rails/hover.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,21 @@ class Hover < ::RubyLsp::Listener
2020

2121
ResponseType = type_member { { fixed: T.nilable(::RubyLsp::Interface::Hover) } }
2222

23-
::RubyLsp::Requests::Hover.add_listener(self)
24-
2523
sig { override.returns(ResponseType) }
2624
attr_reader :response
2725

28-
sig { params(emitter: RubyLsp::EventEmitter, message_queue: Thread::Queue).void }
29-
def initialize(emitter, message_queue)
30-
super
26+
sig { params(client: RailsClient, emitter: RubyLsp::EventEmitter, message_queue: Thread::Queue).void }
27+
def initialize(client, emitter, message_queue)
28+
super(emitter, message_queue)
3129

3230
@response = T.let(nil, ResponseType)
31+
@client = client
3332
emitter.register(self, :on_const)
3433
end
3534

3635
sig { params(node: SyntaxTree::Const).void }
3736
def on_const(node)
38-
model = RailsClient.instance.model(node.value)
37+
model = @client.model(node.value)
3938
return if model.nil?
4039

4140
schema_file = model[:schema_file]

lib/ruby_lsp/ruby_lsp_rails/rails_client.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# typed: strict
22
# frozen_string_literal: true
33

4-
require "singleton"
54
require "net/http"
65

76
module RubyLsp
@@ -10,7 +9,6 @@ class RailsClient
109
class ServerAddressUnknown < StandardError; end
1110

1211
extend T::Sig
13-
include Singleton
1412

1513
SERVER_NOT_RUNNING_MESSAGE = "Rails server is not running. " \
1614
"To get Rails features in the editor, boot the Rails server"

ruby-lsp-rails.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
2222
end
2323

2424
spec.add_dependency("rails", ">= 6.0")
25-
spec.add_dependency("ruby-lsp", ">= 0.6.2", "< 0.8.0")
25+
spec.add_dependency("ruby-lsp", ">= 0.8.0", "< 0.9.0")
2626
spec.add_dependency("sorbet-runtime", ">= 0.5.9897")
2727
end

0 commit comments

Comments
 (0)