solargraph 0.46.0 → 0.54.5

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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/plugins.yml +40 -0
  4. data/.github/workflows/rspec.yml +37 -41
  5. data/.github/workflows/typecheck.yml +34 -0
  6. data/.gitignore +9 -9
  7. data/.rspec +2 -2
  8. data/.yardopts +2 -2
  9. data/CHANGELOG.md +1338 -1115
  10. data/Gemfile +0 -0
  11. data/LICENSE +1 -1
  12. data/README.md +131 -128
  13. data/Rakefile +0 -0
  14. data/SPONSORS.md +10 -18
  15. data/bin/solargraph +0 -0
  16. data/lib/solargraph/api_map/cache.rb +109 -70
  17. data/lib/solargraph/api_map/index.rb +167 -0
  18. data/lib/solargraph/api_map/source_to_yard.rb +88 -81
  19. data/lib/solargraph/api_map/store.rb +260 -256
  20. data/lib/solargraph/api_map.rb +870 -686
  21. data/lib/solargraph/bench.rb +44 -27
  22. data/lib/solargraph/cache.rb +77 -0
  23. data/lib/solargraph/complex_type/type_methods.rb +217 -130
  24. data/lib/solargraph/complex_type/unique_type.rb +386 -75
  25. data/lib/solargraph/complex_type.rb +394 -221
  26. data/lib/solargraph/convention/base.rb +33 -33
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +22 -22
  29. data/lib/solargraph/convention/rakefile.rb +17 -0
  30. data/lib/solargraph/convention.rb +47 -47
  31. data/lib/solargraph/converters/dd.rb +17 -12
  32. data/lib/solargraph/converters/dl.rb +15 -12
  33. data/lib/solargraph/converters/dt.rb +15 -12
  34. data/lib/solargraph/converters/misc.rb +1 -1
  35. data/lib/solargraph/diagnostics/base.rb +29 -29
  36. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  37. data/lib/solargraph/diagnostics/rubocop.rb +113 -98
  38. data/lib/solargraph/diagnostics/rubocop_helpers.rb +66 -63
  39. data/lib/solargraph/diagnostics/severities.rb +15 -15
  40. data/lib/solargraph/diagnostics/type_check.rb +55 -54
  41. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  42. data/lib/solargraph/diagnostics.rb +55 -55
  43. data/lib/solargraph/doc_map.rb +188 -0
  44. data/lib/solargraph/environ.rb +45 -45
  45. data/lib/solargraph/equality.rb +33 -0
  46. data/lib/solargraph/gem_pins.rb +72 -0
  47. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
  48. data/lib/solargraph/language_server/error_codes.rb +20 -20
  49. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  50. data/lib/solargraph/language_server/host/dispatch.rb +128 -111
  51. data/lib/solargraph/language_server/host/message_worker.rb +106 -59
  52. data/lib/solargraph/language_server/host/sources.rb +99 -156
  53. data/lib/solargraph/language_server/host.rb +861 -865
  54. data/lib/solargraph/language_server/message/base.rb +96 -89
  55. data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
  56. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  57. data/lib/solargraph/language_server/message/client.rb +11 -11
  58. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -58
  59. data/lib/solargraph/language_server/message/completion_item.rb +11 -11
  60. data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +112 -100
  62. data/lib/solargraph/language_server/message/extended/document.rb +20 -20
  63. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  64. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -23
  65. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  66. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  67. data/lib/solargraph/language_server/message/extended.rb +21 -21
  68. data/lib/solargraph/language_server/message/initialize.rb +191 -162
  69. data/lib/solargraph/language_server/message/initialized.rb +28 -27
  70. data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
  71. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
  72. data/lib/solargraph/language_server/message/shutdown.rb +13 -13
  73. data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
  74. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
  75. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -59
  76. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
  77. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
  78. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
  79. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
  80. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
  81. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  82. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -23
  83. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
  84. data/lib/solargraph/language_server/message/text_document/formatting.rb +131 -126
  85. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -54
  86. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
  87. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  88. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  89. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  90. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -29
  91. data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
  92. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  93. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -30
  94. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -33
  95. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  96. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  97. data/lib/solargraph/language_server/message/workspace.rb +14 -14
  98. data/lib/solargraph/language_server/message.rb +94 -93
  99. data/lib/solargraph/language_server/message_types.rb +14 -14
  100. data/lib/solargraph/language_server/progress.rb +135 -0
  101. data/lib/solargraph/language_server/request.rb +24 -24
  102. data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
  103. data/lib/solargraph/language_server/transport/adapter.rb +68 -53
  104. data/lib/solargraph/language_server/transport/data_reader.rb +74 -72
  105. data/lib/solargraph/language_server/transport.rb +13 -13
  106. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  107. data/lib/solargraph/language_server.rb +20 -19
  108. data/lib/solargraph/library.rb +663 -546
  109. data/lib/solargraph/location.rb +58 -37
  110. data/lib/solargraph/logging.rb +27 -27
  111. data/lib/solargraph/page.rb +89 -83
  112. data/lib/solargraph/parser/comment_ripper.rb +56 -52
  113. data/lib/solargraph/parser/node_methods.rb +83 -43
  114. data/lib/solargraph/parser/node_processor/base.rb +87 -77
  115. data/lib/solargraph/parser/node_processor.rb +45 -43
  116. data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +153 -135
  117. data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +18 -16
  118. data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +164 -148
  119. data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
  120. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +23 -23
  121. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
  122. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +15 -15
  123. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +43 -42
  124. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +35 -25
  125. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +23 -23
  126. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/def_node.rb +50 -63
  127. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +36 -36
  128. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +23 -23
  129. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +38 -38
  130. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +28 -28
  131. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
  132. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +39 -39
  133. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +16 -16
  134. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +36 -36
  135. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +42 -0
  136. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +259 -257
  137. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sym_node.rb +18 -18
  138. data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
  139. data/lib/solargraph/parser/parser_gem.rb +12 -0
  140. data/lib/solargraph/parser/region.rb +66 -66
  141. data/lib/solargraph/parser/snippet.rb +15 -13
  142. data/lib/solargraph/parser.rb +22 -26
  143. data/lib/solargraph/pin/base.rb +378 -296
  144. data/lib/solargraph/pin/base_variable.rb +118 -84
  145. data/lib/solargraph/pin/block.rb +101 -72
  146. data/lib/solargraph/pin/callable.rb +147 -0
  147. data/lib/solargraph/pin/class_variable.rb +8 -8
  148. data/lib/solargraph/pin/closure.rb +57 -37
  149. data/lib/solargraph/pin/common.rb +70 -70
  150. data/lib/solargraph/pin/constant.rb +43 -43
  151. data/lib/solargraph/pin/conversions.rb +123 -96
  152. data/lib/solargraph/pin/delegated_method.rb +101 -0
  153. data/lib/solargraph/pin/documenting.rb +98 -105
  154. data/lib/solargraph/pin/duck_method.rb +16 -16
  155. data/lib/solargraph/pin/global_variable.rb +8 -8
  156. data/lib/solargraph/pin/instance_variable.rb +34 -30
  157. data/lib/solargraph/pin/keyword.rb +15 -15
  158. data/lib/solargraph/pin/keyword_param.rb +8 -8
  159. data/lib/solargraph/pin/local_variable.rb +67 -55
  160. data/lib/solargraph/pin/method.rb +527 -245
  161. data/lib/solargraph/pin/method_alias.rb +31 -31
  162. data/lib/solargraph/pin/namespace.rb +107 -91
  163. data/lib/solargraph/pin/parameter.rb +212 -201
  164. data/lib/solargraph/pin/proxy_type.rb +29 -29
  165. data/lib/solargraph/pin/reference/extend.rb +10 -10
  166. data/lib/solargraph/pin/reference/include.rb +10 -10
  167. data/lib/solargraph/pin/reference/override.rb +29 -29
  168. data/lib/solargraph/pin/reference/prepend.rb +10 -10
  169. data/lib/solargraph/pin/reference/require.rb +14 -14
  170. data/lib/solargraph/pin/reference/superclass.rb +10 -10
  171. data/lib/solargraph/pin/reference.rb +22 -14
  172. data/lib/solargraph/pin/search.rb +56 -56
  173. data/lib/solargraph/pin/signature.rb +17 -0
  174. data/lib/solargraph/pin/singleton.rb +11 -11
  175. data/lib/solargraph/pin/symbol.rb +47 -47
  176. data/lib/solargraph/pin.rb +41 -37
  177. data/lib/solargraph/position.rb +107 -100
  178. data/lib/solargraph/range.rb +98 -95
  179. data/lib/solargraph/rbs_map/conversions.rb +646 -0
  180. data/lib/solargraph/rbs_map/core_fills.rb +50 -0
  181. data/lib/solargraph/rbs_map/core_map.rb +28 -0
  182. data/lib/solargraph/rbs_map/stdlib_map.rb +33 -0
  183. data/lib/solargraph/rbs_map.rb +93 -0
  184. data/lib/solargraph/server_methods.rb +16 -16
  185. data/lib/solargraph/shell.rb +269 -226
  186. data/lib/solargraph/source/chain/array.rb +33 -0
  187. data/lib/solargraph/source/chain/block_symbol.rb +13 -0
  188. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  189. data/lib/solargraph/source/chain/call.rb +303 -204
  190. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  191. data/lib/solargraph/source/chain/constant.rb +89 -75
  192. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  193. data/lib/solargraph/source/chain/hash.rb +33 -28
  194. data/lib/solargraph/source/chain/head.rb +19 -19
  195. data/lib/solargraph/source/chain/if.rb +28 -0
  196. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  197. data/lib/solargraph/source/chain/link.rb +98 -71
  198. data/lib/solargraph/source/chain/literal.rb +28 -23
  199. data/lib/solargraph/source/chain/or.rb +23 -23
  200. data/lib/solargraph/source/chain/q_call.rb +11 -11
  201. data/lib/solargraph/source/chain/variable.rb +13 -13
  202. data/lib/solargraph/source/chain/z_super.rb +30 -30
  203. data/lib/solargraph/source/chain.rb +252 -164
  204. data/lib/solargraph/source/change.rb +82 -79
  205. data/lib/solargraph/source/cursor.rb +167 -164
  206. data/lib/solargraph/source/source_chainer.rb +194 -191
  207. data/lib/solargraph/source/updater.rb +55 -54
  208. data/lib/solargraph/source.rb +495 -522
  209. data/lib/solargraph/source_map/clip.rb +232 -224
  210. data/lib/solargraph/source_map/completion.rb +23 -23
  211. data/lib/solargraph/source_map/data.rb +30 -0
  212. data/lib/solargraph/source_map/mapper.rb +255 -212
  213. data/lib/solargraph/source_map.rb +217 -180
  214. data/lib/solargraph/type_checker/checks.rb +120 -99
  215. data/lib/solargraph/type_checker/param_def.rb +35 -35
  216. data/lib/solargraph/type_checker/problem.rb +32 -32
  217. data/lib/solargraph/type_checker/rules.rb +62 -57
  218. data/lib/solargraph/type_checker.rb +672 -543
  219. data/lib/solargraph/version.rb +5 -5
  220. data/lib/solargraph/views/environment.erb +56 -58
  221. data/lib/solargraph/workspace/config.rb +239 -231
  222. data/lib/solargraph/workspace.rb +239 -215
  223. data/lib/solargraph/yard_map/cache.rb +25 -19
  224. data/lib/solargraph/yard_map/helpers.rb +16 -16
  225. data/lib/solargraph/yard_map/mapper/to_constant.rb +26 -25
  226. data/lib/solargraph/yard_map/mapper/to_method.rb +94 -78
  227. data/lib/solargraph/yard_map/mapper/to_namespace.rb +28 -27
  228. data/lib/solargraph/yard_map/mapper.rb +78 -77
  229. data/lib/solargraph/yard_map/to_method.rb +86 -79
  230. data/lib/solargraph/yard_map.rb +18 -460
  231. data/lib/solargraph/yard_tags.rb +20 -0
  232. data/lib/solargraph/yardoc.rb +52 -0
  233. data/lib/solargraph.rb +72 -69
  234. data/solargraph.gemspec +21 -10
  235. metadata +184 -115
  236. data/.travis.yml +0 -19
  237. data/lib/solargraph/api_map/bundler_methods.rb +0 -22
  238. data/lib/solargraph/compat.rb +0 -37
  239. data/lib/solargraph/convention/rspec.rb +0 -30
  240. data/lib/solargraph/documentor.rb +0 -76
  241. data/lib/solargraph/language_server/host/cataloger.rb +0 -56
  242. data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
  243. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
  244. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -35
  245. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
  246. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +0 -63
  247. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +0 -21
  248. data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
  249. data/lib/solargraph/parser/legacy.rb +0 -12
  250. data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -144
  251. data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
  252. data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
  253. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
  254. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
  255. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -22
  256. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
  257. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -57
  258. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
  259. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
  260. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
  261. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
  262. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
  263. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
  264. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
  265. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
  266. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -45
  267. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -21
  268. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
  269. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -277
  270. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +0 -18
  271. data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
  272. data/lib/solargraph/parser/rubyvm.rb +0 -40
  273. data/lib/solargraph/yard_map/core_docs.rb +0 -170
  274. data/lib/solargraph/yard_map/core_fills.rb +0 -208
  275. data/lib/solargraph/yard_map/core_gen.rb +0 -76
  276. data/lib/solargraph/yard_map/rdoc_to_yard.rb +0 -140
  277. data/lib/solargraph/yard_map/stdlib_fills.rb +0 -43
  278. data/lib/yard-solargraph.rb +0 -33
  279. data/yardoc/2.2.2.tar.gz +0 -0
@@ -1,20 +1,20 @@
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
- objects = host.document(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('document', layout: true, locals: {objects: objects})
12
- set_result(
13
- content: content
14
- )
15
- end
16
- end
17
- end
18
- end
19
- end
20
- 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
+ objects = host.document(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('document', layout: true, locals: {objects: objects})
12
+ set_result(
13
+ content: content
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,32 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update YARD documentation for installed gems. If the `rebuild`
10
- # parameter is true, rebuild existing yardocs.
11
- #
12
- class DocumentGems < Base
13
- def process
14
- cmd = "yard gems"
15
- cmd += " --rebuild" if params['rebuild']
16
- o, s = Open3.capture2(cmd)
17
- if s != 0
18
- host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
- set_result({
20
- status: 'err'
21
- })
22
- else
23
- set_result({
24
- status: 'ok'
25
- })
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update YARD documentation for installed gems. If the `rebuild`
10
+ # parameter is true, rebuild existing yardocs.
11
+ #
12
+ class DocumentGems < Base
13
+ def process
14
+ cmd = "yard gems"
15
+ cmd += " --rebuild" if params['rebuild']
16
+ o, s = Open3.capture2(cmd)
17
+ if s != 0
18
+ host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
+ set_result({
20
+ status: 'err'
21
+ })
22
+ else
23
+ set_result({
24
+ status: 'ok'
25
+ })
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,23 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update core Ruby documentation.
10
- #
11
- class DownloadCore < Base
12
- def process
13
- ver = Solargraph::YardMap::CoreDocs.best_download
14
- Solargraph::YardMap::CoreDocs.download ver
15
- host.show_message "Downloaded documentation for Ruby #{ver}.", LanguageServer::MessageTypes::INFO
16
- rescue StandardError => e
17
- host.show_message "An error occurred while downloading documentation: [#{e.class}] #{e.message}", LanguageServer::MessageTypes::ERROR
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update core Ruby documentation.
10
+ #
11
+ class DownloadCore < Base
12
+ def process
13
+ host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,25 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- # Update YARD documentation for installed gems. If the `rebuild`
8
- # parameter is true, rebuild existing yardocs.
9
- #
10
- class Environment < Base
11
- def process
12
- # Make sure the environment page can report RuboCop's version
13
- require 'rubocop'
14
-
15
- page = Solargraph::Page.new(host.options['viewsPath'])
16
- content = page.render('environment', layout: true, locals: { config: host.options, folders: host.folders })
17
- set_result(
18
- content: content
19
- )
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ # Update YARD documentation for installed gems. If the `rebuild`
8
+ # parameter is true, rebuild existing yardocs.
9
+ #
10
+ class Environment < Base
11
+ def process
12
+ # Make sure the environment page can report RuboCop's version
13
+ require 'rubocop'
14
+
15
+ page = Solargraph::Page.new(host.options['viewsPath'])
16
+ content = page.render('environment', layout: true, locals: { config: host.options, folders: host.folders })
17
+ set_result(
18
+ content: content
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- class Search < Base
8
- def process
9
- results = host.search(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
- set_result(
13
- content: content
14
- )
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ class Search < Base
8
+ def process
9
+ results = host.search(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
+ set_result(
13
+ content: content
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,21 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- # Messages in the Extended module are custom to the Solargraph
7
- # implementation of the language server. In the protocol, the method
8
- # names should start with "$/" so clients that don't recognize them can
9
- # ignore them, as per the LSP specification.
10
- #
11
- module Extended
12
- autoload :Document, 'solargraph/language_server/message/extended/document'
13
- autoload :Search, 'solargraph/language_server/message/extended/search'
14
- autoload :CheckGemVersion, 'solargraph/language_server/message/extended/check_gem_version'
15
- autoload :DocumentGems, 'solargraph/language_server/message/extended/document_gems'
16
- autoload :DownloadCore, 'solargraph/language_server/message/extended/download_core'
17
- autoload :Environment, 'solargraph/language_server/message/extended/environment'
18
- end
19
- end
20
- end
21
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ # Messages in the Extended module are custom to the Solargraph
7
+ # implementation of the language server. In the protocol, the method
8
+ # names should start with "$/" so clients that don't recognize them can
9
+ # ignore them, as per the LSP specification.
10
+ #
11
+ module Extended
12
+ autoload :Document, 'solargraph/language_server/message/extended/document'
13
+ autoload :Search, 'solargraph/language_server/message/extended/search'
14
+ autoload :CheckGemVersion, 'solargraph/language_server/message/extended/check_gem_version'
15
+ autoload :DocumentGems, 'solargraph/language_server/message/extended/document_gems'
16
+ autoload :DownloadCore, 'solargraph/language_server/message/extended/download_core'
17
+ autoload :Environment, 'solargraph/language_server/message/extended/environment'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,162 +1,191 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- class Initialize < Base
7
- def process
8
- host.configure params['initializationOptions']
9
- host.client_capabilities = params['capabilities']
10
- if support_workspace_folders?
11
- host.prepare_folders params['workspaceFolders']
12
- elsif params['rootUri']
13
- host.prepare UriHelpers.uri_to_file(params['rootUri'])
14
- else
15
- host.prepare params['rootPath']
16
- end
17
- result = {
18
- capabilities: {
19
- textDocumentSync: 2, # @todo What should this be?
20
- workspace: {
21
- workspaceFolders: {
22
- supported: true,
23
- changeNotifications: true
24
- }
25
- }
26
- }
27
- }
28
- result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
29
- result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
30
- # result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
31
- result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
32
- result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
33
- result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
34
- result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
35
- result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
36
- result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
37
- result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
38
- result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
39
- result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
40
- # @todo Temporarily disabled
41
- # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
42
- set_result result
43
- end
44
-
45
- private
46
-
47
- def support_workspace_folders?
48
- params['capabilities'] &&
49
- params['capabilities']['workspace'] &&
50
- params['capabilities']['workspace']['workspaceFolders'] &&
51
- params['workspaceFolders']
52
- end
53
-
54
- def static_completion
55
- return {} unless host.options['completion']
56
- {
57
- completionProvider: {
58
- resolveProvider: true,
59
- triggerCharacters: ['.', ':', '@']
60
- }
61
- }
62
- end
63
-
64
- def static_code_action
65
- {
66
- codeActionProvider: true,
67
- codeActionKinds: ["quickfix"]
68
- }
69
- end
70
-
71
- def static_signature_help
72
- {
73
- signatureHelpProvider: {
74
- triggerCharacters: ['(', ',']
75
- }
76
- }
77
- end
78
-
79
- def static_on_type_formatting
80
- {
81
- documentOnTypeFormattingProvider: {
82
- firstTriggerCharacter: '{',
83
- moreTriggerCharacter: ['(']
84
- }
85
- }
86
- end
87
-
88
- def static_hover
89
- return {} unless host.options['hover']
90
- {
91
- hoverProvider: true
92
- }
93
- end
94
-
95
- def static_document_formatting
96
- return {} unless host.options['formatting']
97
- {
98
- documentFormattingProvider: true
99
- }
100
- end
101
-
102
- def static_document_symbols
103
- return {} unless host.options['symbols']
104
- {
105
- documentSymbolProvider: true
106
- }
107
- end
108
-
109
- def static_workspace_symbols
110
- {
111
- workspaceSymbolProvider: true
112
- }
113
- end
114
-
115
- def static_definitions
116
- return {} unless host.options['definitions']
117
- {
118
- definitionProvider: true
119
- }
120
- end
121
-
122
- def static_rename
123
- {
124
- renameProvider: {prepareProvider: true}
125
- }
126
- end
127
-
128
- def static_references
129
- return {} unless host.options['references']
130
- {
131
- referencesProvider: true
132
- }
133
- end
134
-
135
- def static_folding_range
136
- return {} unless host.options['folding']
137
- {
138
- foldingRangeProvider: true
139
- }
140
- end
141
-
142
- def static_highlights
143
- {
144
- documentHighlightProvider: true
145
- }
146
- end
147
-
148
- # @param section [String]
149
- # @param capability [String]
150
- # @return [Boolean]
151
- def dynamic_registration_for? section, capability
152
- result = (params['capabilities'] &&
153
- params['capabilities'][section] &&
154
- params['capabilities'][section][capability] &&
155
- params['capabilities'][section][capability]['dynamicRegistration'])
156
- host.allow_registration("#{section}/#{capability}") if result
157
- result
158
- end
159
- end
160
- end
161
- end
162
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ class Initialize < Base
7
+ def process
8
+ host.configure params['initializationOptions']
9
+ host.client_capabilities = params['capabilities']
10
+ if support_workspace_folders?
11
+ host.prepare_folders params['workspaceFolders']
12
+ elsif params['rootUri']
13
+ host.prepare UriHelpers.uri_to_file(params['rootUri'])
14
+ else
15
+ host.prepare params['rootPath']
16
+ end
17
+ result = {
18
+ capabilities: {
19
+ textDocumentSync: 2, # @todo What should this be?
20
+ workspace: {
21
+ workspaceFolders: {
22
+ supported: true,
23
+ changeNotifications: true
24
+ }
25
+ }
26
+ }
27
+ }
28
+ # FIXME: lsp default is utf-16, may have different position
29
+ result[:capabilities][:positionEncoding] = "utf-32" if params.dig("capabilities", "general", "positionEncodings")&.include?("utf-32")
30
+ result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
31
+ result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
32
+ # result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
33
+ result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
34
+ result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
35
+ result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
36
+ result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
37
+ result[:capabilities].merge! static_type_definitions unless dynamic_registration_for?('textDocument', 'typeDefinition')
38
+ result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
39
+ result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
40
+ result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
41
+ result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
42
+ result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
43
+ # @todo Temporarily disabled
44
+ # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
45
+ set_result result
46
+ end
47
+
48
+ private
49
+
50
+ # @todo '?' methods should type like RBS 'boolish' rather than a strict true or false
51
+ # @sg-ignore
52
+ def support_workspace_folders?
53
+ params['capabilities'] &&
54
+ params['capabilities']['workspace'] &&
55
+ params['capabilities']['workspace']['workspaceFolders'] &&
56
+ params['workspaceFolders']
57
+ end
58
+
59
+ # @return [Hash{Symbol => undefined}]
60
+ def static_completion
61
+ return {} unless host.options['completion']
62
+ {
63
+ completionProvider: {
64
+ resolveProvider: true,
65
+ triggerCharacters: ['.', ':', '@']
66
+ }
67
+ }
68
+ end
69
+
70
+ # @return [Hash{Symbol => BasicObject}]
71
+ def static_code_action
72
+ {
73
+ codeActionProvider: true,
74
+ codeActionKinds: ["quickfix"]
75
+ }
76
+ end
77
+
78
+ # @return [Hash{Symbol => BasicObject}]
79
+ def static_signature_help
80
+ {
81
+ signatureHelpProvider: {
82
+ triggerCharacters: ['(', ',']
83
+ }
84
+ }
85
+ end
86
+
87
+ # @return [Hash{Symbol => Hash{Symbol => String, Array<String>}}]
88
+ def static_on_type_formatting
89
+ {
90
+ documentOnTypeFormattingProvider: {
91
+ firstTriggerCharacter: '{',
92
+ moreTriggerCharacter: ['(']
93
+ }
94
+ }
95
+ end
96
+
97
+ # @return [Hash{Symbol => Boolean}]
98
+ def static_hover
99
+ return {} unless host.options['hover']
100
+ {
101
+ hoverProvider: true
102
+ }
103
+ end
104
+
105
+ # @return [Hash{Symbol => Boolean}]
106
+ def static_document_formatting
107
+ return {} unless host.options['formatting']
108
+ {
109
+ documentFormattingProvider: true
110
+ }
111
+ end
112
+
113
+ # @return [Hash{Symbol => Boolean}]
114
+ def static_document_symbols
115
+ return {} unless host.options['symbols']
116
+ {
117
+ documentSymbolProvider: true
118
+ }
119
+ end
120
+
121
+ # @return [Hash{Symbol => Boolean}]
122
+ def static_workspace_symbols
123
+ {
124
+ workspaceSymbolProvider: true
125
+ }
126
+ end
127
+
128
+ # @return [Hash{Symbol => Boolean}]
129
+ def static_definitions
130
+ return {} unless host.options['definitions']
131
+ {
132
+ definitionProvider: true
133
+ }
134
+ end
135
+
136
+ # @return [Hash{Symbol => Boolean}]
137
+ def static_type_definitions
138
+ return {} unless host.options['typeDefinitions']
139
+ {
140
+ typeDefinitionProvider: true
141
+ }
142
+ end
143
+
144
+ # @return [Hash{Symbol => Hash{Symbol => Boolean}}]
145
+ def static_rename
146
+ {
147
+ renameProvider: {prepareProvider: true}
148
+ }
149
+ end
150
+
151
+
152
+ # @return [Hash{Symbol => Boolean}]
153
+ def static_references
154
+ return {} unless host.options['references']
155
+ {
156
+ referencesProvider: true
157
+ }
158
+ end
159
+
160
+ # @return [Hash{Symbol => Boolean}]
161
+ def static_folding_range
162
+ return {} unless host.options['folding']
163
+ {
164
+ foldingRangeProvider: true
165
+ }
166
+ end
167
+
168
+ # @return [Hash{Symbol => Boolean}]
169
+ def static_highlights
170
+ {
171
+ documentHighlightProvider: true
172
+ }
173
+ end
174
+
175
+ # @param section [String]
176
+ # @param capability [String]
177
+ # @todo Need support for RBS' boolish "type", which doesn't
178
+ # enforce strict true/false-ness
179
+ # @sg-ignore
180
+ def dynamic_registration_for? section, capability
181
+ result = (params['capabilities'] &&
182
+ params['capabilities'][section] &&
183
+ params['capabilities'][section][capability] &&
184
+ params['capabilities'][section][capability]['dynamicRegistration'])
185
+ host.allow_registration("#{section}/#{capability}") if result
186
+ result
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end