jimeh-solargraph 0.40.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +54 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +24 -0
  6. data/.yardopts +2 -0
  7. data/CHANGELOG.md +1003 -0
  8. data/Gemfile +7 -0
  9. data/LICENSE +21 -0
  10. data/README.md +123 -0
  11. data/Rakefile +25 -0
  12. data/SPONSORS.md +15 -0
  13. data/bin/solargraph +5 -0
  14. data/jimeh-solargraph.gemspec +44 -0
  15. data/lib/.rubocop.yml +21 -0
  16. data/lib/solargraph.rb +67 -0
  17. data/lib/solargraph/api_map.rb +752 -0
  18. data/lib/solargraph/api_map/bundler_methods.rb +27 -0
  19. data/lib/solargraph/api_map/cache.rb +70 -0
  20. data/lib/solargraph/api_map/source_to_yard.rb +81 -0
  21. data/lib/solargraph/api_map/store.rb +256 -0
  22. data/lib/solargraph/bench.rb +30 -0
  23. data/lib/solargraph/compat.rb +23 -0
  24. data/lib/solargraph/complex_type.rb +213 -0
  25. data/lib/solargraph/complex_type/type_methods.rb +127 -0
  26. data/lib/solargraph/complex_type/unique_type.rb +75 -0
  27. data/lib/solargraph/convention.rb +47 -0
  28. data/lib/solargraph/convention/base.rb +33 -0
  29. data/lib/solargraph/convention/gemfile.rb +15 -0
  30. data/lib/solargraph/convention/gemspec.rb +22 -0
  31. data/lib/solargraph/convention/rspec.rb +21 -0
  32. data/lib/solargraph/converters/dd.rb +12 -0
  33. data/lib/solargraph/converters/dl.rb +12 -0
  34. data/lib/solargraph/converters/dt.rb +12 -0
  35. data/lib/solargraph/converters/misc.rb +1 -0
  36. data/lib/solargraph/diagnostics.rb +55 -0
  37. data/lib/solargraph/diagnostics/base.rb +29 -0
  38. data/lib/solargraph/diagnostics/require_not_found.rb +37 -0
  39. data/lib/solargraph/diagnostics/rubocop.rb +90 -0
  40. data/lib/solargraph/diagnostics/rubocop_helpers.rb +45 -0
  41. data/lib/solargraph/diagnostics/severities.rb +15 -0
  42. data/lib/solargraph/diagnostics/type_check.rb +54 -0
  43. data/lib/solargraph/diagnostics/update_errors.rb +41 -0
  44. data/lib/solargraph/documentor.rb +78 -0
  45. data/lib/solargraph/environ.rb +45 -0
  46. data/lib/solargraph/language_server.rb +19 -0
  47. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
  48. data/lib/solargraph/language_server/error_codes.rb +20 -0
  49. data/lib/solargraph/language_server/host.rb +746 -0
  50. data/lib/solargraph/language_server/host/cataloger.rb +56 -0
  51. data/lib/solargraph/language_server/host/diagnoser.rb +81 -0
  52. data/lib/solargraph/language_server/host/dispatch.rb +112 -0
  53. data/lib/solargraph/language_server/host/sources.rb +156 -0
  54. data/lib/solargraph/language_server/message.rb +92 -0
  55. data/lib/solargraph/language_server/message/base.rb +85 -0
  56. data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
  57. data/lib/solargraph/language_server/message/client.rb +11 -0
  58. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
  59. data/lib/solargraph/language_server/message/completion_item.rb +11 -0
  60. data/lib/solargraph/language_server/message/completion_item/resolve.rb +57 -0
  61. data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
  62. data/lib/solargraph/language_server/message/extended.rb +21 -0
  63. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
  64. data/lib/solargraph/language_server/message/extended/document.rb +20 -0
  65. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
  66. data/lib/solargraph/language_server/message/extended/download_core.rb +23 -0
  67. data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
  68. data/lib/solargraph/language_server/message/extended/search.rb +20 -0
  69. data/lib/solargraph/language_server/message/initialize.rb +153 -0
  70. data/lib/solargraph/language_server/message/initialized.rb +26 -0
  71. data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
  72. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
  73. data/lib/solargraph/language_server/message/shutdown.rb +13 -0
  74. data/lib/solargraph/language_server/message/text_document.rb +28 -0
  75. data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
  76. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
  77. data/lib/solargraph/language_server/message/text_document/completion.rb +57 -0
  78. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
  79. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
  80. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
  81. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
  82. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
  83. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
  84. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
  85. data/lib/solargraph/language_server/message/text_document/formatting.rb +105 -0
  86. data/lib/solargraph/language_server/message/text_document/hover.rb +44 -0
  87. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
  88. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
  89. data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
  90. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
  91. data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -0
  92. data/lib/solargraph/language_server/message/workspace.rb +14 -0
  93. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -0
  94. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -0
  95. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
  96. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
  97. data/lib/solargraph/language_server/message_types.rb +14 -0
  98. data/lib/solargraph/language_server/request.rb +24 -0
  99. data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
  100. data/lib/solargraph/language_server/transport.rb +13 -0
  101. data/lib/solargraph/language_server/transport/adapter.rb +56 -0
  102. data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
  103. data/lib/solargraph/language_server/uri_helpers.rb +49 -0
  104. data/lib/solargraph/library.rb +426 -0
  105. data/lib/solargraph/location.rb +37 -0
  106. data/lib/solargraph/logging.rb +27 -0
  107. data/lib/solargraph/page.rb +83 -0
  108. data/lib/solargraph/parser.rb +26 -0
  109. data/lib/solargraph/parser/comment_ripper.rb +52 -0
  110. data/lib/solargraph/parser/legacy.rb +12 -0
  111. data/lib/solargraph/parser/legacy/class_methods.rb +109 -0
  112. data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
  113. data/lib/solargraph/parser/legacy/node_chainer.rb +118 -0
  114. data/lib/solargraph/parser/legacy/node_methods.rb +311 -0
  115. data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
  116. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
  117. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
  118. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
  119. data/lib/solargraph/parser/legacy/node_processors/block_node.rb +22 -0
  120. data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -0
  121. data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
  122. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
  123. data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
  124. data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
  125. data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
  126. data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
  127. data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
  128. data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
  129. data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
  130. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -0
  131. data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
  132. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
  133. data/lib/solargraph/parser/node_methods.rb +43 -0
  134. data/lib/solargraph/parser/node_processor.rb +43 -0
  135. data/lib/solargraph/parser/node_processor/base.rb +80 -0
  136. data/lib/solargraph/parser/region.rb +66 -0
  137. data/lib/solargraph/parser/rubyvm.rb +40 -0
  138. data/lib/solargraph/parser/rubyvm/class_methods.rb +150 -0
  139. data/lib/solargraph/parser/rubyvm/node_chainer.rb +135 -0
  140. data/lib/solargraph/parser/rubyvm/node_methods.rb +301 -0
  141. data/lib/solargraph/parser/rubyvm/node_processors.rb +62 -0
  142. data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
  143. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +86 -0
  144. data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
  145. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +22 -0
  146. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -0
  147. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
  148. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +64 -0
  149. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -0
  150. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
  151. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
  152. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
  153. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
  154. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
  155. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
  156. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
  157. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
  158. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
  159. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -0
  160. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
  161. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -0
  162. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
  163. data/lib/solargraph/parser/snippet.rb +13 -0
  164. data/lib/solargraph/pin.rb +36 -0
  165. data/lib/solargraph/pin/base.rb +296 -0
  166. data/lib/solargraph/pin/base_variable.rb +84 -0
  167. data/lib/solargraph/pin/block.rb +62 -0
  168. data/lib/solargraph/pin/class_variable.rb +8 -0
  169. data/lib/solargraph/pin/closure.rb +37 -0
  170. data/lib/solargraph/pin/common.rb +70 -0
  171. data/lib/solargraph/pin/constant.rb +43 -0
  172. data/lib/solargraph/pin/conversions.rb +96 -0
  173. data/lib/solargraph/pin/documenting.rb +105 -0
  174. data/lib/solargraph/pin/duck_method.rb +16 -0
  175. data/lib/solargraph/pin/global_variable.rb +8 -0
  176. data/lib/solargraph/pin/instance_variable.rb +30 -0
  177. data/lib/solargraph/pin/keyword.rb +15 -0
  178. data/lib/solargraph/pin/keyword_param.rb +8 -0
  179. data/lib/solargraph/pin/local_variable.rb +21 -0
  180. data/lib/solargraph/pin/localized.rb +43 -0
  181. data/lib/solargraph/pin/method.rb +245 -0
  182. data/lib/solargraph/pin/method_alias.rb +31 -0
  183. data/lib/solargraph/pin/namespace.rb +85 -0
  184. data/lib/solargraph/pin/parameter.rb +206 -0
  185. data/lib/solargraph/pin/proxy_type.rb +29 -0
  186. data/lib/solargraph/pin/reference.rb +14 -0
  187. data/lib/solargraph/pin/reference/extend.rb +10 -0
  188. data/lib/solargraph/pin/reference/include.rb +10 -0
  189. data/lib/solargraph/pin/reference/override.rb +29 -0
  190. data/lib/solargraph/pin/reference/prepend.rb +10 -0
  191. data/lib/solargraph/pin/reference/require.rb +14 -0
  192. data/lib/solargraph/pin/reference/superclass.rb +10 -0
  193. data/lib/solargraph/pin/singleton.rb +11 -0
  194. data/lib/solargraph/pin/symbol.rb +47 -0
  195. data/lib/solargraph/position.rb +100 -0
  196. data/lib/solargraph/range.rb +95 -0
  197. data/lib/solargraph/server_methods.rb +16 -0
  198. data/lib/solargraph/shell.rb +222 -0
  199. data/lib/solargraph/source.rb +537 -0
  200. data/lib/solargraph/source/chain.rb +154 -0
  201. data/lib/solargraph/source/chain/block_variable.rb +13 -0
  202. data/lib/solargraph/source/chain/call.rb +203 -0
  203. data/lib/solargraph/source/chain/class_variable.rb +13 -0
  204. data/lib/solargraph/source/chain/constant.rb +75 -0
  205. data/lib/solargraph/source/chain/global_variable.rb +13 -0
  206. data/lib/solargraph/source/chain/head.rb +35 -0
  207. data/lib/solargraph/source/chain/instance_variable.rb +13 -0
  208. data/lib/solargraph/source/chain/link.rb +67 -0
  209. data/lib/solargraph/source/chain/literal.rb +23 -0
  210. data/lib/solargraph/source/chain/or.rb +23 -0
  211. data/lib/solargraph/source/chain/variable.rb +13 -0
  212. data/lib/solargraph/source/chain/z_super.rb +30 -0
  213. data/lib/solargraph/source/change.rb +79 -0
  214. data/lib/solargraph/source/cursor.rb +164 -0
  215. data/lib/solargraph/source/encoding_fixes.rb +23 -0
  216. data/lib/solargraph/source/source_chainer.rb +190 -0
  217. data/lib/solargraph/source/updater.rb +54 -0
  218. data/lib/solargraph/source_map.rb +188 -0
  219. data/lib/solargraph/source_map/clip.rb +224 -0
  220. data/lib/solargraph/source_map/completion.rb +23 -0
  221. data/lib/solargraph/source_map/mapper.rb +215 -0
  222. data/lib/solargraph/type_checker.rb +503 -0
  223. data/lib/solargraph/type_checker/checks.rb +99 -0
  224. data/lib/solargraph/type_checker/param_def.rb +35 -0
  225. data/lib/solargraph/type_checker/problem.rb +32 -0
  226. data/lib/solargraph/type_checker/rules.rb +57 -0
  227. data/lib/solargraph/version.rb +5 -0
  228. data/lib/solargraph/views/_method.erb +62 -0
  229. data/lib/solargraph/views/_name_type_tag.erb +10 -0
  230. data/lib/solargraph/views/_namespace.erb +24 -0
  231. data/lib/solargraph/views/document.erb +23 -0
  232. data/lib/solargraph/views/environment.erb +58 -0
  233. data/lib/solargraph/views/layout.erb +44 -0
  234. data/lib/solargraph/views/search.erb +11 -0
  235. data/lib/solargraph/workspace.rb +209 -0
  236. data/lib/solargraph/workspace/config.rb +230 -0
  237. data/lib/solargraph/yard_map.rb +435 -0
  238. data/lib/solargraph/yard_map/cache.rb +19 -0
  239. data/lib/solargraph/yard_map/core_docs.rb +170 -0
  240. data/lib/solargraph/yard_map/core_fills.rb +185 -0
  241. data/lib/solargraph/yard_map/core_gen.rb +76 -0
  242. data/lib/solargraph/yard_map/helpers.rb +16 -0
  243. data/lib/solargraph/yard_map/mapper.rb +77 -0
  244. data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
  245. data/lib/solargraph/yard_map/mapper/to_method.rb +78 -0
  246. data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
  247. data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -0
  248. data/lib/solargraph/yard_map/stdlib_fills.rb +43 -0
  249. data/lib/solargraph/yard_map/to_method.rb +79 -0
  250. data/lib/yard-solargraph.rb +30 -0
  251. data/yardoc/2.2.2.tar.gz +0 -0
  252. metadata +564 -0
@@ -0,0 +1,206 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Parameter < LocalVariable
6
+ attr_reader :decl
7
+
8
+ attr_reader :asgn_code
9
+
10
+ def initialize decl: :arg, asgn_code: nil, **splat
11
+ super(**splat)
12
+ @asgn_code = asgn_code
13
+ @decl = decl
14
+ end
15
+
16
+ def keyword?
17
+ [:kwarg, :kwoptarg].include?(decl)
18
+ end
19
+
20
+ def kwrestarg?
21
+ decl == :kwrestarg || (assignment && [:HASH, :hash].include?(assignment.type))
22
+ end
23
+
24
+ def restarg?
25
+ decl == :restarg
26
+ end
27
+
28
+ def rest?
29
+ decl == :restarg || decl == :kwrestarg
30
+ end
31
+
32
+ def full
33
+ case decl
34
+ when :optarg
35
+ "#{name} = #{asgn_code}"
36
+ when :kwarg
37
+ "#{name}:"
38
+ when :kwoptarg
39
+ "#{name}: #{asgn_code}"
40
+ when :restarg
41
+ "*#{name}"
42
+ when :kwrestarg
43
+ "**#{name}"
44
+ when :block, :blockarg
45
+ "&#{name}"
46
+ else
47
+ name
48
+ end
49
+ end
50
+
51
+ def return_type
52
+ if @return_type.nil?
53
+ @return_type = ComplexType::UNDEFINED
54
+ found = param_tag
55
+ @return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
56
+ if @return_type.undefined?
57
+ if decl == :restarg
58
+ @return_type = ComplexType.try_parse('Array')
59
+ elsif decl == :kwrestarg
60
+ @return_type = ComplexType.try_parse('Hash')
61
+ elsif decl == :blockarg
62
+ @return_type = ComplexType.try_parse('Proc')
63
+ end
64
+ end
65
+ end
66
+ super
67
+ @return_type
68
+ end
69
+
70
+ # The parameter's zero-based location in the block's signature.
71
+ #
72
+ # @return [Integer]
73
+ def index
74
+ closure.parameter_names.index(name)
75
+ end
76
+
77
+ # @param api_map [ApiMap]
78
+ def typify api_map
79
+ return return_type.qualify(api_map, closure.context.namespace) unless return_type.undefined?
80
+ closure.is_a?(Pin::Block) ? typify_block_param(api_map) : typify_method_param(api_map)
81
+ end
82
+
83
+ def documentation
84
+ tag = param_tag
85
+ return '' if tag.nil? || tag.text.nil?
86
+ tag.text
87
+ end
88
+
89
+ def try_merge! pin
90
+ return false unless super && closure == pin.closure
91
+ true
92
+ end
93
+
94
+ def probe api_map
95
+ typify api_map
96
+ end
97
+
98
+ private
99
+
100
+ # @return [YARD::Tags::Tag]
101
+ def param_tag
102
+ found = nil
103
+ params = closure.docstring.tags(:param)
104
+ params.each do |p|
105
+ next unless p.name == name
106
+ found = p
107
+ break
108
+ end
109
+ if found.nil? and !index.nil?
110
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
111
+ end
112
+ found
113
+ end
114
+
115
+ # @param api_map [ApiMap]
116
+ # @return [ComplexType]
117
+ def typify_block_param api_map
118
+ if closure.is_a?(Pin::Block) && closure.receiver
119
+ chain = Parser.chain(closure.receiver, filename)
120
+ clip = api_map.clip_at(location.filename, location.range.start)
121
+ locals = clip.locals - [self]
122
+ meths = chain.define(api_map, closure, locals)
123
+ meths.each do |meth|
124
+ if meth.docstring.has_tag?(:yieldparam_single_parameter)
125
+ type = chain.base.infer(api_map, closure, locals)
126
+ if type.defined? && !type.subtypes.empty?
127
+ bmeth = chain.base.define(api_map, closure, locals).first
128
+ return type.subtypes.first.qualify(api_map, bmeth.context.namespace)
129
+ end
130
+ else
131
+ yps = meth.docstring.tags(:yieldparam)
132
+ unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
133
+ return ComplexType.try_parse(yps[index].types.first).self_to(chain.base.infer(api_map, closure, locals).namespace).qualify(api_map, meth.context.namespace)
134
+ end
135
+ end
136
+ end
137
+ end
138
+ ComplexType::UNDEFINED
139
+ end
140
+
141
+ # @param api_map [ApiMap]
142
+ # @return [ComplexType]
143
+ def typify_method_param api_map
144
+ meths = api_map.get_method_stack(closure.full_context.namespace, closure.name, scope: closure.scope)
145
+ # meths.shift # Ignore the first one
146
+ meths.each do |meth|
147
+ found = nil
148
+ params = meth.docstring.tags(:param)
149
+ if params.empty?
150
+ params = see_reference(docstring, api_map)
151
+ end
152
+ params.each do |p|
153
+ next unless p.name == name
154
+ found = p
155
+ break
156
+ end
157
+ if found.nil? and !index.nil?
158
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
159
+ end
160
+ return ComplexType.try_parse(*found.types).qualify(api_map, meth.context.namespace) unless found.nil? || found.types.nil?
161
+ end
162
+ ComplexType::UNDEFINED
163
+ end
164
+
165
+ # @param heredoc [YARD::Docstring]
166
+ # @param api_map [ApiMap]
167
+ # @param skip [Array]
168
+ # @return [Array<YARD::Tags::Tag>]
169
+ def see_reference heredoc, api_map, skip = []
170
+ heredoc.ref_tags.each do |ref|
171
+ next unless ref.tag_name == 'param' && ref.owner
172
+ result = resolve_reference(ref.owner.to_s, api_map, skip)
173
+ return result unless result.nil?
174
+ end
175
+ []
176
+ end
177
+
178
+ # @param ref [String]
179
+ # @param api_map [ApiMap]
180
+ # @param skip [Array]
181
+ # @return [Array<YARD::Tags::Tag>, nil]
182
+ def resolve_reference ref, api_map, skip
183
+ return nil if skip.include?(ref)
184
+ skip.push ref
185
+ parts = ref.split(/[\.#]/)
186
+ if parts.first.empty?
187
+ path = "#{namespace}#{ref}"
188
+ else
189
+ fqns = api_map.qualify(parts.first, namespace)
190
+ return nil if fqns.nil?
191
+ path = fqns + ref[parts.first.length] + parts.last
192
+ end
193
+ pins = api_map.get_path_pins(path)
194
+ pins.each do |pin|
195
+ params = pin.docstring.tags(:param)
196
+ return params unless params.empty?
197
+ end
198
+ pins.each do |pin|
199
+ params = see_reference(pin.docstring, api_map, skip)
200
+ return params unless params.empty?
201
+ end
202
+ nil
203
+ end
204
+ end
205
+ end
206
+ end
@@ -0,0 +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
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference < Base
6
+ autoload :Require, 'solargraph/pin/reference/require'
7
+ autoload :Superclass, 'solargraph/pin/reference/superclass'
8
+ autoload :Include, 'solargraph/pin/reference/include'
9
+ autoload :Prepend, 'solargraph/pin/reference/prepend'
10
+ autoload :Extend, 'solargraph/pin/reference/extend'
11
+ autoload :Override, 'solargraph/pin/reference/override'
12
+ end
13
+ end
14
+ end
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Singleton < Closure
6
+ def initialize name: '', location: nil, closure: nil
7
+ super
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Symbol < Base
6
+ # @param location [Solargraph::Location]
7
+ # @param name [String]
8
+ def initialize location, name
9
+ super(location: location, name: name)
10
+ # @name = name
11
+ # @location = location
12
+ end
13
+
14
+ def namespace
15
+ ''
16
+ end
17
+
18
+ def path
19
+ ''
20
+ end
21
+
22
+ def completion_item_kind
23
+ Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
24
+ end
25
+
26
+ def comments
27
+ ''
28
+ end
29
+
30
+ def return_type
31
+ @return_type ||= Solargraph::ComplexType::SYMBOL
32
+ end
33
+
34
+ def directives
35
+ []
36
+ end
37
+
38
+ def visibility
39
+ :public
40
+ end
41
+
42
+ def deprecated?
43
+ false
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # The zero-based line and column numbers of a position in a string.
5
+ #
6
+ class Position
7
+ # @return [Integer]
8
+ attr_reader :line
9
+
10
+ # @return [Integer]
11
+ attr_reader :character
12
+
13
+ alias column character
14
+
15
+ # @param line [Integer]
16
+ # @param character [Integer]
17
+ def initialize line, character
18
+ @line = line
19
+ @character = character
20
+ end
21
+
22
+ # Get a hash of the position. This representation is suitable for use in
23
+ # the language server protocol.
24
+ #
25
+ # @return [Hash]
26
+ def to_hash
27
+ {
28
+ line: line,
29
+ character: character
30
+ }
31
+ end
32
+
33
+ def inspect
34
+ "#<#{self.class} #{line}, #{character}>"
35
+ end
36
+
37
+ # Get a numeric offset for the specified text and position.
38
+ #
39
+ # @param text [String]
40
+ # @param position [Position]
41
+ # @return [Integer]
42
+ def self.to_offset text, position
43
+ return 0 if text.empty?
44
+ text.lines[0...position.line].sum(&:length) + position.character
45
+ end
46
+
47
+ # Get a numeric offset for the specified text and a position identified
48
+ # by its line and character.
49
+ #
50
+ # @param text [String]
51
+ # @param line [Integer]
52
+ # @param character [Integer]
53
+ # @return [Integer]
54
+ def self.line_char_to_offset text, line, character
55
+ to_offset(text, Position.new(line, character))
56
+ end
57
+
58
+ # Get a position for the specified text and offset.
59
+ #
60
+ # @param text [String]
61
+ # @param offset [Integer]
62
+ # @return [Position]
63
+ def self.from_offset text, offset
64
+ cursor = 0
65
+ line = 0
66
+ character = nil
67
+ text.lines.each do |l|
68
+ line_length = l.length
69
+ char_length = l.chomp.length
70
+ if cursor + char_length >= offset
71
+ character = offset - cursor
72
+ break
73
+ end
74
+ cursor += line_length
75
+ line += 1
76
+ end
77
+ character = 0 if character.nil? and (cursor - offset).between?(0, 1)
78
+ raise InvalidOffsetError if character.nil?
79
+ Position.new(line, character)
80
+ end
81
+
82
+ # A helper method for generating positions from arrays of integers. The
83
+ # original parameter is returned if it is already a position.
84
+ #
85
+ # @raise [ArgumentError] if the object cannot be converted to a position.
86
+ #
87
+ # @param object [Position, Array(Integer, Integer)]
88
+ # @return [Position]
89
+ def self.normalize object
90
+ return object if object.is_a?(Position)
91
+ return Position.new(object[0], object[1]) if object.is_a?(Array)
92
+ raise ArgumentError, "Unable to convert #{object.class} to Position"
93
+ end
94
+
95
+ def == other
96
+ return false unless other.is_a?(Position)
97
+ line == other.line and character == other.character
98
+ end
99
+ end
100
+ end