solargraph 0.32.5 → 0.33.0

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.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +2 -11
  4. data/lib/solargraph.rb +1 -2
  5. data/lib/solargraph/api_map.rb +93 -63
  6. data/lib/solargraph/api_map/cache.rb +16 -1
  7. data/lib/solargraph/api_map/source_to_yard.rb +16 -7
  8. data/lib/solargraph/api_map/store.rb +55 -12
  9. data/lib/solargraph/complex_type.rb +58 -14
  10. data/lib/solargraph/complex_type/type_methods.rb +2 -2
  11. data/lib/solargraph/complex_type/unique_type.rb +33 -4
  12. data/lib/solargraph/core_fills.rb +40 -12
  13. data/lib/solargraph/diagnostics.rb +4 -3
  14. data/lib/solargraph/diagnostics/base.rb +6 -0
  15. data/lib/solargraph/diagnostics/require_not_found.rb +17 -10
  16. data/lib/solargraph/diagnostics/rubocop_helpers.rb +2 -0
  17. data/lib/solargraph/diagnostics/type_check.rb +51 -0
  18. data/lib/solargraph/diagnostics/update_errors.rb +1 -0
  19. data/lib/solargraph/language_server/host.rb +55 -25
  20. data/lib/solargraph/language_server/host/diagnoser.rb +1 -2
  21. data/lib/solargraph/language_server/host/dispatch.rb +4 -8
  22. data/lib/solargraph/language_server/host/sources.rb +1 -1
  23. data/lib/solargraph/language_server/message.rb +1 -0
  24. data/lib/solargraph/language_server/message/completion_item/resolve.rb +4 -2
  25. data/lib/solargraph/language_server/message/initialize.rb +9 -0
  26. data/lib/solargraph/language_server/message/initialized.rb +1 -0
  27. data/lib/solargraph/language_server/message/text_document.rb +1 -0
  28. data/lib/solargraph/language_server/message/text_document/code_action.rb +15 -0
  29. data/lib/solargraph/language_server/message/text_document/completion.rb +1 -1
  30. data/lib/solargraph/language_server/message/text_document/definition.rb +25 -5
  31. data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
  32. data/lib/solargraph/language_server/message/text_document/signature_help.rb +4 -0
  33. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +8 -4
  34. data/lib/solargraph/language_server/transport/adapter.rb +12 -15
  35. data/lib/solargraph/library.rb +23 -6
  36. data/lib/solargraph/location.rb +4 -0
  37. data/lib/solargraph/pin.rb +7 -3
  38. data/lib/solargraph/pin/attribute.rb +14 -13
  39. data/lib/solargraph/pin/base.rb +56 -43
  40. data/lib/solargraph/pin/base_method.rb +41 -18
  41. data/lib/solargraph/pin/base_variable.rb +17 -15
  42. data/lib/solargraph/pin/block.rb +22 -4
  43. data/lib/solargraph/pin/closure.rb +28 -0
  44. data/lib/solargraph/pin/common.rb +59 -0
  45. data/lib/solargraph/pin/constant.rb +4 -4
  46. data/lib/solargraph/pin/conversions.rb +8 -8
  47. data/lib/solargraph/pin/duck_method.rb +3 -3
  48. data/lib/solargraph/pin/instance_variable.rb +30 -0
  49. data/lib/solargraph/pin/keyword.rb +1 -1
  50. data/lib/solargraph/pin/local_variable.rb +3 -3
  51. data/lib/solargraph/pin/localized.rb +9 -5
  52. data/lib/solargraph/pin/method.rb +26 -40
  53. data/lib/solargraph/pin/method_alias.rb +9 -6
  54. data/lib/solargraph/pin/namespace.rb +33 -10
  55. data/lib/solargraph/pin/parameter.rb +150 -0
  56. data/lib/solargraph/pin/proxy_type.rb +8 -8
  57. data/lib/solargraph/pin/reference.rb +1 -12
  58. data/lib/solargraph/pin/reference/override.rb +18 -0
  59. data/lib/solargraph/pin/reference/require.rb +2 -1
  60. data/lib/solargraph/pin/singleton.rb +9 -0
  61. data/lib/solargraph/pin/symbol.rb +9 -4
  62. data/lib/solargraph/pin/yard_pin/constant.rb +12 -3
  63. data/lib/solargraph/pin/yard_pin/method.rb +18 -6
  64. data/lib/solargraph/pin/yard_pin/namespace.rb +13 -1
  65. data/lib/solargraph/position.rb +1 -1
  66. data/lib/solargraph/range.rb +4 -0
  67. data/lib/solargraph/shell.rb +83 -4
  68. data/lib/solargraph/source.rb +32 -12
  69. data/lib/solargraph/source/chain.rb +48 -28
  70. data/lib/solargraph/source/chain/call.rb +37 -38
  71. data/lib/solargraph/source/chain/constant.rb +1 -1
  72. data/lib/solargraph/source/chain/head.rb +2 -8
  73. data/lib/solargraph/source/chain/instance_variable.rb +1 -1
  74. data/lib/solargraph/source/chain/link.rb +2 -0
  75. data/lib/solargraph/source/cursor.rb +59 -24
  76. data/lib/solargraph/source/node_chainer.rb +0 -2
  77. data/lib/solargraph/source/node_methods.rb +12 -6
  78. data/lib/solargraph/source/source_chainer.rb +38 -44
  79. data/lib/solargraph/source_map.rb +11 -18
  80. data/lib/solargraph/source_map/clip.rb +13 -15
  81. data/lib/solargraph/source_map/mapper.rb +37 -26
  82. data/lib/solargraph/source_map/node_processor.rb +13 -8
  83. data/lib/solargraph/source_map/node_processor/alias_node.rb +8 -8
  84. data/lib/solargraph/source_map/node_processor/args_node.rb +10 -16
  85. data/lib/solargraph/source_map/node_processor/base.rb +47 -4
  86. data/lib/solargraph/source_map/node_processor/block_node.rb +9 -4
  87. data/lib/solargraph/source_map/node_processor/casgn_node.rb +7 -2
  88. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +8 -3
  89. data/lib/solargraph/source_map/node_processor/def_node.rb +45 -38
  90. data/lib/solargraph/source_map/node_processor/defs_node.rb +16 -6
  91. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +8 -1
  92. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +20 -6
  93. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +10 -4
  94. data/lib/solargraph/source_map/node_processor/namespace_node.rb +18 -12
  95. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +1 -1
  96. data/lib/solargraph/source_map/node_processor/resbody_node.rb +30 -0
  97. data/lib/solargraph/source_map/node_processor/sclass_node.rb +7 -1
  98. data/lib/solargraph/source_map/node_processor/send_node.rb +102 -52
  99. data/lib/solargraph/source_map/node_processor/sym_node.rb +4 -1
  100. data/lib/solargraph/source_map/region.rb +9 -8
  101. data/lib/solargraph/type_checker.rb +282 -0
  102. data/lib/solargraph/type_checker/param_def.rb +47 -0
  103. data/lib/solargraph/type_checker/problem.rb +25 -0
  104. data/lib/solargraph/version.rb +1 -1
  105. data/lib/solargraph/views/environment.erb +1 -1
  106. data/lib/solargraph/workspace.rb +2 -2
  107. data/lib/solargraph/workspace/config.rb +0 -8
  108. data/lib/solargraph/yard_map.rb +25 -69
  109. data/lib/solargraph/yard_map/core_docs.rb +8 -3
  110. data/lib/solargraph/yard_map/core_gen.rb +1 -3
  111. data/lib/solargraph/yard_map/mapper.rb +85 -0
  112. data/lib/yard-solargraph.rb +2 -0
  113. metadata +14 -14
  114. data/lib/solargraph/diagnostics/type_not_defined.rb +0 -108
  115. data/lib/solargraph/live_map.rb +0 -126
  116. data/lib/solargraph/live_map/cache.rb +0 -38
  117. data/lib/solargraph/pin/block_parameter.rb +0 -103
  118. data/lib/solargraph/pin/method_parameter.rb +0 -40
  119. data/lib/solargraph/pin/plugin/method.rb +0 -25
  120. data/lib/solargraph/plugin.rb +0 -8
  121. data/lib/solargraph/plugin/base.rb +0 -41
  122. data/lib/solargraph/plugin/canceler.rb +0 -11
  123. data/lib/solargraph/plugin/process.rb +0 -172
  124. data/lib/solargraph/plugin/runtime.rb +0 -134
  125. data/lib/yard-coregen.rb +0 -16
@@ -9,20 +9,27 @@ module Solargraph
9
9
  result = []
10
10
  refs = {}
11
11
  map = api_map.source_map(source.filename)
12
- map.requires.each do |ref|
13
- refs[ref.name] = ref
14
- end
12
+ map.requires.each { |ref| refs[ref.name] = ref }
15
13
  api_map.unresolved_requires.each do |r|
16
- next unless refs.has_key?(r)
17
- result.push(
18
- range: refs[r].location.range.to_hash,
19
- severity: Diagnostics::Severities::WARNING,
20
- source: 'Solargraph',
21
- message: "Required path #{r} could not be resolved."
22
- )
14
+ next unless refs.key?(r)
15
+ result.push require_error(r, refs[r].location)
23
16
  end
24
17
  result
25
18
  end
19
+
20
+ private
21
+
22
+ # @param path [String]
23
+ # @param location [Location]
24
+ # @return [Hash]
25
+ def require_error path, location
26
+ {
27
+ range: location.range.to_hash,
28
+ severity: Diagnostics::Severities::WARNING,
29
+ source: 'RequireNotFound',
30
+ message: "Required path #{path} could not be resolved."
31
+ }
32
+ end
26
33
  end
27
34
  end
28
35
  end
@@ -1,5 +1,7 @@
1
1
  module Solargraph
2
2
  module Diagnostics
3
+ # Utility methods for the RuboCop diagnostics reporter.
4
+ #
3
5
  module RubocopHelpers
4
6
  module_function
5
7
 
@@ -0,0 +1,51 @@
1
+ module Solargraph
2
+ module Diagnostics
3
+ # TypeCheck reports methods with undefined return types, untagged
4
+ # parameters, and invalid param tags.
5
+ #
6
+ class TypeCheck < Base
7
+ def diagnose source, api_map
8
+ severity = (args.include?('strict') ? Diagnostics::Severities::ERROR : Diagnostics::Severities::WARNING)
9
+ checker = Solargraph::TypeChecker.new(source.filename, api_map: api_map)
10
+ result = checker.return_type_problems + checker.param_type_problems
11
+ result.concat checker.strict_type_problems if args.include?('strict')
12
+ result.sort! { |a, b| a.location.range.start.line <=> b.location.range.start.line }
13
+ result.map do |problem|
14
+ {
15
+ range: extract_first_line(problem.location, source),
16
+ severity: severity,
17
+ source: 'Typecheck',
18
+ message: problem.message
19
+ }
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ # @param location [Location]
26
+ # @param source [Source]
27
+ # @return [Hash]
28
+ def extract_first_line location, source
29
+ return location.range.to_hash if location.range.start.line == location.range.ending.line
30
+ {
31
+ start: {
32
+ line: location.range.start.line,
33
+ character: location.range.start.character
34
+ },
35
+ end: {
36
+ line: location.range.start.line,
37
+ character: last_character(location.range.start, source)
38
+ }
39
+ }
40
+ end
41
+
42
+ # @param position [Solargraph::Position]
43
+ # @param source [Solargraph::Source]
44
+ # @return [Integer]
45
+ def last_character position, source
46
+ cursor = Position.to_offset(source.code, position)
47
+ source.code.index(/[\r\n]/, cursor) || source.code.length
48
+ end
49
+ end
50
+ end
51
+ end
@@ -18,6 +18,7 @@ module Solargraph
18
18
 
19
19
  # Combine an array of ranges by their starting lines.
20
20
  #
21
+ # @param code [String]
21
22
  # @param ranges [Array<Range>]
22
23
  # @return [Array<Range>]
23
24
  def combine_ranges code, ranges
@@ -1,4 +1,4 @@
1
- require 'thread'
1
+ require 'observer'
2
2
  require 'set'
3
3
 
4
4
  module Solargraph
@@ -16,6 +16,7 @@ module Solargraph
16
16
  include UriHelpers
17
17
  include Logging
18
18
  include Dispatch
19
+ include Observable
19
20
 
20
21
  def initialize
21
22
  @cancel_semaphore = Mutex.new
@@ -43,6 +44,7 @@ module Solargraph
43
44
  # Update the configuration options with the provided hash.
44
45
  #
45
46
  # @param update [Hash]
47
+ # @return [void]
46
48
  def configure update
47
49
  return if update.nil?
48
50
  options.merge! update
@@ -57,6 +59,7 @@ module Solargraph
57
59
  # Cancel the method with the specified ID.
58
60
  #
59
61
  # @param id [Integer]
62
+ # @return [void]
60
63
  def cancel id
61
64
  @cancel_semaphore.synchronize { @cancel.push id }
62
65
  end
@@ -94,7 +97,7 @@ module Solargraph
94
97
  message.process
95
98
  rescue Exception => e
96
99
  logger.warn "Error processing request: [#{e.class}] #{e.message}"
97
- logger.warn e.backtrace
100
+ logger.warn e.backtrace.join("\n")
98
101
  message.set_error Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, "[#{e.class}] #{e.message}"
99
102
  end
100
103
  message
@@ -129,7 +132,6 @@ module Solargraph
129
132
  # @param uri [String] The file uri.
130
133
  # @return [void]
131
134
  def delete uri
132
- # sources.close uri # @todo It's possible for a deleted file to be open in an editor
133
135
  filename = uri_to_file(uri)
134
136
  libraries.each do |lib|
135
137
  lib.delete(filename)
@@ -154,6 +156,8 @@ module Solargraph
154
156
  diagnoser.schedule uri
155
157
  end
156
158
 
159
+ # @param uri [String]
160
+ # @return [void]
157
161
  def open_from_disk uri
158
162
  library = library_for(uri)
159
163
  library.open_from_disk uri_to_file(uri)
@@ -182,22 +186,26 @@ module Solargraph
182
186
  # @return [void]
183
187
  def diagnose uri
184
188
  if sources.include?(uri)
185
- logger.info "Diagnosing #{uri}"
186
189
  library = library_for(uri)
187
- library.catalog
188
- begin
189
- results = library.diagnose uri_to_file(uri)
190
- send_notification "textDocument/publishDiagnostics", {
191
- uri: uri,
192
- diagnostics: results
193
- }
194
- rescue DiagnosticsError => e
195
- logger.warn "Error in diagnostics: #{e.message}"
196
- options['diagnostics'] = false
197
- send_notification 'window/showMessage', {
198
- type: LanguageServer::MessageTypes::ERROR,
199
- message: "Error in diagnostics: #{e.message}"
200
- }
190
+ if library.synchronized?
191
+ logger.info "Diagnosing #{uri}"
192
+ begin
193
+ results = library.diagnose uri_to_file(uri)
194
+ send_notification "textDocument/publishDiagnostics", {
195
+ uri: uri,
196
+ diagnostics: results
197
+ }
198
+ rescue DiagnosticsError => e
199
+ logger.warn "Error in diagnostics: #{e.message}"
200
+ options['diagnostics'] = false
201
+ send_notification 'window/showMessage', {
202
+ type: LanguageServer::MessageTypes::ERROR,
203
+ message: "Error in diagnostics: #{e.message}"
204
+ }
205
+ end
206
+ else
207
+ logger.info "Deferring diagnosis of #{uri}"
208
+ diagnoser.schedule uri
201
209
  end
202
210
  else
203
211
  send_notification 'textDocument/publishDiagnostics', {
@@ -215,15 +223,17 @@ module Solargraph
215
223
  def change params
216
224
  updater = generate_updater(params)
217
225
  sources.async_update params['textDocument']['uri'], updater
226
+ diagnoser.schedule params['textDocument']['uri']
218
227
  end
219
228
 
220
229
  # Queue a message to be sent to the client.
221
230
  #
222
231
  # @param message [String] The message to send.
232
+ # @return [void]
223
233
  def queue message
224
- @buffer_semaphore.synchronize do
225
- @buffer += message
226
- end
234
+ @buffer_semaphore.synchronize { @buffer += message }
235
+ changed
236
+ notify_observers
227
237
  end
228
238
 
229
239
  # Clear the message buffer and return the most recent data.
@@ -285,12 +295,15 @@ module Solargraph
285
295
  end
286
296
  end
287
297
 
298
+ # @param array [Array<Hash>]
299
+ # @return [void]
288
300
  def remove_folders array
289
301
  array.each do |folder|
290
302
  remove uri_to_file(folder['uri'])
291
303
  end
292
304
  end
293
305
 
306
+ # @return [Array<String>]
294
307
  def folders
295
308
  libraries.map { |lib| lib.workspace.directory }
296
309
  end
@@ -299,6 +312,7 @@ module Solargraph
299
312
  #
300
313
  # @param method [String] The message method
301
314
  # @param params [Hash] The method parameters
315
+ # @return [void]
302
316
  def send_notification method, params
303
317
  response = {
304
318
  jsonrpc: "2.0",
@@ -318,8 +332,9 @@ module Solargraph
318
332
  #
319
333
  # @param method [String] The message method
320
334
  # @param params [Hash] The method parameters
321
- # @param id [String] An optional ID
335
+ # @param block [Proc] The block that processes the response
322
336
  # @yieldparam [Hash] The result sent by the client
337
+ # @return [void]
323
338
  def send_request method, params, &block
324
339
  message = {
325
340
  jsonrpc: "2.0",
@@ -416,6 +431,8 @@ module Solargraph
416
431
  cataloger.stop
417
432
  diagnoser.stop
418
433
  sources.stop
434
+ changed
435
+ notify_observers
419
436
  end
420
437
 
421
438
  def stopped?
@@ -461,7 +478,7 @@ module Solargraph
461
478
  # @param uri [String]
462
479
  # @param line [Integer]
463
480
  # @param column [Integer]
464
- # @return [Solargraph::ApiMap::Completion]
481
+ # @return [Solargraph::SourceMap::Completion]
465
482
  def completions_at uri, line, column
466
483
  library = library_for(uri)
467
484
  library.completions_at uri_to_file(uri), line, column
@@ -546,7 +563,7 @@ module Solargraph
546
563
  # @param text [String]
547
564
  # @param type [Integer] A MessageType constant
548
565
  # @param actions [Array<String>] Response options for the client
549
- # @param &block The block that processes the response
566
+ # @param block The block that processes the response
550
567
  # @yieldparam [String] The action received from the client
551
568
  # @return [void]
552
569
  def show_message_request text, type, actions, &block
@@ -588,6 +605,7 @@ module Solargraph
588
605
  sources.find(uri).folding_ranges
589
606
  end
590
607
 
608
+ # @return [void]
591
609
  def catalog
592
610
  libraries.each(&:catalog)
593
611
  end
@@ -604,15 +622,23 @@ module Solargraph
604
622
  @cataloger ||= Cataloger.new(self)
605
623
  end
606
624
 
625
+ # A hash of client requests by ID. The host uses this to keep track of
626
+ # pending responses.
627
+ #
628
+ # @return [Hash{Integer => Hash}]
607
629
  def requests
608
630
  @requests ||= {}
609
631
  end
610
632
 
633
+ # @param path [String]
634
+ # @return [String]
611
635
  def normalize_separators path
612
636
  return path if File::ALT_SEPARATOR.nil?
613
637
  path.gsub(File::ALT_SEPARATOR, File::SEPARATOR)
614
638
  end
615
639
 
640
+ # @param params [Hash]
641
+ # @return [Source::Updater]
616
642
  def generate_updater params
617
643
  changes = []
618
644
  params['contentChanges'].each do |chng|
@@ -631,6 +657,7 @@ module Solargraph
631
657
  )
632
658
  end
633
659
 
660
+ # @return [Hash]
634
661
  def dynamic_capability_options
635
662
  @dynamic_capability_options ||= {
636
663
  # textDocumentSync: 2, # @todo What should this be?
@@ -641,7 +668,7 @@ module Solargraph
641
668
  # hoverProvider: true,
642
669
  # definitionProvider: true,
643
670
  'textDocument/signatureHelp' => {
644
- triggerCharacters: ['(', ',']
671
+ triggerCharacters: ['(', ',', ' ']
645
672
  },
646
673
  # documentFormattingProvider: true,
647
674
  'textDocument/onTypeFormatting' => {
@@ -676,6 +703,9 @@ module Solargraph
676
703
  },
677
704
  'textDocument/foldingRange' => {
678
705
  foldingRangeProvider: true
706
+ },
707
+ 'textDocument/codeAction' => {
708
+ codeActionProvider: true
679
709
  }
680
710
  }
681
711
  end
@@ -58,8 +58,7 @@ module Solargraph
58
58
  mutex.synchronize { queue.clear }
59
59
  return
60
60
  end
61
- current = nil
62
- mutex.synchronize { current = queue.shift }
61
+ current = mutex.synchronize { queue.shift }
63
62
  return if queue.include?(current)
64
63
  host.diagnose current
65
64
  end
@@ -25,13 +25,10 @@ module Solargraph
25
25
  # @return [void]
26
26
  def update_libraries uri
27
27
  src = sources.find(uri)
28
- # @todo This module should not call cataloger and diagnoser
29
28
  libraries.each do |lib|
30
- if lib.contain?(src.filename) || lib.open?(src.filename)
31
- lib.merge src
32
- end
29
+ lib.merge src if lib.contain?(src.filename)
33
30
  end
34
- diagnoser.schedule uri if src.synchronized?
31
+ diagnoser.schedule uri
35
32
  end
36
33
 
37
34
  # Find the best libary match for the given URI.
@@ -79,11 +76,9 @@ module Solargraph
79
76
  def implicit_library_for uri
80
77
  filename = UriHelpers.uri_to_file(uri)
81
78
  libraries.each do |lib|
82
- # @todo We probably shouldn't depend on attachments to select
83
- # a library.
84
- # return lib if lib.open?(filename)
85
79
  if filename.start_with?(lib.workspace.directory)
86
80
  lib.attach sources.find(uri)
81
+ lib.catalog
87
82
  return lib
88
83
  end
89
84
  end
@@ -99,6 +94,7 @@ module Solargraph
99
94
  # @return [Library]
100
95
  def generic_library_for uri
101
96
  generic_library.attach sources.find(uri)
97
+ generic_library.catalog
102
98
  generic_library
103
99
  end
104
100
 
@@ -75,7 +75,7 @@ module Solargraph
75
75
 
76
76
  # @param uri [String]
77
77
  # @param updater [Source::Updater]
78
- # @return [Thread]
78
+ # @return [void]
79
79
  def async_update uri, updater
80
80
  src = find(uri)
81
81
  mutex.synchronize { open_source_hash[uri] = src.start_synchronize(updater) }
@@ -72,6 +72,7 @@ module Solargraph
72
72
  register 'textDocument/rename', TextDocument::Rename
73
73
  register 'textDocument/prepareRename', TextDocument::PrepareRename
74
74
  register 'textDocument/foldingRange', TextDocument::FoldingRange
75
+ register 'textDocument/codeAction', TextDocument::CodeAction
75
76
  register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
76
77
  register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
77
78
  register 'workspace/didChangeWorkspaceFolders', Workspace::DidChangeWorkspaceFolders
@@ -17,11 +17,13 @@ module Solargraph
17
17
  def merge pins
18
18
  return params if pins.empty?
19
19
  docs = pins
20
- .reject { |pin| pin.documentation.empty? }
20
+ .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
21
21
  .map { |pin| pin.resolve_completion_item[:documentation] }
22
- params
22
+ result = params
23
23
  .merge(pins.first.resolve_completion_item)
24
24
  .merge(documentation: markup_content(docs.join("\n\n")))
25
+ result[:detail] = pins.first.detail
26
+ result
25
27
  end
26
28
 
27
29
  # @param text [String]
@@ -36,6 +36,8 @@ module Solargraph
36
36
  result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
37
37
  result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
38
38
  result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
39
+ # @todo Temporarily disabled
40
+ # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
39
41
  set_result result
40
42
  }
41
43
  Solargraph.logger.unknown "Solargraph initialized (#{bm.real} seconds)"
@@ -59,6 +61,13 @@ module Solargraph
59
61
  }
60
62
  end
61
63
 
64
+ def static_code_action
65
+ {
66
+ codeActionProvider: true,
67
+ codeActionKinds: ["quickfix"]
68
+ }
69
+ end
70
+
62
71
  def static_signature_help
63
72
  {
64
73
  signatureHelpProvider: {
@@ -3,6 +3,7 @@ module Solargraph
3
3
  module Message
4
4
  class Initialized < Base
5
5
  def process
6
+ # @todo Temporarily removed textDocument/codeAction
6
7
  host.register_capabilities %w[
7
8
  textDocument/completion
8
9
  textDocument/hover