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,201 +1,212 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Parameter < LocalVariable
6
- # @return [Symbol]
7
- attr_reader :decl
8
-
9
- # @return [String]
10
- attr_reader :asgn_code
11
-
12
- def initialize decl: :arg, asgn_code: nil, **splat
13
- super(**splat)
14
- @asgn_code = asgn_code
15
- @decl = decl
16
- end
17
-
18
- def keyword?
19
- [:kwarg, :kwoptarg].include?(decl)
20
- end
21
-
22
- def kwrestarg?
23
- decl == :kwrestarg || (assignment && [:HASH, :hash].include?(assignment.type))
24
- end
25
-
26
- def restarg?
27
- decl == :restarg
28
- end
29
-
30
- def rest?
31
- decl == :restarg || decl == :kwrestarg
32
- end
33
-
34
- def full
35
- case decl
36
- when :optarg
37
- "#{name} = #{asgn_code}"
38
- when :kwarg
39
- "#{name}:"
40
- when :kwoptarg
41
- "#{name}: #{asgn_code}"
42
- when :restarg
43
- "*#{name}"
44
- when :kwrestarg
45
- "**#{name}"
46
- when :block, :blockarg
47
- "&#{name}"
48
- else
49
- name
50
- end
51
- end
52
-
53
- def return_type
54
- if @return_type.nil?
55
- @return_type = ComplexType::UNDEFINED
56
- found = param_tag
57
- @return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
58
- if @return_type.undefined?
59
- if decl == :restarg
60
- @return_type = ComplexType.try_parse('Array')
61
- elsif decl == :kwrestarg
62
- @return_type = ComplexType.try_parse('Hash')
63
- elsif decl == :blockarg
64
- @return_type = ComplexType.try_parse('Proc')
65
- end
66
- end
67
- end
68
- super
69
- @return_type
70
- end
71
-
72
- # The parameter's zero-based location in the block's signature.
73
- #
74
- # @return [Integer]
75
- def index
76
- closure.parameter_names.index(name)
77
- end
78
-
79
- # @param api_map [ApiMap]
80
- def typify api_map
81
- return return_type.qualify(api_map, closure.context.namespace) unless return_type.undefined?
82
- closure.is_a?(Pin::Block) ? typify_block_param(api_map) : typify_method_param(api_map)
83
- end
84
-
85
- def documentation
86
- tag = param_tag
87
- return '' if tag.nil? || tag.text.nil?
88
- tag.text
89
- end
90
-
91
- def try_merge! pin
92
- return false unless super && closure == pin.closure
93
- true
94
- end
95
-
96
- private
97
-
98
- # @return [YARD::Tags::Tag]
99
- def param_tag
100
- found = nil
101
- params = closure.docstring.tags(:param)
102
- params.each do |p|
103
- next unless p.name == name
104
- found = p
105
- break
106
- end
107
- if found.nil? and !index.nil?
108
- found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
109
- end
110
- found
111
- end
112
-
113
- # @param api_map [ApiMap]
114
- # @return [ComplexType]
115
- def typify_block_param api_map
116
- if closure.is_a?(Pin::Block) && closure.receiver
117
- chain = Parser.chain(closure.receiver, filename)
118
- clip = api_map.clip_at(location.filename, location.range.start)
119
- locals = clip.locals - [self]
120
- meths = chain.define(api_map, closure, locals)
121
- meths.each do |meth|
122
- if meth.docstring.has_tag?(:yieldparam_single_parameter)
123
- type = chain.base.infer(api_map, closure, locals)
124
- if type.defined? && !type.subtypes.empty?
125
- bmeth = chain.base.define(api_map, closure, locals).first
126
- return type.subtypes.first.qualify(api_map, bmeth.context.namespace)
127
- end
128
- else
129
- yps = meth.docstring.tags(:yieldparam)
130
- unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
131
- return ComplexType.try_parse(yps[index].types.first).self_to(chain.base.infer(api_map, closure, locals).namespace).qualify(api_map, meth.context.namespace)
132
- end
133
- end
134
- end
135
- end
136
- ComplexType::UNDEFINED
137
- end
138
-
139
- # @param api_map [ApiMap]
140
- # @return [ComplexType]
141
- def typify_method_param api_map
142
- meths = api_map.get_method_stack(closure.full_context.namespace, closure.name, scope: closure.scope)
143
- # meths.shift # Ignore the first one
144
- meths.each do |meth|
145
- found = nil
146
- params = meth.docstring.tags(:param) + see_reference(docstring, api_map)
147
- params.each do |p|
148
- next unless p.name == name
149
- found = p
150
- break
151
- end
152
- if found.nil? and !index.nil?
153
- found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
154
- end
155
- return ComplexType.try_parse(*found.types).qualify(api_map, meth.context.namespace) unless found.nil? || found.types.nil?
156
- end
157
- ComplexType::UNDEFINED
158
- end
159
-
160
- # @param heredoc [YARD::Docstring]
161
- # @param api_map [ApiMap]
162
- # @param skip [Array]
163
- # @return [Array<YARD::Tags::Tag>]
164
- def see_reference heredoc, api_map, skip = []
165
- heredoc.ref_tags.each do |ref|
166
- next unless ref.tag_name == 'param' && ref.owner
167
- result = resolve_reference(ref.owner.to_s, api_map, skip)
168
- return result unless result.nil?
169
- end
170
- []
171
- end
172
-
173
- # @param ref [String]
174
- # @param api_map [ApiMap]
175
- # @param skip [Array]
176
- # @return [Array<YARD::Tags::Tag>, nil]
177
- def resolve_reference ref, api_map, skip
178
- return nil if skip.include?(ref)
179
- skip.push ref
180
- parts = ref.split(/[\.#]/)
181
- if parts.first.empty?
182
- path = "#{namespace}#{ref}"
183
- else
184
- fqns = api_map.qualify(parts.first, namespace)
185
- return nil if fqns.nil?
186
- path = fqns + ref[parts.first.length] + parts.last
187
- end
188
- pins = api_map.get_path_pins(path)
189
- pins.each do |pin|
190
- params = pin.docstring.tags(:param)
191
- return params unless params.empty?
192
- end
193
- pins.each do |pin|
194
- params = see_reference(pin.docstring, api_map, skip)
195
- return params unless params.empty?
196
- end
197
- nil
198
- end
199
- end
200
- end
201
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Parameter < LocalVariable
6
+ # @return [::Symbol]
7
+ attr_reader :decl
8
+
9
+ # @return [String]
10
+ attr_reader :asgn_code
11
+
12
+ # @param decl [::Symbol] :arg, :optarg, :kwarg, :kwoptarg, :restarg, :kwrestarg, :block, :blockarg
13
+ # @param asgn_code [String, nil]
14
+ # @param return_type [ComplexType, nil]
15
+ def initialize decl: :arg, asgn_code: nil, return_type: nil, **splat
16
+ super(**splat)
17
+ @asgn_code = asgn_code
18
+ @decl = decl
19
+ @return_type = return_type
20
+ end
21
+
22
+ def keyword?
23
+ [:kwarg, :kwoptarg].include?(decl)
24
+ end
25
+
26
+ def kwrestarg?
27
+ decl == :kwrestarg || (assignment && [:HASH, :hash].include?(assignment.type))
28
+ end
29
+
30
+ def arg?
31
+ decl == :arg
32
+ end
33
+
34
+ def restarg?
35
+ decl == :restarg
36
+ end
37
+
38
+ def rest?
39
+ decl == :restarg || decl == :kwrestarg
40
+ end
41
+
42
+ def block?
43
+ [:block, :blockarg].include?(decl)
44
+ end
45
+
46
+ def to_rbs
47
+ case decl
48
+ when :optarg
49
+ "?#{super}"
50
+ when :kwarg
51
+ "#{name}: #{return_type.to_rbs}"
52
+ when :kwoptarg
53
+ "?#{name}: #{return_type.to_rbs}"
54
+ when :restarg
55
+ "*#{super}"
56
+ when :kwrestarg
57
+ "**#{super}"
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+ # @return [String]
64
+ def full
65
+ case decl
66
+ when :optarg
67
+ "#{name} = #{asgn_code || '?'}"
68
+ when :kwarg
69
+ "#{name}:"
70
+ when :kwoptarg
71
+ "#{name}: #{asgn_code || '?'}"
72
+ when :restarg
73
+ "*#{name}"
74
+ when :kwrestarg
75
+ "**#{name}"
76
+ when :block, :blockarg
77
+ "&#{name}"
78
+ else
79
+ name
80
+ end
81
+ end
82
+
83
+ # @return [ComplexType]
84
+ def return_type
85
+ if @return_type.nil?
86
+ @return_type = ComplexType::UNDEFINED
87
+ found = param_tag
88
+ @return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
89
+ if @return_type.undefined?
90
+ if decl == :restarg
91
+ @return_type = ComplexType.try_parse('::Array')
92
+ elsif decl == :kwrestarg
93
+ @return_type = ComplexType.try_parse('::Hash')
94
+ elsif decl == :blockarg
95
+ @return_type = ComplexType.try_parse('::Proc')
96
+ end
97
+ end
98
+ end
99
+ super
100
+ @return_type
101
+ end
102
+
103
+ # The parameter's zero-based location in the block's signature.
104
+ #
105
+ # @return [Integer]
106
+ def index
107
+ # @type [Method, Block]
108
+ method_pin = closure
109
+ method_pin.parameter_names.index(name)
110
+ end
111
+
112
+ # @param api_map [ApiMap]
113
+ def typify api_map
114
+ return return_type.qualify(api_map, closure.context.namespace) unless return_type.undefined?
115
+ closure.is_a?(Pin::Block) ? typify_block_param(api_map) : typify_method_param(api_map)
116
+ end
117
+
118
+ def documentation
119
+ tag = param_tag
120
+ return '' if tag.nil? || tag.text.nil?
121
+ tag.text
122
+ end
123
+
124
+ # @param pin [Pin::Parameter]
125
+ def try_merge! pin
126
+ return false unless super && closure == pin.closure
127
+ true
128
+ end
129
+
130
+ private
131
+
132
+ # @return [YARD::Tags::Tag, nil]
133
+ def param_tag
134
+ params = closure.docstring.tags(:param)
135
+ params.each do |p|
136
+ return p if p.name == name
137
+ end
138
+ params[index] if index && params[index] && (params[index].name.nil? || params[index].name.empty?)
139
+ end
140
+
141
+ # @param api_map [ApiMap]
142
+ # @return [ComplexType]
143
+ def typify_block_param api_map
144
+ if closure.is_a?(Pin::Block) && closure.receiver
145
+ return closure.typify_parameters(api_map)[index]
146
+ end
147
+ ComplexType::UNDEFINED
148
+ end
149
+
150
+ # @param api_map [ApiMap]
151
+ # @return [ComplexType]
152
+ def typify_method_param api_map
153
+ meths = api_map.get_method_stack(closure.full_context.tag, closure.name, scope: closure.scope)
154
+ # meths.shift # Ignore the first one
155
+ meths.each do |meth|
156
+ found = nil
157
+ params = meth.docstring.tags(:param) + see_reference(docstring, api_map)
158
+ params.each do |p|
159
+ next unless p.name == name
160
+ found = p
161
+ break
162
+ end
163
+ if found.nil? and !index.nil?
164
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
165
+ end
166
+ return ComplexType.try_parse(*found.types).qualify(api_map, meth.context.namespace) unless found.nil? || found.types.nil?
167
+ end
168
+ ComplexType::UNDEFINED
169
+ end
170
+
171
+ # @param heredoc [YARD::Docstring]
172
+ # @param api_map [ApiMap]
173
+ # @param skip [::Array]
174
+ # @return [::Array<YARD::Tags::Tag>]
175
+ def see_reference heredoc, api_map, skip = []
176
+ heredoc.ref_tags.each do |ref|
177
+ next unless ref.tag_name == 'param' && ref.owner
178
+ result = resolve_reference(ref.owner.to_s, api_map, skip)
179
+ return result unless result.nil?
180
+ end
181
+ []
182
+ end
183
+
184
+ # @param ref [String]
185
+ # @param api_map [ApiMap]
186
+ # @param skip [::Array]
187
+ # @return [::Array<YARD::Tags::Tag>, nil]
188
+ def resolve_reference ref, api_map, skip
189
+ return nil if skip.include?(ref)
190
+ skip.push ref
191
+ parts = ref.split(/[\.#]/)
192
+ if parts.first.empty?
193
+ path = "#{namespace}#{ref}"
194
+ else
195
+ fqns = api_map.qualify(parts.first, namespace)
196
+ return nil if fqns.nil?
197
+ path = fqns + ref[parts.first.length] + parts.last
198
+ end
199
+ pins = api_map.get_path_pins(path)
200
+ pins.each do |pin|
201
+ params = pin.docstring.tags(:param)
202
+ return params unless params.empty?
203
+ end
204
+ pins.each do |pin|
205
+ params = see_reference(pin.docstring, api_map, skip)
206
+ return params unless params.empty?
207
+ end
208
+ nil
209
+ end
210
+ end
211
+ end
212
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class ProxyType < Base
6
- # @param return_type [ComplexType]
7
- def initialize return_type: ComplexType::UNDEFINED, **splat
8
- super(**splat)
9
- @return_type = return_type
10
- end
11
-
12
- def context
13
- @return_type
14
- end
15
-
16
- # @param return_type [ComplexType]
17
- # @return [ProxyType]
18
- def self.anonymous return_type
19
- parts = return_type.namespace.split('::')
20
- namespace = parts[0..-2].join('::').to_s
21
- name = parts.last.to_s
22
- # ProxyType.new(nil, namespace, name, return_type)
23
- ProxyType.new(
24
- closure: Solargraph::Pin::Namespace.new(name: namespace), return_type: return_type
25
- )
26
- end
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class ProxyType < Base
6
+ # @param return_type [ComplexType]
7
+ def initialize return_type: ComplexType::UNDEFINED, **splat
8
+ super(**splat)
9
+ @return_type = return_type
10
+ end
11
+
12
+ def context
13
+ @return_type
14
+ end
15
+
16
+ # @param return_type [ComplexType]
17
+ # @return [ProxyType]
18
+ def self.anonymous return_type
19
+ parts = return_type.namespace.split('::')
20
+ namespace = parts[0..-2].join('::').to_s
21
+ # name = parts.last.to_s
22
+ # ProxyType.new(nil, namespace, name, return_type)
23
+ ProxyType.new(
24
+ closure: Solargraph::Pin::Namespace.new(name: namespace), return_type: return_type
25
+ )
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,10 +1,10 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Extend < Reference
7
- end
8
- end
9
- end
10
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Extend < Reference
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,10 +1,10 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Include < Reference
7
- end
8
- end
9
- end
10
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Include < Reference
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Override < Reference
7
- # @return [Array<YARD::Tags::Tag>]
8
- attr_reader :tags
9
-
10
- # @return [Array<Symbol>]
11
- attr_reader :delete
12
-
13
- def initialize location, name, tags, delete = []
14
- super(location: location, name: name)
15
- @tags = tags
16
- @delete = delete
17
- end
18
-
19
- def self.method_return name, *tags, delete: []
20
- new(nil, name, [YARD::Tags::Tag.new('return', nil, tags)], delete)
21
- end
22
-
23
- def self.from_comment name, comment
24
- new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags)
25
- end
26
- end
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Override < Reference
7
+ # @return [::Array<YARD::Tags::Tag>]
8
+ attr_reader :tags
9
+
10
+ # @return [::Array<Symbol>]
11
+ attr_reader :delete
12
+
13
+ def initialize location, name, tags, delete = []
14
+ super(location: location, name: name)
15
+ @tags = tags
16
+ @delete = delete
17
+ end
18
+
19
+ def self.method_return name, *tags, delete: []
20
+ new(nil, name, [YARD::Tags::Tag.new('return', nil, tags)], delete)
21
+ end
22
+
23
+ def self.from_comment name, comment
24
+ new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,10 +1,10 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Prepend < Reference
7
- end
8
- end
9
- end
10
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Prepend < Reference
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,14 +1,14 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Require < Reference
7
- def initialize location, name
8
- # super(location, '', name)
9
- super(location: location, name: name)
10
- end
11
- end
12
- end
13
- end
14
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Require < Reference
7
+ def initialize location, name
8
+ # super(location, '', name)
9
+ super(location: location, name: name)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,10 +1,10 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Superclass < Reference
7
- end
8
- end
9
- end
10
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Superclass < Reference
7
+ end
8
+ end
9
+ end
10
+ end