ruby-lsp-rails 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70557479de3e98dce68fda3bf76ee6ee6a547ee2d123b7e26bf687306bdd1879
4
- data.tar.gz: 1c4560bc452b582ef4c40f793977ef4854cb4e8877bbd3850dbc1aa34b9e4f4a
3
+ metadata.gz: d9abe40b8b01b5f0e7e81a3831b3da7fa57902d64f17cb0ce3a950d043d895ab
4
+ data.tar.gz: 02b60ff2b040617a25fea20d715066a17092459532f56dc08a4350997e1369bc
5
5
  SHA512:
6
- metadata.gz: 01c4c4e000f1d0fb7996ed31a9474bc36a0ddabebdfe3d71dc276572172f0421be818037fb5d001bb77a8bd48cfd58466d1c3431595b8aad071466011f4e4d02
7
- data.tar.gz: 937340398445803a2413513a739c771bc9e21ae41813bd5529c3c68c654a2714803a0a9cf3d6d850df279188d8ef2d565767f1f157481091e5c8be891e3c0af5
6
+ metadata.gz: e76db2c3f6ea300e1b7a935b958a60b18a322e5039f518a0ccbc4efe2dbe7c69f65401987c0969d9fff479e3526831600a24788f477cbd19d3a2d528dc63a293
7
+ data.tar.gz: 1556932fe8c67752607b15e2520c2f71c0c88c2e1a005c78c1c72b31e49a2efac9e38a9da499bb91478ea8f8386661a269c18ab300809823d80c519cf517afa1
@@ -29,24 +29,24 @@ module RubyLsp
29
29
  sig do
30
30
  override.params(
31
31
  uri: URI::Generic,
32
- emitter: EventEmitter,
32
+ dispatcher: Prism::Dispatcher,
33
33
  message_queue: Thread::Queue,
34
34
  ).returns(T.nilable(Listener[T::Array[Interface::CodeLens]]))
35
35
  end
36
- def create_code_lens_listener(uri, emitter, message_queue)
37
- CodeLens.new(uri, emitter, message_queue)
36
+ def create_code_lens_listener(uri, dispatcher, message_queue)
37
+ CodeLens.new(uri, dispatcher, message_queue)
38
38
  end
39
39
 
40
40
  sig do
41
41
  override.params(
42
42
  nesting: T::Array[String],
43
43
  index: RubyIndexer::Index,
44
- emitter: EventEmitter,
44
+ dispatcher: Prism::Dispatcher,
45
45
  message_queue: Thread::Queue,
46
46
  ).returns(T.nilable(Listener[T.nilable(Interface::Hover)]))
47
47
  end
48
- def create_hover_listener(nesting, index, emitter, message_queue)
49
- Hover.new(client, emitter, message_queue)
48
+ def create_hover_listener(nesting, index, dispatcher, message_queue)
49
+ Hover.new(client, nesting, index, dispatcher, message_queue)
50
50
  end
51
51
 
52
52
  sig { override.returns(String) }
@@ -42,17 +42,17 @@ module RubyLsp
42
42
  sig { override.returns(ResponseType) }
43
43
  attr_reader :_response
44
44
 
45
- sig { params(uri: URI::Generic, emitter: EventEmitter, message_queue: Thread::Queue).void }
46
- def initialize(uri, emitter, message_queue)
45
+ sig { params(uri: URI::Generic, dispatcher: Prism::Dispatcher, message_queue: Thread::Queue).void }
46
+ def initialize(uri, dispatcher, message_queue)
47
47
  @_response = T.let([], ResponseType)
48
48
  @path = T.let(uri.to_standardized_path, T.nilable(String))
49
- emitter.register(self, :on_call, :on_class, :on_def)
49
+ dispatcher.register(self, :on_call_node_enter, :on_class_node_enter, :on_def_node_enter)
50
50
 
51
- super(emitter, message_queue)
51
+ super(dispatcher, message_queue)
52
52
  end
53
53
 
54
- sig { params(node: YARP::CallNode).void }
55
- def on_call(node)
54
+ sig { params(node: Prism::CallNode).void }
55
+ def on_call_node_enter(node)
56
56
  message_value = node.message
57
57
  return unless message_value == "test"
58
58
 
@@ -62,15 +62,15 @@ module RubyLsp
62
62
  first_argument = arguments.first
63
63
 
64
64
  content = case first_argument
65
- when YARP::StringConcatNode
65
+ when Prism::StringConcatNode
66
66
  left = first_argument.left
67
67
  right = first_argument.right
68
68
  # We only support two lines of concatenation on test names
69
- if left.is_a?(YARP::StringNode) &&
70
- right.is_a?(YARP::StringNode)
69
+ if left.is_a?(Prism::StringNode) &&
70
+ right.is_a?(Prism::StringNode)
71
71
  left.content + right.content
72
72
  end
73
- when YARP::StringNode
73
+ when Prism::StringNode
74
74
  first_argument.content
75
75
  end
76
76
 
@@ -82,8 +82,8 @@ module RubyLsp
82
82
  end
83
83
 
84
84
  # Although uncommon, Rails tests can be written with the classic "def test_name" syntax.
85
- sig { params(node: YARP::DefNode).void }
86
- def on_def(node)
85
+ sig { params(node: Prism::DefNode).void }
86
+ def on_def_node_enter(node)
87
87
  method_name = node.name.to_s
88
88
  if method_name.start_with?("test_")
89
89
  line_number = node.location.start_line
@@ -92,8 +92,8 @@ module RubyLsp
92
92
  end
93
93
  end
94
94
 
95
- sig { params(node: YARP::ClassNode).void }
96
- def on_class(node)
95
+ sig { params(node: Prism::ClassNode).void }
96
+ def on_class_node_enter(node)
97
97
  class_name = node.constant_path.slice
98
98
  if class_name.end_with?("Test")
99
99
  command = "#{BASE_COMMAND} #{@path}"
@@ -103,7 +103,7 @@ module RubyLsp
103
103
 
104
104
  private
105
105
 
106
- sig { params(node: YARP::Node, name: String, command: String, kind: Symbol).void }
106
+ sig { params(node: Prism::Node, name: String, command: String, kind: Symbol).void }
107
107
  def add_test_code_lens(node, name:, command:, kind:)
108
108
  return unless @path
109
109
 
@@ -25,37 +25,57 @@ module RubyLsp
25
25
  sig { override.returns(ResponseType) }
26
26
  attr_reader :_response
27
27
 
28
- sig { params(client: RailsClient, emitter: RubyLsp::EventEmitter, message_queue: Thread::Queue).void }
29
- def initialize(client, emitter, message_queue)
30
- super(emitter, message_queue)
28
+ sig do
29
+ params(
30
+ client: RailsClient,
31
+ nesting: T::Array[String],
32
+ index: RubyIndexer::Index,
33
+ dispatcher: Prism::Dispatcher,
34
+ message_queue: Thread::Queue,
35
+ ).void
36
+ end
37
+ def initialize(client, nesting, index, dispatcher, message_queue)
38
+ super(dispatcher, message_queue)
31
39
 
32
40
  @_response = T.let(nil, ResponseType)
33
41
  @client = client
34
- emitter.register(self, :on_constant_path, :on_constant_read, :on_call)
42
+ @nesting = nesting
43
+ @index = index
44
+ dispatcher.register(self, :on_constant_path_node_enter, :on_constant_read_node_enter, :on_call_node_enter)
35
45
  end
36
46
 
37
- sig { params(node: YARP::ConstantPathNode).void }
38
- def on_constant_path(node)
39
- @_response = generate_rails_document_link_hover(node.slice, node.location)
47
+ sig { params(node: Prism::ConstantPathNode).void }
48
+ def on_constant_path_node_enter(node)
49
+ entries = @index.resolve(node.slice, @nesting)
50
+ return unless entries
51
+
52
+ name = T.must(entries.first).name
53
+ content = +""
54
+ column_info = generate_column_content(name)
55
+ content << column_info if column_info
56
+
57
+ urls = Support::RailsDocumentClient.generate_rails_document_urls(name)
58
+ content << urls.join("\n\n") unless urls.empty?
59
+ return if content.empty?
60
+
61
+ contents = RubyLsp::Interface::MarkupContent.new(kind: "markdown", value: content)
62
+ @_response = RubyLsp::Interface::Hover.new(range: range_from_location(node.location), contents: contents)
40
63
  end
41
64
 
42
- sig { params(node: YARP::ConstantReadNode).void }
43
- def on_constant_read(node)
44
- model = @client.model(node.name.to_s)
45
- return if model.nil?
65
+ sig { params(node: Prism::ConstantReadNode).void }
66
+ def on_constant_read_node_enter(node)
67
+ entries = @index.resolve(node.name.to_s, @nesting)
68
+ return unless entries
69
+
70
+ content = generate_column_content(T.must(entries.first).name)
71
+ return unless content
46
72
 
47
- schema_file = model[:schema_file]
48
- content = +""
49
- if schema_file
50
- content << "[Schema](#{URI::Generic.build(scheme: "file", path: schema_file)})\n\n"
51
- end
52
- content << model[:columns].map { |name, type| "**#{name}**: #{type}\n" }.join("\n")
53
73
  contents = RubyLsp::Interface::MarkupContent.new(kind: "markdown", value: content)
54
- @_response = RubyLsp::Interface::Hover.new(range: range_from_node(node), contents: contents)
74
+ @_response = RubyLsp::Interface::Hover.new(range: range_from_location(node.location), contents: contents)
55
75
  end
56
76
 
57
- sig { params(node: YARP::CallNode).void }
58
- def on_call(node)
77
+ sig { params(node: Prism::CallNode).void }
78
+ def on_call_node_enter(node)
59
79
  message_value = node.message
60
80
  message_loc = node.message_loc
61
81
 
@@ -66,7 +86,19 @@ module RubyLsp
66
86
 
67
87
  private
68
88
 
69
- sig { params(name: String, location: YARP::Location).returns(T.nilable(Interface::Hover)) }
89
+ sig { params(name: String).returns(T.nilable(String)) }
90
+ def generate_column_content(name)
91
+ model = @client.model(name)
92
+ return if model.nil?
93
+
94
+ schema_file = model[:schema_file]
95
+ content = +""
96
+ content << "[Schema](#{URI::Generic.build(scheme: "file", path: schema_file)})\n\n" if schema_file
97
+ content << model[:columns].map { |name, type| "**#{name}**: #{type}\n" }.join("\n")
98
+ content
99
+ end
100
+
101
+ sig { params(name: String, location: Prism::Location).returns(T.nilable(Interface::Hover)) }
70
102
  def generate_rails_document_link_hover(name, location)
71
103
  urls = Support::RailsDocumentClient.generate_rails_document_urls(name)
72
104
  return if urls.empty?
@@ -3,6 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Rails
6
- VERSION = "0.2.6"
6
+ VERSION = "0.2.7"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lsp-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-04 00:00:00.000000000 Z
11
+ date: 2023-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,20 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.11.0
33
+ version: 0.12.0
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: 0.12.0
36
+ version: 0.13.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.11.0
43
+ version: 0.12.0
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.12.0
46
+ version: 0.13.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sorbet-runtime
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubygems_version: 3.4.20
104
+ rubygems_version: 3.4.21
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: A Ruby LSP addon for Rails