ruby-lsp 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,34 +18,38 @@ module RubyLsp
18
18
  class FoldingRanges < BaseRequest
19
19
  extend T::Sig
20
20
 
21
- SIMPLE_FOLDABLES = T.let([
22
- SyntaxTree::ArrayLiteral,
23
- SyntaxTree::BraceBlock,
24
- SyntaxTree::Case,
25
- SyntaxTree::ClassDeclaration,
26
- SyntaxTree::Command,
27
- SyntaxTree::DoBlock,
28
- SyntaxTree::FCall,
29
- SyntaxTree::For,
30
- SyntaxTree::HashLiteral,
31
- SyntaxTree::Heredoc,
32
- SyntaxTree::If,
33
- SyntaxTree::ModuleDeclaration,
34
- SyntaxTree::SClass,
35
- SyntaxTree::Unless,
36
- SyntaxTree::Until,
37
- SyntaxTree::While,
38
- SyntaxTree::Else,
39
- SyntaxTree::Ensure,
40
- SyntaxTree::Begin,
41
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
42
-
43
- NODES_WITH_STATEMENTS = T.let([
44
- SyntaxTree::Elsif,
45
- SyntaxTree::In,
46
- SyntaxTree::Rescue,
47
- SyntaxTree::When,
48
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
21
+ SIMPLE_FOLDABLES = T.let(
22
+ [
23
+ SyntaxTree::ArrayLiteral,
24
+ SyntaxTree::BlockNode,
25
+ SyntaxTree::Case,
26
+ SyntaxTree::ClassDeclaration,
27
+ SyntaxTree::Command,
28
+ SyntaxTree::For,
29
+ SyntaxTree::HashLiteral,
30
+ SyntaxTree::Heredoc,
31
+ SyntaxTree::IfNode,
32
+ SyntaxTree::ModuleDeclaration,
33
+ SyntaxTree::SClass,
34
+ SyntaxTree::UnlessNode,
35
+ SyntaxTree::UntilNode,
36
+ SyntaxTree::WhileNode,
37
+ SyntaxTree::Else,
38
+ SyntaxTree::Ensure,
39
+ SyntaxTree::Begin,
40
+ ].freeze,
41
+ T::Array[T.class_of(SyntaxTree::Node)],
42
+ )
43
+
44
+ NODES_WITH_STATEMENTS = T.let(
45
+ [
46
+ SyntaxTree::Elsif,
47
+ SyntaxTree::In,
48
+ SyntaxTree::Rescue,
49
+ SyntaxTree::When,
50
+ ].freeze,
51
+ T::Array[T.class_of(SyntaxTree::Node)],
52
+ )
49
53
 
50
54
  StatementNode = T.type_alias do
51
55
  T.any(
@@ -86,10 +90,17 @@ module RubyLsp
86
90
  add_lines_range(location.start_line, location.end_line - 1)
87
91
  when *NODES_WITH_STATEMENTS
88
92
  add_statements_range(T.must(node), T.cast(node, StatementNode).statements)
89
- when SyntaxTree::Call, SyntaxTree::CommandCall
90
- add_call_range(node)
91
- return
92
- when SyntaxTree::Def, SyntaxTree::Defs
93
+ when SyntaxTree::CallNode, SyntaxTree::CommandCall
94
+ # If there is a receiver, it may be a chained invocation,
95
+ # so we need to process it in special way.
96
+ if node.receiver.nil?
97
+ location = node.location
98
+ add_lines_range(location.start_line, location.end_line - 1)
99
+ else
100
+ add_call_range(node)
101
+ return
102
+ end
103
+ when SyntaxTree::DefNode
93
104
  add_def_range(node)
94
105
  when SyntaxTree::StringConcat
95
106
  add_string_concat(node)
@@ -192,19 +203,19 @@ module RubyLsp
192
203
  @partial_range = nil
193
204
  end
194
205
 
195
- sig { params(node: T.any(SyntaxTree::Call, SyntaxTree::CommandCall)).void }
206
+ sig { params(node: T.any(SyntaxTree::CallNode, SyntaxTree::CommandCall)).void }
196
207
  def add_call_range(node)
197
208
  receiver = T.let(node.receiver, SyntaxTree::Node)
198
209
  loop do
199
210
  case receiver
200
- when SyntaxTree::Call
211
+ when SyntaxTree::CallNode
201
212
  visit(receiver.arguments)
202
213
  receiver = receiver.receiver
203
214
  when SyntaxTree::MethodAddBlock
204
215
  visit(receiver.block)
205
216
  receiver = receiver.call
206
217
 
207
- if receiver.is_a?(SyntaxTree::Call) || receiver.is_a?(SyntaxTree::CommandCall)
218
+ if receiver.is_a?(SyntaxTree::CallNode) || receiver.is_a?(SyntaxTree::CommandCall)
208
219
  receiver = receiver.receiver
209
220
  end
210
221
  else
@@ -212,13 +223,17 @@ module RubyLsp
212
223
  end
213
224
  end
214
225
 
215
- add_lines_range(receiver.location.start_line, node.location.end_line - 1)
226
+ add_lines_range(receiver.location.start_line, node.location.end_line - 1) if receiver
216
227
 
217
228
  visit(node.arguments)
218
229
  end
219
230
 
220
- sig { params(node: T.any(SyntaxTree::Def, SyntaxTree::Defs)).void }
231
+ sig { params(node: SyntaxTree::DefNode).void }
221
232
  def add_def_range(node)
233
+ # For an endless method with no arguments, `node.params` returns `nil` for Ruby 3.0, but a `Syntax::Params`
234
+ # for Ruby 3.1
235
+ return unless node.params
236
+
222
237
  params_location = node.params.location
223
238
 
224
239
  if params_location.start_line < params_location.end_line
@@ -228,7 +243,12 @@ module RubyLsp
228
243
  add_lines_range(location.start_line, location.end_line - 1)
229
244
  end
230
245
 
231
- visit(node.bodystmt.statements)
246
+ bodystmt = node.bodystmt
247
+ if bodystmt.is_a?(SyntaxTree::BodyStmt)
248
+ visit(bodystmt.statements)
249
+ else
250
+ visit(bodystmt)
251
+ end
232
252
  end
233
253
 
234
254
  sig { params(node: SyntaxTree::Node, statements: SyntaxTree::Statements).void }
@@ -11,6 +11,8 @@ module RubyLsp
11
11
  # request uses RuboCop to fix auto-correctable offenses in the document. This requires enabling format on save and
12
12
  # registering the ruby-lsp as the Ruby formatter.
13
13
  #
14
+ # If RuboCop is not available, the request will fall back to SyntaxTree.
15
+ #
14
16
  # # Example
15
17
  #
16
18
  # ```ruby
@@ -20,6 +20,15 @@ module RubyLsp
20
20
  class Hover < BaseRequest
21
21
  extend T::Sig
22
22
 
23
+ ALLOWED_TARGETS = T.let(
24
+ [
25
+ SyntaxTree::Command,
26
+ SyntaxTree::CallNode,
27
+ SyntaxTree::ConstPathRef,
28
+ ],
29
+ T::Array[T.class_of(SyntaxTree::Node)],
30
+ )
31
+
23
32
  sig { params(document: Document, position: Document::PositionShape).void }
24
33
  def initialize(document, position)
25
34
  super(document)
@@ -31,17 +40,17 @@ module RubyLsp
31
40
  def run
32
41
  return unless @document.parsed?
33
42
 
34
- target, _ = locate_node_and_parent(
35
- T.must(@document.tree), [SyntaxTree::Command, SyntaxTree::FCall, SyntaxTree::ConstPathRef], @position
36
- )
43
+ target, parent = locate(T.must(@document.tree), @position)
44
+ target = parent if !ALLOWED_TARGETS.include?(target.class) && ALLOWED_TARGETS.include?(parent.class)
37
45
 
38
46
  case target
39
47
  when SyntaxTree::Command
40
48
  message = target.message
41
49
  generate_rails_document_link_hover(message.value, message)
42
- when SyntaxTree::FCall
43
- message = target.value
44
- generate_rails_document_link_hover(message.value, message)
50
+ when SyntaxTree::CallNode
51
+ return if target.message == :call
52
+
53
+ generate_rails_document_link_hover(target.message.value, target.message)
45
54
  when SyntaxTree::ConstPathRef
46
55
  constant_name = full_constant_name(target)
47
56
  generate_rails_document_link_hover(constant_name, target)
@@ -18,10 +18,13 @@ module RubyLsp
18
18
  class OnTypeFormatting < BaseRequest
19
19
  extend T::Sig
20
20
 
21
- END_REGEXES = T.let([
22
- /(if|unless|for|while|class|module|until|def|case).*/,
23
- /.*\sdo/,
24
- ], T::Array[Regexp])
21
+ END_REGEXES = T.let(
22
+ [
23
+ /(if|unless|for|while|class|module|until|def|case).*/,
24
+ /.*\sdo/,
25
+ ],
26
+ T::Array[Regexp],
27
+ )
25
28
 
26
29
  sig { params(document: Document, position: Document::PositionShape, trigger_character: String).void }
27
30
  def initialize(document, position, trigger_character)
@@ -41,17 +44,17 @@ module RubyLsp
41
44
 
42
45
  sig { override.returns(T.nilable(T.all(T::Array[Interface::TextEdit], Object))) }
43
46
  def run
44
- handle_comment_line
45
-
46
- return @edits unless @document.syntax_errors?
47
-
48
47
  case @trigger_character
49
48
  when "{"
50
- handle_curly_brace
49
+ handle_curly_brace if @document.syntax_error?
51
50
  when "|"
52
- handle_pipe
51
+ handle_pipe if @document.syntax_error?
53
52
  when "\n"
54
- handle_statement_end
53
+ if (comment_match = @previous_line.match(/^#(\s*)/))
54
+ handle_comment_line(T.must(comment_match[1]))
55
+ elsif @document.syntax_error?
56
+ handle_statement_end
57
+ end
55
58
  end
56
59
 
57
60
  @edits
@@ -85,14 +88,8 @@ module RubyLsp
85
88
  move_cursor_to(@position[:line], @indentation + 2)
86
89
  end
87
90
 
88
- sig { void }
89
- def handle_comment_line
90
- return unless @trigger_character == "\n"
91
-
92
- is_comment_match = @previous_line.match(/^#(\s*)/)
93
- return unless is_comment_match
94
-
95
- spaces = T.must(is_comment_match[1])
91
+ sig { params(spaces: String).void }
92
+ def handle_comment_line(spaces)
96
93
  add_edit_with_text("##{spaces}")
97
94
  move_cursor_to(@position[:line], @indentation + spaces.size + 1)
98
95
  end
@@ -11,6 +11,8 @@ module RubyLsp
11
11
  #
12
12
  # Trigger this request with: Ctrl + Shift + -> or Ctrl + Shift + <-
13
13
  #
14
+ # Note that if using VSCode Neovim, you will need to be in Insert mode for this to work correctly.
15
+ #
14
16
  # # Example
15
17
  #
16
18
  # ```ruby
@@ -21,44 +23,44 @@ module RubyLsp
21
23
  class SelectionRanges < BaseRequest
22
24
  extend T::Sig
23
25
 
24
- NODES_THAT_CAN_BE_PARENTS = T.let([
25
- SyntaxTree::Assign,
26
- SyntaxTree::ArrayLiteral,
27
- SyntaxTree::Begin,
28
- SyntaxTree::BraceBlock,
29
- SyntaxTree::Call,
30
- SyntaxTree::Case,
31
- SyntaxTree::ClassDeclaration,
32
- SyntaxTree::Command,
33
- SyntaxTree::Def,
34
- SyntaxTree::Defs,
35
- SyntaxTree::DoBlock,
36
- SyntaxTree::Elsif,
37
- SyntaxTree::Else,
38
- SyntaxTree::EmbDoc,
39
- SyntaxTree::Ensure,
40
- SyntaxTree::FCall,
41
- SyntaxTree::For,
42
- SyntaxTree::HashLiteral,
43
- SyntaxTree::Heredoc,
44
- SyntaxTree::HeredocBeg,
45
- SyntaxTree::HshPtn,
46
- SyntaxTree::If,
47
- SyntaxTree::In,
48
- SyntaxTree::Lambda,
49
- SyntaxTree::MethodAddBlock,
50
- SyntaxTree::ModuleDeclaration,
51
- SyntaxTree::Params,
52
- SyntaxTree::Rescue,
53
- SyntaxTree::RescueEx,
54
- SyntaxTree::StringConcat,
55
- SyntaxTree::StringLiteral,
56
- SyntaxTree::Unless,
57
- SyntaxTree::Until,
58
- SyntaxTree::VCall,
59
- SyntaxTree::When,
60
- SyntaxTree::While,
61
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
26
+ NODES_THAT_CAN_BE_PARENTS = T.let(
27
+ [
28
+ SyntaxTree::Assign,
29
+ SyntaxTree::ArrayLiteral,
30
+ SyntaxTree::Begin,
31
+ SyntaxTree::BlockNode,
32
+ SyntaxTree::CallNode,
33
+ SyntaxTree::Case,
34
+ SyntaxTree::ClassDeclaration,
35
+ SyntaxTree::Command,
36
+ SyntaxTree::DefNode,
37
+ SyntaxTree::Elsif,
38
+ SyntaxTree::Else,
39
+ SyntaxTree::EmbDoc,
40
+ SyntaxTree::Ensure,
41
+ SyntaxTree::For,
42
+ SyntaxTree::HashLiteral,
43
+ SyntaxTree::Heredoc,
44
+ SyntaxTree::HeredocBeg,
45
+ SyntaxTree::HshPtn,
46
+ SyntaxTree::IfNode,
47
+ SyntaxTree::In,
48
+ SyntaxTree::Lambda,
49
+ SyntaxTree::MethodAddBlock,
50
+ SyntaxTree::ModuleDeclaration,
51
+ SyntaxTree::Params,
52
+ SyntaxTree::Rescue,
53
+ SyntaxTree::RescueEx,
54
+ SyntaxTree::StringConcat,
55
+ SyntaxTree::StringLiteral,
56
+ SyntaxTree::UnlessNode,
57
+ SyntaxTree::UntilNode,
58
+ SyntaxTree::VCall,
59
+ SyntaxTree::When,
60
+ SyntaxTree::WhileNode,
61
+ ].freeze,
62
+ T::Array[T.class_of(SyntaxTree::Node)],
63
+ )
62
64
 
63
65
  sig { params(document: Document).void }
64
66
  def initialize(document)
@@ -22,52 +22,61 @@ module RubyLsp
22
22
  extend T::Sig
23
23
  include SyntaxTree::WithEnvironment
24
24
 
25
- TOKEN_TYPES = T.let({
26
- namespace: 0,
27
- type: 1,
28
- class: 2,
29
- enum: 3,
30
- interface: 4,
31
- struct: 5,
32
- typeParameter: 6,
33
- parameter: 7,
34
- variable: 8,
35
- property: 9,
36
- enumMember: 10,
37
- event: 11,
38
- function: 12,
39
- method: 13,
40
- macro: 14,
41
- keyword: 15,
42
- modifier: 16,
43
- comment: 17,
44
- string: 18,
45
- number: 19,
46
- regexp: 20,
47
- operator: 21,
48
- decorator: 22,
49
- }.freeze, T::Hash[Symbol, Integer])
50
-
51
- TOKEN_MODIFIERS = T.let({
52
- declaration: 0,
53
- definition: 1,
54
- readonly: 2,
55
- static: 3,
56
- deprecated: 4,
57
- abstract: 5,
58
- async: 6,
59
- modification: 7,
60
- documentation: 8,
61
- default_library: 9,
62
- }.freeze, T::Hash[Symbol, Integer])
63
-
64
- SPECIAL_RUBY_METHODS = T.let([
65
- Module.instance_methods(false),
66
- Kernel.instance_methods(false),
67
- Kernel.methods(false),
68
- Bundler::Dsl.instance_methods(false),
69
- Module.private_instance_methods(false),
70
- ].flatten.map(&:to_s), T::Array[String])
25
+ TOKEN_TYPES = T.let(
26
+ {
27
+ namespace: 0,
28
+ type: 1,
29
+ class: 2,
30
+ enum: 3,
31
+ interface: 4,
32
+ struct: 5,
33
+ typeParameter: 6,
34
+ parameter: 7,
35
+ variable: 8,
36
+ property: 9,
37
+ enumMember: 10,
38
+ event: 11,
39
+ function: 12,
40
+ method: 13,
41
+ macro: 14,
42
+ keyword: 15,
43
+ modifier: 16,
44
+ comment: 17,
45
+ string: 18,
46
+ number: 19,
47
+ regexp: 20,
48
+ operator: 21,
49
+ decorator: 22,
50
+ }.freeze,
51
+ T::Hash[Symbol, Integer],
52
+ )
53
+
54
+ TOKEN_MODIFIERS = T.let(
55
+ {
56
+ declaration: 0,
57
+ definition: 1,
58
+ readonly: 2,
59
+ static: 3,
60
+ deprecated: 4,
61
+ abstract: 5,
62
+ async: 6,
63
+ modification: 7,
64
+ documentation: 8,
65
+ default_library: 9,
66
+ }.freeze,
67
+ T::Hash[Symbol, Integer],
68
+ )
69
+
70
+ SPECIAL_RUBY_METHODS = T.let(
71
+ [
72
+ Module.instance_methods(false),
73
+ Kernel.instance_methods(false),
74
+ Kernel.methods(false),
75
+ Bundler::Dsl.instance_methods(false),
76
+ Module.private_instance_methods(false),
77
+ ].flatten.map(&:to_s),
78
+ T::Array[String],
79
+ )
71
80
 
72
81
  class SemanticToken < T::Struct
73
82
  const :location, SyntaxTree::Location
@@ -110,14 +119,16 @@ module RubyLsp
110
119
  @encoder.encode(@tokens)
111
120
  end
112
121
 
113
- sig { override.params(node: SyntaxTree::Call).void }
122
+ sig { override.params(node: SyntaxTree::CallNode).void }
114
123
  def visit_call(node)
115
124
  return super unless visible?(node, @range)
116
125
 
117
126
  visit(node.receiver)
118
127
 
119
128
  message = node.message
120
- add_token(message.location, :method) if message != :call
129
+ unless message == :call || special_method?(message.value)
130
+ add_token(message.location, :method)
131
+ end
121
132
 
122
133
  visit(node.arguments)
123
134
  end
@@ -146,42 +157,15 @@ module RubyLsp
146
157
  add_token(node.location, :namespace)
147
158
  end
148
159
 
149
- sig { override.params(node: SyntaxTree::Def).void }
160
+ sig { override.params(node: SyntaxTree::DefNode).void }
150
161
  def visit_def(node)
151
162
  return super unless visible?(node, @range)
152
163
 
153
164
  add_token(node.name.location, :method, [:declaration])
154
165
  visit(node.params)
155
166
  visit(node.bodystmt)
156
- end
157
-
158
- sig { override.params(node: SyntaxTree::DefEndless).void }
159
- def visit_def_endless(node)
160
- return super unless visible?(node, @range)
161
-
162
- add_token(node.name.location, :method, [:declaration])
163
- visit(node.paren)
164
- visit(node.operator)
165
- visit(node.statement)
166
- end
167
-
168
- sig { override.params(node: SyntaxTree::Defs).void }
169
- def visit_defs(node)
170
- return super unless visible?(node, @range)
171
-
172
- visit(node.target)
173
- visit(node.operator)
174
- add_token(node.name.location, :method, [:declaration])
175
- visit(node.params)
176
- visit(node.bodystmt)
177
- end
178
-
179
- sig { override.params(node: SyntaxTree::FCall).void }
180
- def visit_fcall(node)
181
- return super unless visible?(node, @range)
182
-
183
- add_token(node.value.location, :method) unless special_method?(node.value.value)
184
- visit(node.arguments)
167
+ visit(node.target) if node.target
168
+ visit(node.operator) if node.operator
185
169
  end
186
170
 
187
171
  sig { override.params(node: SyntaxTree::Kw).void }
@@ -34,12 +34,12 @@ module RubyLsp
34
34
  def matched_highlight(other)
35
35
  case @node
36
36
  # Method definitions and invocations
37
- when SyntaxTree::VCall, SyntaxTree::FCall, SyntaxTree::Call, SyntaxTree::Command,
38
- SyntaxTree::CommandCall, SyntaxTree::Def, SyntaxTree::Defs, SyntaxTree::DefEndless
37
+ when SyntaxTree::VCall, SyntaxTree::CallNode, SyntaxTree::Command,
38
+ SyntaxTree::CommandCall, SyntaxTree::DefNode
39
39
  case other
40
- when SyntaxTree::VCall, SyntaxTree::FCall, SyntaxTree::Call, SyntaxTree::Command, SyntaxTree::CommandCall
40
+ when SyntaxTree::VCall, SyntaxTree::CallNode, SyntaxTree::Command, SyntaxTree::CommandCall
41
41
  HighlightMatch.new(type: READ, node: other)
42
- when SyntaxTree::Def, SyntaxTree::Defs, SyntaxTree::Defs
42
+ when SyntaxTree::DefNode
43
43
  HighlightMatch.new(type: WRITE, node: other.name)
44
44
  end
45
45
  # Variables, parameters and constants
@@ -67,15 +67,14 @@ module RubyLsp
67
67
  case node
68
68
  when SyntaxTree::ConstPathRef, SyntaxTree::ConstPathField, SyntaxTree::TopConstField
69
69
  node.constant.value
70
- when SyntaxTree::GVar, SyntaxTree::IVar, SyntaxTree::Const, SyntaxTree::CVar, SyntaxTree::Ident,
71
- SyntaxTree::ArgsForward
70
+ when SyntaxTree::GVar, SyntaxTree::IVar, SyntaxTree::Const, SyntaxTree::CVar, SyntaxTree::Ident
72
71
  node.value
73
- when SyntaxTree::Field, SyntaxTree::Def, SyntaxTree::Defs, SyntaxTree::DefEndless, SyntaxTree::RestParam,
72
+ when SyntaxTree::Field, SyntaxTree::DefNode, SyntaxTree::RestParam,
74
73
  SyntaxTree::KwRestParam, SyntaxTree::BlockArg
75
74
  node.name&.value
76
- when SyntaxTree::VarField, SyntaxTree::VarRef, SyntaxTree::VCall, SyntaxTree::FCall
75
+ when SyntaxTree::VarField, SyntaxTree::VarRef, SyntaxTree::VCall
77
76
  node.value&.value
78
- when SyntaxTree::Call, SyntaxTree::Command, SyntaxTree::CommandCall
77
+ when SyntaxTree::CallNode, SyntaxTree::Command, SyntaxTree::CommandCall
79
78
  message = node.message
80
79
  message != :call ? message.value : nil
81
80
  when SyntaxTree::ClassDeclaration, SyntaxTree::ModuleDeclaration
@@ -10,8 +10,14 @@ module RubyLsp
10
10
  RAILS_DOC_HOST = "https://api.rubyonrails.org"
11
11
  SUPPORTED_RAILS_DOC_NAMESPACES = T.let(
12
12
  Regexp.union(
13
- /ActionDispatch/, /ActionController/, /AbstractController/, /ActiveRecord/, /ActiveModel/, /ActiveStorage/,
14
- /ActionText/, /ActiveJob/
13
+ /ActionDispatch/,
14
+ /ActionController/,
15
+ /AbstractController/,
16
+ /ActiveRecord/,
17
+ /ActiveModel/,
18
+ /ActiveStorage/,
19
+ /ActionText/,
20
+ /ActiveJob/,
15
21
  ).freeze,
16
22
  Regexp,
17
23
  )
@@ -19,7 +25,8 @@ module RubyLsp
19
25
  RAILTIES_VERSION = T.let(
20
26
  [*::Gem::Specification.default_stubs, *::Gem::Specification.stubs].find do |s|
21
27
  s.name == "railties"
22
- end&.version&.to_s, T.nilable(String)
28
+ end&.version&.to_s,
29
+ T.nilable(String),
23
30
  )
24
31
 
25
32
  class << self
@@ -59,7 +66,7 @@ module RubyLsp
59
66
  private def build_search_index
60
67
  return unless RAILTIES_VERSION
61
68
 
62
- $stderr.puts "Fetching Rails Documents..."
69
+ warn("Fetching Rails Documents...")
63
70
  # If the version's doc is not found, e.g. Rails main, it'll be redirected
64
71
  # In this case, we just fetch the latest doc
65
72
  response = if Gem::Version.new(RAILTIES_VERSION).prerelease?
@@ -71,11 +78,11 @@ module RubyLsp
71
78
  if response.code == "200"
72
79
  process_search_index(response.body)
73
80
  else
74
- $stderr.puts("Response failed: #{response.inspect}")
81
+ warn("Response failed: #{response.inspect}")
75
82
  nil
76
83
  end
77
84
  rescue StandardError => e
78
- $stderr.puts("Exception occurred when fetching Rails document index: #{e.inspect}")
85
+ warn("Exception occurred when fetching Rails document index: #{e.inspect}")
79
86
  end
80
87
 
81
88
  sig { params(js: String).returns(T::Hash[String, T::Array[T::Hash[Symbol, String]]]) }
@@ -7,14 +7,17 @@ module RubyLsp
7
7
  class RuboCopDiagnostic
8
8
  extend T::Sig
9
9
 
10
- RUBOCOP_TO_LSP_SEVERITY = T.let({
11
- convention: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
12
- info: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
13
- refactor: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
14
- warning: LanguageServer::Protocol::Constant::DiagnosticSeverity::WARNING,
15
- error: LanguageServer::Protocol::Constant::DiagnosticSeverity::ERROR,
16
- fatal: LanguageServer::Protocol::Constant::DiagnosticSeverity::ERROR,
17
- }.freeze, T::Hash[Symbol, Integer])
10
+ RUBOCOP_TO_LSP_SEVERITY = T.let(
11
+ {
12
+ convention: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
13
+ info: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
14
+ refactor: LanguageServer::Protocol::Constant::DiagnosticSeverity::INFORMATION,
15
+ warning: LanguageServer::Protocol::Constant::DiagnosticSeverity::WARNING,
16
+ error: LanguageServer::Protocol::Constant::DiagnosticSeverity::ERROR,
17
+ fatal: LanguageServer::Protocol::Constant::DiagnosticSeverity::ERROR,
18
+ }.freeze,
19
+ T::Hash[Symbol, Integer],
20
+ )
18
21
 
19
22
  sig { returns(T::Array[LanguageServer::Protocol::Interface::TextEdit]) }
20
23
  attr_reader :replacements
@@ -94,8 +97,10 @@ module RubyLsp
94
97
  LanguageServer::Protocol::Interface::TextEdit.new(
95
98
  range: LanguageServer::Protocol::Interface::Range.new(
96
99
  start: LanguageServer::Protocol::Interface::Position.new(line: range.line - 1, character: range.column),
97
- end: LanguageServer::Protocol::Interface::Position.new(line: range.last_line - 1,
98
- character: range.last_column),
100
+ end: LanguageServer::Protocol::Interface::Position.new(
101
+ line: range.last_line - 1,
102
+ character: range.last_column,
103
+ ),
99
104
  ),
100
105
  new_text: replacement,
101
106
  )
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "ruby_lsp/requests/support/rubocop_runner"
5
- return unless defined?(::RubyLsp::Requests::Support::RuboCopRunner)
5
+ return unless defined?(RubyLsp::Requests::Support::RuboCopRunner)
6
6
 
7
7
  require "cgi"
8
8
  require "singleton"
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "ruby_lsp/requests/support/rubocop_runner"
5
- return unless defined?(::RubyLsp::Requests::Support::RuboCopRunner)
5
+ return unless defined?(RubyLsp::Requests::Support::RuboCopRunner)
6
6
 
7
7
  require "cgi"
8
8
  require "singleton"