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,55 +1,55 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # The Diagnostics library provides reporters for analyzing problems in code
5
- # and providing the results to language server clients.
6
- #
7
- module Diagnostics
8
- autoload :Base, 'solargraph/diagnostics/base'
9
- autoload :Severities, 'solargraph/diagnostics/severities'
10
- autoload :Rubocop, 'solargraph/diagnostics/rubocop'
11
- autoload :RubocopHelpers, 'solargraph/diagnostics/rubocop_helpers'
12
- autoload :RequireNotFound, 'solargraph/diagnostics/require_not_found'
13
- autoload :UpdateErrors, 'solargraph/diagnostics/update_errors'
14
- autoload :TypeCheck, 'solargraph/diagnostics/type_check'
15
-
16
- class << self
17
- # Add a reporter with a name to identify it in .solargraph.yml files.
18
- #
19
- # @param name [String] The name
20
- # @param klass [Class<Solargraph::Diagnostics::Base>] The class implementation
21
- # @return [void]
22
- def register name, klass
23
- reporter_hash[name] = klass
24
- end
25
-
26
- # Get an array of reporter names.
27
- #
28
- # @return [Array<String>]
29
- def reporters
30
- reporter_hash.keys - ['type_not_defined'] # @todo Hide type_not_defined for now
31
- end
32
-
33
- # Find a reporter by name.
34
- #
35
- # @param name [String] The name with which the reporter was registered
36
- # @return [Class<Solargraph::Diagnostics::Base>]
37
- def reporter name
38
- reporter_hash[name]
39
- end
40
-
41
- private
42
-
43
- # @return [Hash]
44
- def reporter_hash
45
- @reporter_hash ||= {}
46
- end
47
- end
48
-
49
- register 'rubocop', Rubocop
50
- register 'require_not_found', RequireNotFound
51
- register 'typecheck', TypeCheck
52
- register 'update_errors', UpdateErrors
53
- register 'type_not_defined', TypeCheck # @todo Retained for backwards compatibility
54
- end
55
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # The Diagnostics library provides reporters for analyzing problems in code
5
+ # and providing the results to language server clients.
6
+ #
7
+ module Diagnostics
8
+ autoload :Base, 'solargraph/diagnostics/base'
9
+ autoload :Severities, 'solargraph/diagnostics/severities'
10
+ autoload :Rubocop, 'solargraph/diagnostics/rubocop'
11
+ autoload :RubocopHelpers, 'solargraph/diagnostics/rubocop_helpers'
12
+ autoload :RequireNotFound, 'solargraph/diagnostics/require_not_found'
13
+ autoload :UpdateErrors, 'solargraph/diagnostics/update_errors'
14
+ autoload :TypeCheck, 'solargraph/diagnostics/type_check'
15
+
16
+ class << self
17
+ # Add a reporter with a name to identify it in .solargraph.yml files.
18
+ #
19
+ # @param name [String] The name
20
+ # @param klass [Class<Solargraph::Diagnostics::Base>] The class implementation
21
+ # @return [void]
22
+ def register name, klass
23
+ reporter_hash[name] = klass
24
+ end
25
+
26
+ # Get an array of reporter names.
27
+ #
28
+ # @return [Array<String>]
29
+ def reporters
30
+ reporter_hash.keys - ['type_not_defined'] # @todo Hide type_not_defined for now
31
+ end
32
+
33
+ # Find a reporter by name.
34
+ #
35
+ # @param name [String] The name with which the reporter was registered
36
+ # @return [Class<Solargraph::Diagnostics::Base>, nil]
37
+ def reporter name
38
+ reporter_hash[name]
39
+ end
40
+
41
+ private
42
+
43
+ # @return [Hash{String => Class<Solargraph::Diagnostics::Base>}]
44
+ def reporter_hash
45
+ @reporter_hash ||= {}
46
+ end
47
+ end
48
+
49
+ register 'rubocop', Rubocop
50
+ register 'require_not_found', RequireNotFound
51
+ register 'typecheck', TypeCheck
52
+ register 'update_errors', UpdateErrors
53
+ register 'type_not_defined', TypeCheck # @todo Retained for backwards compatibility
54
+ end
55
+ end
@@ -0,0 +1,188 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # A collection of pins generated from required gems.
5
+ #
6
+ class DocMap
7
+ # @return [Array<String>]
8
+ attr_reader :requires
9
+
10
+ # @return [Array<Gem::Specification>]
11
+ attr_reader :preferences
12
+
13
+ # @return [Array<Pin::Base>]
14
+ attr_reader :pins
15
+
16
+ # @return [Array<Gem::Specification>]
17
+ attr_reader :uncached_gemspecs
18
+
19
+ # @param requires [Array<String>]
20
+ # @param preferences [Array<Gem::Specification>]
21
+ # @param rbs_path [String, Pathname, nil]
22
+ def initialize(requires, preferences, rbs_path = nil)
23
+ @requires = requires.compact
24
+ @preferences = preferences.compact
25
+ @rbs_path = rbs_path
26
+ generate
27
+ end
28
+
29
+ # @return [Array<Gem::Specification>]
30
+ def gemspecs
31
+ @gemspecs ||= required_gem_map.values.compact
32
+ end
33
+
34
+ # @return [Array<String>]
35
+ def unresolved_requires
36
+ @unresolved_requires ||= required_gem_map.select { |_, gemspec| gemspec.nil? }.keys
37
+ end
38
+
39
+ # @return [Hash{Gem::Specification => Array[Pin::Base]}]
40
+ def self.gems_in_memory
41
+ @gems_in_memory ||= {}
42
+ end
43
+
44
+ # @return [Set<Gem::Specification>]
45
+ def dependencies
46
+ @dependencies ||= (gemspecs.flat_map { |spec| fetch_dependencies(spec) } - gemspecs).to_set
47
+ end
48
+
49
+ private
50
+
51
+ # @return [void]
52
+ def generate
53
+ @pins = []
54
+ @uncached_gemspecs = []
55
+ required_gem_map.each do |path, gemspec|
56
+ if gemspec
57
+ try_cache gemspec
58
+ else
59
+ try_stdlib_map path
60
+ end
61
+ end
62
+ dependencies.each { |dep| try_cache dep }
63
+ @uncached_gemspecs.uniq!
64
+ end
65
+
66
+ # @return [Hash{String => Gem::Specification, nil}]
67
+ def required_gem_map
68
+ @required_gem_map ||= requires.to_h { |path| [path, resolve_path_to_gemspec(path)] }
69
+ end
70
+
71
+ # @return [Hash{String => Gem::Specification}]
72
+ def preference_map
73
+ @preference_map ||= preferences.to_h { |gemspec| [gemspec.name, gemspec] }
74
+ end
75
+
76
+ # @param gemspec [Gem::Specification]
77
+ # @return [void]
78
+ def try_cache gemspec
79
+ return if try_gem_in_memory(gemspec)
80
+ cache_file = File.join('gems', "#{gemspec.name}-#{gemspec.version}.ser")
81
+ if Cache.exist?(cache_file)
82
+ cached = Cache.load(cache_file)
83
+ gempins = update_from_collection(gemspec, cached)
84
+ self.class.gems_in_memory[gemspec] = gempins
85
+ @pins.concat gempins
86
+ else
87
+ Solargraph.logger.debug "No pin cache for #{gemspec.name} #{gemspec.version}"
88
+ @uncached_gemspecs.push gemspec
89
+ end
90
+ end
91
+
92
+ # @param path [String] require path that might be in the RBS stdlib collection
93
+ # @return [void]
94
+ def try_stdlib_map path
95
+ map = RbsMap::StdlibMap.load(path)
96
+ if map.resolved?
97
+ Solargraph.logger.debug "Loading stdlib pins for #{path}"
98
+ @pins.concat map.pins
99
+ else
100
+ # @todo Temporarily ignoring unresolved `require 'set'`
101
+ Solargraph.logger.debug "Require path #{path} could not be resolved" unless path == 'set'
102
+ end
103
+ end
104
+
105
+ # @param gemspec [Gem::Specification]
106
+ # @return [Boolean]
107
+ def try_gem_in_memory gemspec
108
+ gempins = DocMap.gems_in_memory[gemspec]
109
+ return false unless gempins
110
+ Solargraph.logger.debug "Found #{gemspec.name} #{gemspec.version} in memory"
111
+ @pins.concat gempins
112
+ true
113
+ end
114
+
115
+ # @param gemspec [Gem::Specification]
116
+ def update_from_collection gemspec, gempins
117
+ return gempins unless @rbs_path && File.directory?(@rbs_path)
118
+ return gempins if RbsMap.new(gemspec.name, gemspec.version).resolved?
119
+
120
+ rbs_map = RbsMap.new(gemspec.name, gemspec.version, directories: [@rbs_path])
121
+ return gempins unless rbs_map.resolved?
122
+
123
+ Solargraph.logger.info "Updating #{gemspec.name} #{gemspec.version} from collection"
124
+ GemPins.combine(gempins, rbs_map)
125
+ end
126
+
127
+ # @param path [String]
128
+ # @return [Gem::Specification, nil]
129
+ def resolve_path_to_gemspec path
130
+ return nil if path.empty?
131
+
132
+ gemspec = Gem::Specification.find_by_path(path)
133
+ if gemspec.nil?
134
+ gem_name_guess = path.split('/').first
135
+ begin
136
+ # this can happen when the gem is included via a local path in
137
+ # a Gemfile; Gem doesn't try to index the paths in that case.
138
+ #
139
+ # See if we can make a good guess:
140
+ potential_gemspec = Gem::Specification.find_by_name(gem_name_guess)
141
+ file = "lib/#{path}.rb"
142
+ gemspec = potential_gemspec if potential_gemspec.files.any? { |gemspec_file| file == gemspec_file }
143
+ rescue Gem::MissingSpecError
144
+ Solargraph.logger.debug "Require path #{path} could not be resolved to a gem via find_by_path or guess of #{gem_name_guess}"
145
+ nil
146
+ end
147
+ end
148
+ gemspec_or_preference gemspec
149
+ end
150
+
151
+ # @param gemspec [Gem::Specification, nil]
152
+ # @return [Gem::Specification, nil]
153
+ def gemspec_or_preference gemspec
154
+ return gemspec unless gemspec && preference_map.key?(gemspec.name)
155
+ return gemspec if gemspec.version == preference_map[gemspec.name].version
156
+
157
+ change_gemspec_version gemspec, preference_map[by_path.name].version
158
+ end
159
+
160
+ # @param gemspec [Gem::Specification]
161
+ # @param version [Gem::Version]
162
+ # @return [Gem::Specification]
163
+ def change_gemspec_version gemspec, version
164
+ Gem::Specification.find_by_name(gemspec.name, "= #{version}")
165
+ rescue Gem::MissingSpecError
166
+ Solargraph.logger.info "Gem #{gemspec.name} version #{version} not found. Using #{gemspec.version} instead"
167
+ gemspec
168
+ end
169
+
170
+ # @param gemspec [Gem::Specification]
171
+ # @return [Array<Gem::Specification>]
172
+ def fetch_dependencies gemspec
173
+ only_runtime_dependencies(gemspec).each_with_object(Set.new) do |spec, deps|
174
+ Solargraph.logger.info "Adding #{spec.name} dependency for #{gemspec.name}"
175
+ dep = Gem::Specification.find_by_name(spec.name, spec.requirement)
176
+ deps.merge fetch_dependencies(dep) if deps.add?(dep)
177
+ rescue Gem::MissingSpecError
178
+ Solargraph.logger.warn "Gem dependency #{spec.name} #{spec.requirements} for #{gemspec.name} not found."
179
+ end.to_a
180
+ end
181
+
182
+ # @param gemspec [Gem::Specification]
183
+ # @return [Array<Gem::Dependency>]
184
+ def only_runtime_dependencies gemspec
185
+ gemspec.dependencies - gemspec.development_dependencies
186
+ end
187
+ end
188
+ end
@@ -1,45 +1,45 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # A collection of additional data, such as map pins and required paths, that
5
- # can be added to an ApiMap.
6
- #
7
- # Conventions are used to add Environs.
8
- #
9
- class Environ
10
- # @return [Array<String>]
11
- attr_reader :requires
12
-
13
- # @return [Array<String>]
14
- attr_reader :domains
15
-
16
- # @return [Array<Pin::Reference::Override>]
17
- attr_reader :pins
18
-
19
- # @param requires [Array<String>]
20
- # @param domains [Array<String>]
21
- # @param pins [Array<Pin::Base>]
22
- def initialize requires: [], domains: [], pins: []
23
- @requires = requires
24
- @domains = domains
25
- @pins = pins
26
- end
27
-
28
- # @return [self]
29
- def clear
30
- domains.clear
31
- requires.clear
32
- pins.clear
33
- self
34
- end
35
-
36
- # @param other [Environ]
37
- # @return [self]
38
- def merge other
39
- domains.concat other.domains
40
- requires.concat other.requires
41
- pins.concat other.pins
42
- self
43
- end
44
- end
45
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # A collection of additional data, such as map pins and required paths, that
5
+ # can be added to an ApiMap.
6
+ #
7
+ # Conventions are used to add Environs.
8
+ #
9
+ class Environ
10
+ # @return [Array<String>]
11
+ attr_reader :requires
12
+
13
+ # @return [Array<String>]
14
+ attr_reader :domains
15
+
16
+ # @return [Array<Pin::Reference::Override>]
17
+ attr_reader :pins
18
+
19
+ # @param requires [Array<String>]
20
+ # @param domains [Array<String>]
21
+ # @param pins [Array<Pin::Base>]
22
+ def initialize requires: [], domains: [], pins: []
23
+ @requires = requires
24
+ @domains = domains
25
+ @pins = pins
26
+ end
27
+
28
+ # @return [self]
29
+ def clear
30
+ domains.clear
31
+ requires.clear
32
+ pins.clear
33
+ self
34
+ end
35
+
36
+ # @param other [Environ]
37
+ # @return [self]
38
+ def merge other
39
+ domains.concat other.domains
40
+ requires.concat other.requires
41
+ pins.concat other.pins
42
+ self
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # @abstract This mixin relies on these -
5
+ # methods:
6
+ # equality_fields()
7
+ module Equality
8
+ # @!method equality_fields
9
+ # @return [Array]
10
+
11
+ # @param other [Object]
12
+ # @return [Boolean]
13
+ def eql?(other)
14
+ self.class.eql?(other.class) &&
15
+ equality_fields.eql?(other.equality_fields)
16
+ end
17
+
18
+ # @param other [Object]
19
+ # @return [Boolean]
20
+ def ==(other)
21
+ self.eql?(other)
22
+ end
23
+
24
+ def hash
25
+ equality_fields.hash
26
+ end
27
+
28
+ def freeze
29
+ equality_fields.each(&:freeze)
30
+ super
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rbs'
4
+
5
+ module Solargraph
6
+ # A utility for building gem pins from a combination of YARD and RBS
7
+ # documentation.
8
+ #
9
+ module GemPins
10
+ # Build an array of pins from a gem specification. The process starts with
11
+ # YARD, enhances the resulting pins with RBS definitions, and appends RBS
12
+ # pins that don't exist in the YARD mapping.
13
+ #
14
+ # @param gemspec [Gem::Specification]
15
+ # @return [Array<Pin::Base>]
16
+ def self.build(gemspec)
17
+ yard_pins = build_yard_pins(gemspec)
18
+ rbs_map = RbsMap.from_gemspec(gemspec)
19
+ combine yard_pins, rbs_map
20
+ end
21
+
22
+ # @param yard_pins [Array<Pin::Base>]
23
+ # @param rbs_map [RbsMap]
24
+ # @return [Array<Pin::Base>]
25
+ def self.combine(yard_pins, rbs_map)
26
+ in_yard = Set.new
27
+ combined = yard_pins.map do |yard|
28
+ in_yard.add yard.path
29
+ next yard unless yard.is_a?(Pin::Method)
30
+
31
+ rbs = rbs_map.path_pin(yard.path, Pin::Method)
32
+ next yard unless rbs
33
+
34
+ # @sg-ignore
35
+ yard.class.new(
36
+ location: yard.location,
37
+ closure: yard.closure,
38
+ name: yard.name,
39
+ comments: yard.comments,
40
+ scope: yard.scope,
41
+ parameters: rbs.parameters,
42
+ generics: rbs.generics,
43
+ node: yard.node,
44
+ signatures: yard.signatures,
45
+ return_type: best_return_type(rbs.return_type, yard.return_type)
46
+ )
47
+ end
48
+ in_rbs = rbs_map.pins.reject { |pin| in_yard.include?(pin.path) }
49
+ combined + in_rbs
50
+ end
51
+
52
+ class << self
53
+ private
54
+
55
+ # @param gemspec [Gem::Specification]
56
+ # @return [Array<Pin::Base>]
57
+ def build_yard_pins(gemspec)
58
+ Yardoc.cache(gemspec) unless Yardoc.cached?(gemspec)
59
+ yardoc = Yardoc.load!(gemspec)
60
+ YardMap::Mapper.new(yardoc, gemspec).map
61
+ end
62
+
63
+ # Select the first defined type.
64
+ #
65
+ # @param choices [Array<ComplexType>]
66
+ # @return [ComplexType]
67
+ def best_return_type *choices
68
+ choices.find { |pin| pin.defined? } || choices.first || ComplexType::UNDEFINED
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,35 +1,35 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The CompletionItemKind constants for the language server protocol.
6
- #
7
- module CompletionItemKinds
8
- TEXT = 1
9
- METHOD = 2
10
- FUNCTION = 3
11
- CONSTRUCTOR = 4
12
- FIELD = 5
13
- VARIABLE = 6
14
- CLASS = 7
15
- INTERFACE = 8
16
- MODULE = 9
17
- PROPERTY = 10
18
- UNIT = 11
19
- VALUE = 12
20
- ENUM = 13
21
- KEYWORD = 14
22
- SNIPPET = 15
23
- COLOR = 16
24
- FILE = 17
25
- REFERENCE = 18
26
- FOLDER = 19
27
- ENUM_MEMBER = 20
28
- CONSTANT = 21
29
- STRUCT = 22
30
- EVENT = 23
31
- OPERATOR = 24
32
- TYPE_PARAMETER = 25
33
- end
34
- end
35
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The CompletionItemKind constants for the language server protocol.
6
+ #
7
+ module CompletionItemKinds
8
+ TEXT = 1
9
+ METHOD = 2
10
+ FUNCTION = 3
11
+ CONSTRUCTOR = 4
12
+ FIELD = 5
13
+ VARIABLE = 6
14
+ CLASS = 7
15
+ INTERFACE = 8
16
+ MODULE = 9
17
+ PROPERTY = 10
18
+ UNIT = 11
19
+ VALUE = 12
20
+ ENUM = 13
21
+ KEYWORD = 14
22
+ SNIPPET = 15
23
+ COLOR = 16
24
+ FILE = 17
25
+ REFERENCE = 18
26
+ FOLDER = 19
27
+ ENUM_MEMBER = 20
28
+ CONSTANT = 21
29
+ STRUCT = 22
30
+ EVENT = 23
31
+ OPERATOR = 24
32
+ TYPE_PARAMETER = 25
33
+ end
34
+ end
35
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The ErrorCode constants for the language server protocol.
6
- #
7
- module ErrorCodes
8
- PARSE_ERROR = -32700
9
- INVALID_REQUEST = -32600
10
- METHOD_NOT_FOUND = -32601
11
- INVALID_PARAMS = -32602
12
- INTERNAL_ERROR = -32603
13
- SERVER_ERROR_START = -32099
14
- SERVER_ERROR_END = -32000
15
- SERVER_NOT_INITIALIZED = -32002
16
- UNKNOWN_ERROR_CODE = -32001
17
- REQUEST_CANCELLED = -32800
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The ErrorCode constants for the language server protocol.
6
+ #
7
+ module ErrorCodes
8
+ PARSE_ERROR = -32700
9
+ INVALID_REQUEST = -32600
10
+ METHOD_NOT_FOUND = -32601
11
+ INVALID_PARAMS = -32602
12
+ INTERNAL_ERROR = -32603
13
+ SERVER_ERROR_START = -32099
14
+ SERVER_ERROR_END = -32000
15
+ SERVER_NOT_INITIALIZED = -32002
16
+ UNKNOWN_ERROR_CODE = -32001
17
+ REQUEST_CANCELLED = -32800
18
+ end
19
+ end
20
+ end