solargraph 0.58.0 → 0.59.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.gitattributes +2 -0
  4. data/.github/workflows/linting.yml +6 -5
  5. data/.github/workflows/plugins.yml +48 -35
  6. data/.github/workflows/rspec.yml +15 -28
  7. data/.github/workflows/typecheck.yml +3 -2
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +38 -6
  10. data/.rubocop_todo.yml +53 -966
  11. data/CHANGELOG.md +24 -0
  12. data/Gemfile +3 -1
  13. data/README.md +3 -3
  14. data/Rakefile +26 -23
  15. data/bin/solargraph +9 -8
  16. data/lib/solargraph/api_map/cache.rb +110 -110
  17. data/lib/solargraph/api_map/constants.rb +288 -279
  18. data/lib/solargraph/api_map/index.rb +204 -193
  19. data/lib/solargraph/api_map/source_to_yard.rb +110 -97
  20. data/lib/solargraph/api_map/store.rb +395 -384
  21. data/lib/solargraph/api_map.rb +1029 -945
  22. data/lib/solargraph/bench.rb +44 -45
  23. data/lib/solargraph/complex_type/conformance.rb +176 -0
  24. data/lib/solargraph/complex_type/type_methods.rb +240 -228
  25. data/lib/solargraph/complex_type/unique_type.rb +641 -482
  26. data/lib/solargraph/complex_type.rb +557 -444
  27. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  28. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  29. data/lib/solargraph/convention/data_definition.rb +108 -105
  30. data/lib/solargraph/convention/gemfile.rb +15 -15
  31. data/lib/solargraph/convention/gemspec.rb +23 -23
  32. data/lib/solargraph/convention/rakefile.rb +17 -17
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  35. data/lib/solargraph/convention/struct_definition.rb +168 -164
  36. data/lib/solargraph/convention.rb +78 -78
  37. data/lib/solargraph/converters/dd.rb +19 -17
  38. data/lib/solargraph/converters/dl.rb +17 -15
  39. data/lib/solargraph/converters/dt.rb +17 -15
  40. data/lib/solargraph/converters/misc.rb +3 -1
  41. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  42. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  43. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  44. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  45. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  46. data/lib/solargraph/doc_map.rb +438 -439
  47. data/lib/solargraph/equality.rb +34 -34
  48. data/lib/solargraph/gem_pins.rb +98 -98
  49. data/lib/solargraph/language_server/error_codes.rb +20 -20
  50. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  51. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  52. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  53. data/lib/solargraph/language_server/host/sources.rb +100 -99
  54. data/lib/solargraph/language_server/host.rb +886 -878
  55. data/lib/solargraph/language_server/message/base.rb +97 -97
  56. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  57. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  58. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +108 -114
  59. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  60. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  61. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  62. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  63. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  64. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  65. data/lib/solargraph/language_server/message/text_document/definition.rb +49 -40
  66. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  67. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +36 -26
  68. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  69. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  70. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  71. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  72. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  73. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  74. data/lib/solargraph/language_server/message/text_document/type_definition.rb +33 -25
  75. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  76. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  77. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  78. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +33 -23
  79. data/lib/solargraph/language_server/message.rb +94 -94
  80. data/lib/solargraph/language_server/request.rb +29 -27
  81. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  82. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  83. data/lib/solargraph/library.rb +702 -683
  84. data/lib/solargraph/location.rb +85 -82
  85. data/lib/solargraph/logging.rb +55 -37
  86. data/lib/solargraph/page.rb +92 -92
  87. data/lib/solargraph/parser/comment_ripper.rb +84 -69
  88. data/lib/solargraph/parser/flow_sensitive_typing.rb +471 -255
  89. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  90. data/lib/solargraph/parser/node_processor.rb +63 -62
  91. data/lib/solargraph/parser/parser_gem/class_methods.rb +165 -149
  92. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  93. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  94. data/lib/solargraph/parser/parser_gem/node_methods.rb +507 -486
  95. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  96. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  97. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  98. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +45 -46
  99. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  100. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  101. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  102. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +42 -40
  103. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  104. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  105. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  106. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  107. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  108. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  109. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +51 -52
  110. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +302 -291
  111. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  112. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  113. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  114. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  115. data/lib/solargraph/parser/parser_gem.rb +14 -12
  116. data/lib/solargraph/parser/region.rb +75 -69
  117. data/lib/solargraph/parser/snippet.rb +19 -17
  118. data/lib/solargraph/parser.rb +25 -23
  119. data/lib/solargraph/pin/base.rb +773 -729
  120. data/lib/solargraph/pin/base_variable.rb +375 -126
  121. data/lib/solargraph/pin/block.rb +127 -104
  122. data/lib/solargraph/pin/breakable.rb +15 -9
  123. data/lib/solargraph/pin/callable.rb +275 -231
  124. data/lib/solargraph/pin/closure.rb +69 -72
  125. data/lib/solargraph/pin/common.rb +97 -79
  126. data/lib/solargraph/pin/compound_statement.rb +55 -0
  127. data/lib/solargraph/pin/constant.rb +43 -45
  128. data/lib/solargraph/pin/conversions.rb +129 -123
  129. data/lib/solargraph/pin/delegated_method.rb +131 -120
  130. data/lib/solargraph/pin/documenting.rb +116 -114
  131. data/lib/solargraph/pin/instance_variable.rb +38 -34
  132. data/lib/solargraph/pin/keyword.rb +16 -20
  133. data/lib/solargraph/pin/local_variable.rb +31 -75
  134. data/lib/solargraph/pin/method.rb +724 -672
  135. data/lib/solargraph/pin/method_alias.rb +42 -34
  136. data/lib/solargraph/pin/namespace.rb +122 -115
  137. data/lib/solargraph/pin/parameter.rb +339 -275
  138. data/lib/solargraph/pin/proxy_type.rb +42 -39
  139. data/lib/solargraph/pin/reference/override.rb +47 -47
  140. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  141. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  142. data/lib/solargraph/pin/reference.rb +59 -39
  143. data/lib/solargraph/pin/search.rb +62 -61
  144. data/lib/solargraph/pin/signature.rb +64 -61
  145. data/lib/solargraph/pin/symbol.rb +54 -53
  146. data/lib/solargraph/pin/until.rb +16 -18
  147. data/lib/solargraph/pin/while.rb +16 -18
  148. data/lib/solargraph/pin.rb +46 -44
  149. data/lib/solargraph/pin_cache.rb +248 -245
  150. data/lib/solargraph/position.rb +139 -119
  151. data/lib/solargraph/range.rb +113 -112
  152. data/lib/solargraph/rbs_map/conversions.rb +952 -823
  153. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  154. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  155. data/lib/solargraph/rbs_map/stdlib_map.rb +71 -43
  156. data/lib/solargraph/rbs_map.rb +207 -163
  157. data/lib/solargraph/server_methods.rb +16 -16
  158. data/lib/solargraph/shell.rb +555 -352
  159. data/lib/solargraph/source/chain/array.rb +39 -37
  160. data/lib/solargraph/source/chain/call.rb +377 -337
  161. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  162. data/lib/solargraph/source/chain/constant.rb +30 -26
  163. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  164. data/lib/solargraph/source/chain/hash.rb +37 -34
  165. data/lib/solargraph/source/chain/if.rb +30 -28
  166. data/lib/solargraph/source/chain/instance_variable.rb +36 -13
  167. data/lib/solargraph/source/chain/link.rb +99 -109
  168. data/lib/solargraph/source/chain/literal.rb +51 -48
  169. data/lib/solargraph/source/chain/or.rb +29 -23
  170. data/lib/solargraph/source/chain/q_call.rb +13 -11
  171. data/lib/solargraph/source/chain/variable.rb +15 -13
  172. data/lib/solargraph/source/chain/z_super.rb +28 -30
  173. data/lib/solargraph/source/chain.rb +304 -291
  174. data/lib/solargraph/source/change.rb +89 -82
  175. data/lib/solargraph/source/cursor.rb +172 -166
  176. data/lib/solargraph/source/encoding_fixes.rb +22 -23
  177. data/lib/solargraph/source/source_chainer.rb +218 -194
  178. data/lib/solargraph/source/updater.rb +59 -55
  179. data/lib/solargraph/source.rb +522 -498
  180. data/lib/solargraph/source_map/clip.rb +245 -226
  181. data/lib/solargraph/source_map/data.rb +37 -34
  182. data/lib/solargraph/source_map/mapper.rb +286 -259
  183. data/lib/solargraph/source_map.rb +224 -212
  184. data/lib/solargraph/type_checker/problem.rb +34 -32
  185. data/lib/solargraph/type_checker/rules.rb +157 -84
  186. data/lib/solargraph/type_checker.rb +888 -814
  187. data/lib/solargraph/version.rb +5 -5
  188. data/lib/solargraph/workspace/config.rb +258 -255
  189. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  190. data/lib/solargraph/workspace/require_paths.rb +98 -97
  191. data/lib/solargraph/workspace.rb +242 -220
  192. data/lib/solargraph/yard_map/helpers.rb +49 -44
  193. data/lib/solargraph/yard_map/mapper/to_method.rb +136 -130
  194. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  195. data/lib/solargraph/yard_map/mapper.rb +84 -79
  196. data/lib/solargraph/yard_map.rb +17 -18
  197. data/lib/solargraph/yard_tags.rb +20 -20
  198. data/lib/solargraph/yardoc.rb +90 -87
  199. data/lib/solargraph.rb +128 -105
  200. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  201. data/rbs/fills/tuple/tuple.rbs +28 -0
  202. data/rbs/shims/ast/0/node.rbs +5 -0
  203. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  204. data/rbs_collection.yaml +1 -1
  205. data/solargraph.gemspec +37 -35
  206. metadata +52 -51
  207. data/lib/solargraph/type_checker/checks.rb +0 -124
  208. data/lib/solargraph/type_checker/param_def.rb +0 -37
  209. data/lib/solargraph/yard_map/to_method.rb +0 -89
  210. data/sig/shims/ast/0/node.rbs +0 -5
  211. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  212. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  213. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  214. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  215. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  216. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  217. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  218. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  219. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,97 +1,97 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- class Base
7
- # @return [Solargraph::LanguageServer::Host]
8
- attr_reader :host
9
-
10
- # @return [Integer]
11
- attr_reader :id
12
-
13
- # @return [Hash]
14
- attr_reader :request
15
-
16
- # @return [String]
17
- attr_reader :method
18
-
19
- # @return [Hash{String => undefined}]
20
- attr_reader :params
21
-
22
- # @return [Hash, Array, nil]
23
- attr_reader :result
24
-
25
- # @return [Hash, nil]
26
- attr_reader :error
27
-
28
- # @param host [Solargraph::LanguageServer::Host]
29
- # @param request [Hash]
30
- def initialize host, request
31
- @host = host
32
- @id = request['id'].freeze
33
- @request = request.freeze
34
- @method = request['method'].freeze
35
- @params = (request['params'] || {}).freeze
36
- post_initialize
37
- end
38
-
39
- # @return [void]
40
- def post_initialize; end
41
-
42
- # @return [void]
43
- def process; end
44
-
45
- # @param data [Hash, Array, nil]
46
- # @return [void]
47
- def set_result data
48
- @result = data
49
- end
50
-
51
- # @param code [Integer] See Solargraph::LanguageServer::ErrorCodes
52
- # @param message [String]
53
- # @return [void]
54
- def set_error code, message
55
- @error = {
56
- code: code,
57
- message: message
58
- }
59
- end
60
-
61
- # @return [void]
62
- def send_response
63
- return if id.nil?
64
-
65
- accept_or_cancel
66
- response = {
67
- jsonrpc: '2.0',
68
- id: id
69
- }
70
- response[:result] = result unless result.nil?
71
- response[:error] = error unless error.nil?
72
- response[:result] = nil if result.nil? and error.nil?
73
- json = response.to_json
74
- envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
75
- Solargraph.logger.debug envelope
76
- host.queue envelope
77
- host.clear id
78
- end
79
-
80
- private
81
-
82
- # @return [void]
83
- def accept_or_cancel
84
- if host.cancel?(id)
85
- # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
86
- # cancel should send response RequestCancelled
87
- Solargraph::Logging.logger.info "Cancelled response to ##{id} #{method}"
88
- set_result nil
89
- set_error ErrorCodes::REQUEST_CANCELLED, 'Cancelled by client'
90
- else
91
- Solargraph::Logging.logger.info "Sending response to ##{id} #{method}"
92
- end
93
- end
94
- end
95
- end
96
- end
97
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ class Base
7
+ # @return [Solargraph::LanguageServer::Host]
8
+ attr_reader :host
9
+
10
+ # @return [Integer]
11
+ attr_reader :id
12
+
13
+ # @return [Hash]
14
+ attr_reader :request
15
+
16
+ # @return [String]
17
+ attr_reader :method
18
+
19
+ # @return [Hash{String => undefined}]
20
+ attr_reader :params
21
+
22
+ # @return [Hash, Array, nil]
23
+ attr_reader :result
24
+
25
+ # @return [Hash, nil]
26
+ attr_reader :error
27
+
28
+ # @param host [Solargraph::LanguageServer::Host]
29
+ # @param request [Hash]
30
+ def initialize host, request
31
+ @host = host
32
+ @id = request['id'].freeze
33
+ @request = request.freeze
34
+ @method = request['method'].freeze
35
+ @params = (request['params'] || {}).freeze
36
+ post_initialize
37
+ end
38
+
39
+ # @return [void]
40
+ def post_initialize; end
41
+
42
+ # @return [void]
43
+ def process; end
44
+
45
+ # @param data [Hash, Array, nil]
46
+ # @return [void]
47
+ def set_result data
48
+ @result = data
49
+ end
50
+
51
+ # @param code [Integer] See Solargraph::LanguageServer::ErrorCodes
52
+ # @param message [String]
53
+ # @return [void]
54
+ def set_error code, message
55
+ @error = {
56
+ code: code,
57
+ message: message
58
+ }
59
+ end
60
+
61
+ # @return [void]
62
+ def send_response
63
+ return if id.nil?
64
+
65
+ accept_or_cancel
66
+ response = {
67
+ jsonrpc: '2.0',
68
+ id: id
69
+ }
70
+ response[:result] = result unless result.nil?
71
+ response[:error] = error unless error.nil?
72
+ response[:result] = nil if result.nil? && error.nil?
73
+ json = response.to_json
74
+ envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
75
+ Solargraph.logger.debug envelope
76
+ host.queue envelope
77
+ host.clear id
78
+ end
79
+
80
+ private
81
+
82
+ # @return [void]
83
+ def accept_or_cancel
84
+ if host.cancel?(id)
85
+ # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
86
+ # cancel should send response RequestCancelled
87
+ Solargraph::Logging.logger.info "Cancelled response to ##{id} #{method}"
88
+ set_result nil
89
+ set_error ErrorCodes::REQUEST_CANCELLED, 'Cancelled by client'
90
+ else
91
+ Solargraph::Logging.logger.info "Sending response to ##{id} #{method}"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -1,15 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Client
7
- class RegisterCapability < Solargraph::LanguageServer::Message::Base
8
- def process
9
-
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Client
7
+ class RegisterCapability < Solargraph::LanguageServer::Message::Base
8
+ def process; end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,60 +1,58 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module CompletionItem
7
- # completionItem/resolve message handler
8
- #
9
- class Resolve < Base
10
- def process
11
- pins = host.locate_pins(params)
12
- set_result merge(pins)
13
- end
14
-
15
- private
16
-
17
- # @param pins [Array<Pin::Base>]
18
- # @return [Hash]
19
- def merge pins
20
- return params if pins.empty?
21
- docs = pins
22
- .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
23
- result = params
24
- .transform_keys(&:to_sym)
25
- .merge(pins.first.resolve_completion_item)
26
- .merge(documentation: markup_content(join_docs(docs)))
27
- result[:detail] = pins.first.detail
28
- result
29
- end
30
-
31
- # @param text [String]
32
- # @return [Hash{Symbol => String}, nil]
33
- def markup_content text
34
- return nil if text.strip.empty?
35
- {
36
- kind: 'markdown',
37
- value: text
38
- }
39
- end
40
-
41
- # @param pins [Array<Pin::Base>]
42
- # @return [String]
43
- def join_docs pins
44
- result = []
45
- last_link = nil
46
- pins.each_with_index do |pin|
47
- this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
48
- if this_link && this_link != last_link && this_link != 'undefined'
49
- result.push this_link
50
- end
51
- result.push pin.documentation unless result.last && result.last.end_with?(pin.documentation)
52
- last_link = this_link
53
- end
54
- result.join("\n\n")
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module CompletionItem
7
+ # completionItem/resolve message handler
8
+ #
9
+ class Resolve < Base
10
+ def process
11
+ pins = host.locate_pins(params)
12
+ set_result merge(pins)
13
+ end
14
+
15
+ private
16
+
17
+ # @param pins [Array<Pin::Base>]
18
+ # @return [Hash]
19
+ def merge pins
20
+ return params if pins.empty?
21
+ docs = pins
22
+ .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
23
+ result = params
24
+ .transform_keys(&:to_sym)
25
+ .merge(pins.first.resolve_completion_item)
26
+ .merge(documentation: markup_content(join_docs(docs)))
27
+ result[:detail] = pins.first.detail
28
+ result
29
+ end
30
+
31
+ # @param text [String]
32
+ # @return [Hash{Symbol => String}, nil]
33
+ def markup_content text
34
+ return nil if text.strip.empty?
35
+ {
36
+ kind: 'markdown',
37
+ value: text
38
+ }
39
+ end
40
+
41
+ # @param pins [Array<Pin::Base>]
42
+ # @return [String]
43
+ def join_docs pins
44
+ result = []
45
+ last_link = nil
46
+ pins.each do |pin|
47
+ this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
48
+ result.push this_link if this_link && this_link != last_link && this_link != 'undefined'
49
+ result.push pin.documentation unless result.last&.end_with?(pin.documentation)
50
+ last_link = this_link
51
+ end
52
+ result.join("\n\n")
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,114 +1,108 @@
1
- # frozen_string_literal: true
2
-
3
-
4
- # @todo PR the RBS gem to add this
5
- # @!parse
6
- # module ::Gem
7
- # class SpecFetcher; end
8
- # end
9
-
10
- module Solargraph
11
- module LanguageServer
12
- module Message
13
- module Extended
14
- # Check if a more recent version of the Solargraph gem is available.
15
- # Notify the client when an update exists. If the `verbose` parameter
16
- # is true, notify the client when the gem is up to date.
17
- #
18
- class CheckGemVersion < Base
19
- # @return [Gem::SpecFetcher]
20
- def self.fetcher
21
- @fetcher ||= Gem::SpecFetcher.new
22
- end
23
-
24
- # @param obj [Gem::SpecFetcher]
25
- # @return [Gem::SpecFetcher]
26
- def self.fetcher= obj
27
- @fetcher = obj
28
- end
29
-
30
- GEM_ZERO = Gem::Version.new('0.0.0')
31
-
32
- # @param host [Solargraph::LanguageServer::Host]
33
- # @param request [Hash]
34
- # @param current [Gem::Version]
35
- # @param available [Gem::Version, nil]
36
- def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
37
- super(host, request)
38
- @current = current
39
- @available = available
40
- end
41
-
42
- def process
43
- if available > GEM_ZERO
44
- if available > current
45
- host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
46
- LanguageServer::MessageTypes::INFO,
47
- ['Update now'] do |result|
48
- next unless result == 'Update now'
49
- cmd = if host.options['useBundler']
50
- 'bundle update solargraph'
51
- else
52
- 'gem update solargraph'
53
- end
54
- o, s = Open3.capture2(cmd)
55
- if s == 0
56
- host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
57
- host.send_notification '$/solargraph/restart', {}
58
- else
59
- host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
60
- end
61
- end
62
- elsif params['verbose']
63
- host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
64
- end
65
- elsif fetched?
66
- Solargraph::Logging.logger.warn error
67
- host.show_message(error, MessageTypes::ERROR) if params['verbose']
68
- end
69
- set_result({
70
- installed: current,
71
- available: available
72
- })
73
- end
74
-
75
- private
76
-
77
- # @return [Gem::Version]
78
- attr_reader :current
79
-
80
- # @return [Gem::Version]
81
- def available
82
- if !@available && !@fetched
83
- @fetched = true
84
- begin
85
- @available ||= begin
86
- # @sg-ignore Variable type could not be inferred for tuple
87
- # @type [Gem::Dependency, nil]
88
- tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
89
- if tuple.nil?
90
- @error = 'An error occurred fetching the gem data'
91
- GEM_ZERO
92
- else
93
- tuple.version
94
- end
95
- end
96
- rescue Errno::EADDRNOTAVAIL => e
97
- @error = "Unable to connect to gem source: #{e.message}"
98
- GEM_ZERO
99
- end
100
- end
101
- @available
102
- end
103
-
104
- def fetched?
105
- @fetched ||= false
106
- end
107
-
108
- # @return [String, nil]
109
- attr_reader :error
110
- end
111
- end
112
- end
113
- end
114
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ # Check if a more recent version of the Solargraph gem is available.
8
+ # Notify the client when an update exists. If the `verbose` parameter
9
+ # is true, notify the client when the gem is up to date.
10
+ #
11
+ class CheckGemVersion < Base
12
+ # @return [Gem::SpecFetcher]
13
+ def self.fetcher
14
+ @fetcher ||= Gem::SpecFetcher.new
15
+ end
16
+
17
+ # @param obj [Gem::SpecFetcher]
18
+ # @return [Gem::SpecFetcher]
19
+ class << self
20
+ attr_writer :fetcher
21
+ end
22
+
23
+ GEM_ZERO = Gem::Version.new('0.0.0')
24
+
25
+ # @param host [Solargraph::LanguageServer::Host]
26
+ # @param request [Hash]
27
+ # @param current [Gem::Version]
28
+ # @param available [Gem::Version, nil]
29
+ def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
30
+ super(host, request)
31
+ @current = current
32
+ @available = available
33
+ end
34
+
35
+ def process
36
+ if available > GEM_ZERO
37
+ if available > current
38
+ host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
39
+ LanguageServer::MessageTypes::INFO,
40
+ ['Update now'] do |result|
41
+ next unless result == 'Update now'
42
+ cmd = if host.options['useBundler']
43
+ 'bundle update solargraph'
44
+ else
45
+ 'gem update solargraph'
46
+ end
47
+ _, s = Open3.capture2(cmd)
48
+ if s == 0
49
+ host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
50
+ host.send_notification '$/solargraph/restart', {}
51
+ else
52
+ host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
53
+ end
54
+ end
55
+ elsif params['verbose']
56
+ host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
57
+ end
58
+ elsif fetched?
59
+ Solargraph::Logging.logger.warn error
60
+ # @sg-ignore Need to add nil check here
61
+ host.show_message(error, MessageTypes::ERROR) if params['verbose']
62
+ end
63
+ set_result({
64
+ installed: current,
65
+ available: available
66
+ })
67
+ end
68
+
69
+ private
70
+
71
+ # @return [Gem::Version]
72
+ attr_reader :current
73
+
74
+ # @return [Gem::Version]
75
+ # @sg-ignore Need to add nil check here
76
+ def available
77
+ if !@available && !@fetched
78
+ @fetched = true
79
+ begin
80
+ @available ||= begin
81
+ # @type [Gem::Dependency, nil]
82
+ tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
83
+ if tuple.nil?
84
+ @error = 'An error occurred fetching the gem data'
85
+ GEM_ZERO
86
+ else
87
+ tuple.version
88
+ end
89
+ end
90
+ rescue Errno::EADDRNOTAVAIL => e
91
+ @error = "Unable to connect to gem source: #{e.message}"
92
+ GEM_ZERO
93
+ end
94
+ end
95
+ @available
96
+ end
97
+
98
+ def fetched?
99
+ @fetched ||= false
100
+ end
101
+
102
+ # @return [String, nil]
103
+ attr_reader :error
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -1,23 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- class Document < Base
8
- def process
9
- api_map, pins = host.document(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
12
- set_result(
13
- content: content
14
- )
15
- rescue StandardError => e
16
- Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
17
- Solargraph.logger.debug e.backtrace.join("\n")
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ class Document < Base
8
+ def process
9
+ api_map, pins = host.document(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
12
+ set_result(
13
+ content: content
14
+ )
15
+ rescue StandardError => e
16
+ Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
17
+ # @sg-ignore Need to add nil check here
18
+ Solargraph.logger.debug e.backtrace.join("\n")
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end