ruby-lsp 0.9.1 → 0.9.3
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 +4 -4
- data/VERSION +1 -1
- data/exe/ruby-lsp +3 -2
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +1 -1
- data/lib/ruby_lsp/executor.rb +30 -31
- data/lib/ruby_lsp/extension.rb +9 -0
- data/lib/ruby_lsp/requests/code_lens.rb +2 -2
- data/lib/ruby_lsp/requests/document_symbol.rb +22 -43
- data/lib/ruby_lsp/requests/on_type_formatting.rb +4 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c2f16b0f0e93ade0e4465fcf71148ac156f6d65b1354f07af2df4007c600c15
|
4
|
+
data.tar.gz: 7c6f4668f461315039e37f04354dddadb1678dd89ff9c249a268897992dfa4c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 184683630988346ae617e3df3d6d04c66b822d6d9734f595a41caa3603b38046e5ee5a7a4361abede0f3b8d1584371730be9af905d006fa881d4b718f3381947
|
7
|
+
data.tar.gz: 7c10ef841c059110b1d5bc38cde57de243140c37d7095ab8c7ce16d28e4c520c402f2bfcf604f7002a7e06d7db031b8ab9e52ce28bf3c50be0dc2671d5728170
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.3
|
data/exe/ruby-lsp
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
require "optparse"
|
5
5
|
|
6
|
+
original_args = ARGV.dup
|
6
7
|
options = {}
|
7
8
|
parser = OptionParser.new do |opts|
|
8
9
|
opts.banner = "Usage: ruby-lsp [options]"
|
@@ -33,7 +34,7 @@ parser = OptionParser.new do |opts|
|
|
33
34
|
end
|
34
35
|
|
35
36
|
begin
|
36
|
-
parser.parse
|
37
|
+
parser.parse!
|
37
38
|
rescue OptionParser::InvalidOption => e
|
38
39
|
warn(e)
|
39
40
|
warn("")
|
@@ -56,7 +57,7 @@ if ENV["BUNDLE_GEMFILE"].nil?
|
|
56
57
|
|
57
58
|
env = { "BUNDLE_GEMFILE" => bundle_gemfile }
|
58
59
|
env["BUNDLE_PATH"] = bundle_path if bundle_path
|
59
|
-
exit exec(env, "bundle exec ruby-lsp #{
|
60
|
+
exit exec(env, "bundle exec ruby-lsp #{original_args.join(" ")}")
|
60
61
|
end
|
61
62
|
|
62
63
|
require "sorbet-runtime"
|
@@ -134,7 +134,7 @@ module RubyIndexer
|
|
134
134
|
|
135
135
|
sig { returns(Regexp) }
|
136
136
|
def magic_comment_regex
|
137
|
-
/^\s*#\s*#{@excluded_magic_comments.join("|")}
|
137
|
+
@magic_comment_regex ||= T.let(/^\s*#\s*#{@excluded_magic_comments.join("|")}/, T.nilable(Regexp))
|
138
138
|
end
|
139
139
|
|
140
140
|
private
|
data/lib/ruby_lsp/executor.rb
CHANGED
@@ -104,6 +104,7 @@ module RubyLsp
|
|
104
104
|
emitter.visit(document.tree) if document.parsed?
|
105
105
|
|
106
106
|
code_lens.merge_external_listeners_responses!
|
107
|
+
document_symbol.merge_external_listeners_responses!
|
107
108
|
|
108
109
|
# Store all responses retrieve in this round of visits in the cache and then return the response for the request
|
109
110
|
# we actually received
|
@@ -177,6 +178,8 @@ module RubyLsp
|
|
177
178
|
workspace_symbol(request.dig(:params, :query))
|
178
179
|
when "rubyLsp/textDocument/showSyntaxTree"
|
179
180
|
show_syntax_tree(uri, request.dig(:params, :range))
|
181
|
+
else
|
182
|
+
VOID
|
180
183
|
end
|
181
184
|
end
|
182
185
|
|
@@ -204,8 +207,6 @@ module RubyLsp
|
|
204
207
|
|
205
208
|
sig { void }
|
206
209
|
def perform_initial_indexing
|
207
|
-
return unless @store.experimental_features
|
208
|
-
|
209
210
|
# The begin progress invocation happens during `initialize`, so that the notification is sent before we are
|
210
211
|
# stuck indexing files
|
211
212
|
RubyIndexer.configuration.load_config
|
@@ -581,7 +582,7 @@ module RubyLsp
|
|
581
582
|
Interface::DocumentSymbolClientCapabilities.new(
|
582
583
|
hierarchical_document_symbol_support: true,
|
583
584
|
symbol_kind: {
|
584
|
-
value_set:
|
585
|
+
value_set: (Constant::SymbolKind::FILE..Constant::SymbolKind::TYPE_PARAMETER).to_a,
|
585
586
|
},
|
586
587
|
)
|
587
588
|
end
|
@@ -643,37 +644,35 @@ module RubyLsp
|
|
643
644
|
)
|
644
645
|
end
|
645
646
|
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
],
|
667
|
-
),
|
647
|
+
# Dynamically registered capabilities
|
648
|
+
file_watching_caps = options.dig(:capabilities, :workspace, :didChangeWatchedFiles)
|
649
|
+
|
650
|
+
# Not every client supports dynamic registration or file watching
|
651
|
+
if file_watching_caps&.dig(:dynamicRegistration) && file_watching_caps&.dig(:relativePatternSupport)
|
652
|
+
@message_queue << Request.new(
|
653
|
+
message: "client/registerCapability",
|
654
|
+
params: Interface::RegistrationParams.new(
|
655
|
+
registrations: [
|
656
|
+
# Register watching Ruby files
|
657
|
+
Interface::Registration.new(
|
658
|
+
id: "workspace/didChangeWatchedFiles",
|
659
|
+
method: "workspace/didChangeWatchedFiles",
|
660
|
+
register_options: Interface::DidChangeWatchedFilesRegistrationOptions.new(
|
661
|
+
watchers: [
|
662
|
+
Interface::FileSystemWatcher.new(
|
663
|
+
glob_pattern: "**/*.rb",
|
664
|
+
kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE,
|
665
|
+
),
|
666
|
+
],
|
668
667
|
),
|
669
|
-
|
670
|
-
|
671
|
-
)
|
672
|
-
|
673
|
-
|
674
|
-
begin_progress("indexing-progress", "Ruby LSP: indexing files")
|
668
|
+
),
|
669
|
+
],
|
670
|
+
),
|
671
|
+
)
|
675
672
|
end
|
676
673
|
|
674
|
+
begin_progress("indexing-progress", "Ruby LSP: indexing files")
|
675
|
+
|
677
676
|
Interface::InitializeResult.new(
|
678
677
|
capabilities: Interface::ServerCapabilities.new(
|
679
678
|
text_document_sync: Interface::TextDocumentSyncOptions.new(
|
data/lib/ruby_lsp/extension.rb
CHANGED
@@ -124,5 +124,14 @@ module RubyLsp
|
|
124
124
|
).returns(T.nilable(Listener[T.nilable(Interface::Hover)]))
|
125
125
|
end
|
126
126
|
def create_hover_listener(emitter, message_queue); end
|
127
|
+
|
128
|
+
# Creates a new DocumentSymbol listener. This method is invoked on every DocumentSymbol request
|
129
|
+
sig do
|
130
|
+
overridable.params(
|
131
|
+
emitter: EventEmitter,
|
132
|
+
message_queue: Thread::Queue,
|
133
|
+
).returns(T.nilable(Listener[T.nilable(Interface::DocumentSymbol)]))
|
134
|
+
end
|
135
|
+
def create_document_symbol_listener(emitter, message_queue); end
|
127
136
|
end
|
128
137
|
end
|
@@ -65,7 +65,7 @@ module RubyLsp
|
|
65
65
|
class_name = node.constant.constant.value
|
66
66
|
@class_stack.push(class_name)
|
67
67
|
|
68
|
-
if class_name.end_with?("Test")
|
68
|
+
if @path && class_name.end_with?("Test")
|
69
69
|
add_test_code_lens(
|
70
70
|
node,
|
71
71
|
name: class_name,
|
@@ -89,7 +89,7 @@ module RubyLsp
|
|
89
89
|
visibility, _ = @visibility_stack.last
|
90
90
|
if visibility == "public"
|
91
91
|
method_name = node.name.value
|
92
|
-
if method_name.start_with?("test_")
|
92
|
+
if @path && method_name.start_with?("test_")
|
93
93
|
add_test_code_lens(
|
94
94
|
node,
|
95
95
|
name: method_name,
|
@@ -32,38 +32,6 @@ module RubyLsp
|
|
32
32
|
|
33
33
|
ResponseType = type_member { { fixed: T::Array[Interface::DocumentSymbol] } }
|
34
34
|
|
35
|
-
SYMBOL_KIND = T.let(
|
36
|
-
{
|
37
|
-
file: 1,
|
38
|
-
module: 2,
|
39
|
-
namespace: 3,
|
40
|
-
package: 4,
|
41
|
-
class: 5,
|
42
|
-
method: 6,
|
43
|
-
property: 7,
|
44
|
-
field: 8,
|
45
|
-
constructor: 9,
|
46
|
-
enum: 10,
|
47
|
-
interface: 11,
|
48
|
-
function: 12,
|
49
|
-
variable: 13,
|
50
|
-
constant: 14,
|
51
|
-
string: 15,
|
52
|
-
number: 16,
|
53
|
-
boolean: 17,
|
54
|
-
array: 18,
|
55
|
-
object: 19,
|
56
|
-
key: 20,
|
57
|
-
null: 21,
|
58
|
-
enummember: 22,
|
59
|
-
struct: 23,
|
60
|
-
event: 24,
|
61
|
-
operator: 25,
|
62
|
-
typeparameter: 26,
|
63
|
-
}.freeze,
|
64
|
-
T::Hash[Symbol, Integer],
|
65
|
-
)
|
66
|
-
|
67
35
|
ATTR_ACCESSORS = T.let(["attr_reader", "attr_writer", "attr_accessor"].freeze, T::Array[String])
|
68
36
|
|
69
37
|
class SymbolHierarchyRoot
|
@@ -92,6 +60,10 @@ module RubyLsp
|
|
92
60
|
T::Array[T.any(SymbolHierarchyRoot, Interface::DocumentSymbol)],
|
93
61
|
)
|
94
62
|
|
63
|
+
@external_listeners.concat(
|
64
|
+
Extension.extensions.filter_map { |ext| ext.create_document_symbol_listener(emitter, message_queue) },
|
65
|
+
)
|
66
|
+
|
95
67
|
emitter.register(
|
96
68
|
self,
|
97
69
|
:on_class,
|
@@ -107,11 +79,18 @@ module RubyLsp
|
|
107
79
|
)
|
108
80
|
end
|
109
81
|
|
82
|
+
# Merges responses from other listeners
|
83
|
+
sig { override.params(other: Listener[ResponseType]).returns(T.self_type) }
|
84
|
+
def merge_response!(other)
|
85
|
+
@response.concat(other.response)
|
86
|
+
self
|
87
|
+
end
|
88
|
+
|
110
89
|
sig { params(node: SyntaxTree::ClassDeclaration).void }
|
111
90
|
def on_class(node)
|
112
91
|
@stack << create_document_symbol(
|
113
92
|
name: full_constant_name(node.constant),
|
114
|
-
kind:
|
93
|
+
kind: Constant::SymbolKind::CLASS,
|
115
94
|
range_node: node,
|
116
95
|
selection_range_node: node.constant,
|
117
96
|
)
|
@@ -131,7 +110,7 @@ module RubyLsp
|
|
131
110
|
|
132
111
|
create_document_symbol(
|
133
112
|
name: argument.value.value,
|
134
|
-
kind:
|
113
|
+
kind: Constant::SymbolKind::FIELD,
|
135
114
|
range_node: argument,
|
136
115
|
selection_range_node: argument.value,
|
137
116
|
)
|
@@ -142,7 +121,7 @@ module RubyLsp
|
|
142
121
|
def on_const_path_field(node)
|
143
122
|
create_document_symbol(
|
144
123
|
name: node.constant.value,
|
145
|
-
kind:
|
124
|
+
kind: Constant::SymbolKind::CONSTANT,
|
146
125
|
range_node: node,
|
147
126
|
selection_range_node: node.constant,
|
148
127
|
)
|
@@ -154,10 +133,10 @@ module RubyLsp
|
|
154
133
|
|
155
134
|
if target.is_a?(SyntaxTree::VarRef) && target.value.is_a?(SyntaxTree::Kw) && target.value.value == "self"
|
156
135
|
name = "self.#{node.name.value}"
|
157
|
-
kind =
|
136
|
+
kind = Constant::SymbolKind::METHOD
|
158
137
|
else
|
159
138
|
name = node.name.value
|
160
|
-
kind = name == "initialize" ?
|
139
|
+
kind = name == "initialize" ? Constant::SymbolKind::CONSTRUCTOR : Constant::SymbolKind::METHOD
|
161
140
|
end
|
162
141
|
|
163
142
|
symbol = create_document_symbol(
|
@@ -179,7 +158,7 @@ module RubyLsp
|
|
179
158
|
def on_module(node)
|
180
159
|
@stack << create_document_symbol(
|
181
160
|
name: full_constant_name(node.constant),
|
182
|
-
kind:
|
161
|
+
kind: Constant::SymbolKind::MODULE,
|
183
162
|
range_node: node,
|
184
163
|
selection_range_node: node.constant,
|
185
164
|
)
|
@@ -194,7 +173,7 @@ module RubyLsp
|
|
194
173
|
def on_top_const_field(node)
|
195
174
|
create_document_symbol(
|
196
175
|
name: node.constant.value,
|
197
|
-
kind:
|
176
|
+
kind: Constant::SymbolKind::CONSTANT,
|
198
177
|
range_node: node,
|
199
178
|
selection_range_node: node.constant,
|
200
179
|
)
|
@@ -205,9 +184,9 @@ module RubyLsp
|
|
205
184
|
value = node.value
|
206
185
|
kind = case value
|
207
186
|
when SyntaxTree::Const
|
208
|
-
|
187
|
+
Constant::SymbolKind::CONSTANT
|
209
188
|
when SyntaxTree::CVar, SyntaxTree::IVar
|
210
|
-
|
189
|
+
Constant::SymbolKind::VARIABLE
|
211
190
|
else
|
212
191
|
return
|
213
192
|
end
|
@@ -225,7 +204,7 @@ module RubyLsp
|
|
225
204
|
sig do
|
226
205
|
params(
|
227
206
|
name: String,
|
228
|
-
kind:
|
207
|
+
kind: Integer,
|
229
208
|
range_node: SyntaxTree::Node,
|
230
209
|
selection_range_node: SyntaxTree::Node,
|
231
210
|
).returns(Interface::DocumentSymbol)
|
@@ -233,7 +212,7 @@ module RubyLsp
|
|
233
212
|
def create_document_symbol(name:, kind:, range_node:, selection_range_node:)
|
234
213
|
symbol = Interface::DocumentSymbol.new(
|
235
214
|
name: name,
|
236
|
-
kind:
|
215
|
+
kind: kind,
|
237
216
|
range: range_from_syntax_tree_node(range_node),
|
238
217
|
selection_range: range_from_syntax_tree_node(selection_range_node),
|
239
218
|
children: [],
|
@@ -112,11 +112,12 @@ module RubyLsp
|
|
112
112
|
next_line = @lines[@position[:line] + 1]
|
113
113
|
|
114
114
|
if current_line.nil? || current_line.strip.empty?
|
115
|
-
add_edit_with_text("
|
115
|
+
add_edit_with_text("\n")
|
116
|
+
add_edit_with_text("#{indents}end")
|
116
117
|
move_cursor_to(@position[:line], @indentation + 2)
|
117
118
|
elsif next_line.nil? || next_line.strip.empty?
|
118
|
-
add_edit_with_text("#{indents}end", { line: @position[:line] + 1, character: @position[:character] })
|
119
|
-
move_cursor_to(@position[:line], @indentation +
|
119
|
+
add_edit_with_text("#{indents}end\n", { line: @position[:line] + 1, character: @position[:character] })
|
120
|
+
move_cursor_to(@position[:line] - 1, @indentation + @previous_line.size + 1)
|
120
121
|
end
|
121
122
|
end
|
122
123
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lsp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: language_server-protocol
|