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,78 +1,94 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToMethod
7
- extend YardMap::Helpers
8
-
9
- def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
10
- closure ||= Solargraph::Pin::Namespace.new(
11
- name: code_object.namespace.to_s,
12
- gates: [code_object.namespace.to_s]
13
- )
14
- location = object_location(code_object, spec)
15
- comments = code_object.docstring ? code_object.docstring.all.to_s : ''
16
- Pin::Method.new(
17
- location: location,
18
- closure: closure,
19
- name: name || code_object.name.to_s,
20
- comments: comments,
21
- scope: scope || code_object.scope,
22
- visibility: visibility || code_object.visibility,
23
- parameters: get_parameters(code_object, location, comments),
24
- explicit: code_object.is_explicit?
25
- )
26
- end
27
-
28
- class << self
29
- private
30
-
31
- # @param code_object [YARD::CodeObjects::Base]
32
- # @return [Array<Solargraph::Pin::Parameter>]
33
- def get_parameters code_object, location, comments
34
- return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
35
- # HACK: Skip `nil` and `self` parameters that are sometimes emitted
36
- # for methods defined in C
37
- # See https://github.com/castwide/solargraph/issues/345
38
- code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
39
- Solargraph::Pin::Parameter.new(
40
- location: location,
41
- closure: self,
42
- comments: comments,
43
- name: arg_name(a),
44
- presence: nil,
45
- decl: arg_type(a),
46
- asgn_code: a[1]
47
- )
48
- end
49
- end
50
-
51
- # @param a [Array]
52
- # @return [String]
53
- def arg_name a
54
- a[0].gsub(/[^a-z0-9_]/i, '')
55
- end
56
-
57
- # @param a [Array]
58
- # @return [::Symbol]
59
- def arg_type a
60
- if a[0].start_with?('**')
61
- :kwrestarg
62
- elsif a[0].start_with?('*')
63
- :restarg
64
- elsif a[0].start_with?('&')
65
- :blockarg
66
- elsif a[0].end_with?(':')
67
- a[1] ? :kwoptarg : :kwarg
68
- elsif a[1]
69
- :optarg
70
- else
71
- :arg
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ module ToMethod
7
+ extend YardMap::Helpers
8
+
9
+ # @param code_object [YARD::CodeObjects::Base]
10
+ # @param name [String, nil]
11
+ # @param scope [Symbol, nil]
12
+ # @param visibility [Symbol, nil]
13
+ # @param closure [Solargraph::Pin::Namespace, nil]
14
+ # @param spec [Gem::Specification, nil]
15
+ # @return [Solargraph::Pin::Method]
16
+ def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
17
+ closure ||= Solargraph::Pin::Namespace.new(
18
+ name: code_object.namespace.to_s,
19
+ gates: [code_object.namespace.to_s]
20
+ )
21
+ location = object_location(code_object, spec)
22
+ name ||= code_object.name.to_s
23
+ return_type = ComplexType::SELF if name == 'new'
24
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
25
+ pin = Pin::Method.new(
26
+ location: location,
27
+ closure: closure,
28
+ name: name,
29
+ comments: comments,
30
+ scope: scope || code_object.scope,
31
+ visibility: visibility || code_object.visibility,
32
+ # @todo Might need to convert overloads to signatures
33
+ parameters: [],
34
+ explicit: code_object.is_explicit?,
35
+ return_type: return_type
36
+ )
37
+ pin.parameters.concat get_parameters(code_object, location, comments, pin)
38
+ pin
39
+ end
40
+
41
+ class << self
42
+ private
43
+
44
+ # @param code_object [YARD::CodeObjects::Base]
45
+ # @param location [Location],
46
+ # @param comments [String]
47
+ # @param pin [Pin::Base]
48
+ # @return [Array<Solargraph::Pin::Parameter>]
49
+ def get_parameters code_object, location, comments, pin
50
+ return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
51
+ # HACK: Skip `nil` and `self` parameters that are sometimes emitted
52
+ # for methods defined in C
53
+ # See https://github.com/castwide/solargraph/issues/345
54
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
55
+ Solargraph::Pin::Parameter.new(
56
+ location: location,
57
+ closure: pin,
58
+ comments: comments,
59
+ name: arg_name(a),
60
+ presence: nil,
61
+ decl: arg_type(a),
62
+ asgn_code: a[1]
63
+ )
64
+ end
65
+ end
66
+
67
+ # @param a [Array<String>]
68
+ # @return [String]
69
+ def arg_name a
70
+ a[0].gsub(/[^a-z0-9_]/i, '')
71
+ end
72
+
73
+ # @param a [Array]
74
+ # @return [::Symbol]
75
+ def arg_type a
76
+ if a[0].start_with?('**')
77
+ :kwrestarg
78
+ elsif a[0].start_with?('*')
79
+ :restarg
80
+ elsif a[0].start_with?('&')
81
+ :blockarg
82
+ elsif a[0].end_with?(':')
83
+ a[1] ? :kwoptarg : :kwarg
84
+ elsif a[1]
85
+ :optarg
86
+ else
87
+ :arg
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -1,27 +1,28 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToNamespace
7
- extend YardMap::Helpers
8
-
9
- def self.make code_object, spec, closure = nil
10
- closure ||= Solargraph::Pin::Namespace.new(
11
- name: code_object.namespace.to_s,
12
- closure: Pin::ROOT_PIN,
13
- gates: [code_object.namespace.to_s]
14
- )
15
- Pin::Namespace.new(
16
- location: object_location(code_object, spec),
17
- name: code_object.name.to_s,
18
- comments: code_object.docstring ? code_object.docstring.all.to_s : '',
19
- type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
20
- visibility: code_object.visibility,
21
- closure: closure
22
- )
23
- end
24
- end
25
- end
26
- end
27
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ module ToNamespace
7
+ extend YardMap::Helpers
8
+
9
+ # @param code_object [YARD::CodeObjects::NamespaceObject]
10
+ def self.make code_object, spec, closure = nil
11
+ closure ||= Solargraph::Pin::Namespace.new(
12
+ name: code_object.namespace.to_s,
13
+ closure: Pin::ROOT_PIN,
14
+ gates: [code_object.namespace.to_s]
15
+ )
16
+ Pin::Namespace.new(
17
+ location: object_location(code_object, spec),
18
+ name: code_object.name.to_s,
19
+ comments: code_object.docstring ? code_object.docstring.all.to_s : '',
20
+ type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
21
+ visibility: code_object.visibility,
22
+ closure: closure
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,77 +1,78 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
7
- autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
8
- autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
9
-
10
- # @param code_objects [Array<YARD::CodeObjects::Base>]
11
- # @param spec [Gem::Specification]
12
- def initialize code_objects, spec = nil
13
- @code_objects = code_objects
14
- @spec = spec
15
- @pins = []
16
- @namespace_pins = {}
17
- end
18
-
19
- # @return [Array<Pin::Base>]
20
- def map
21
- @code_objects.each do |co|
22
- @pins.concat generate_pins co
23
- end
24
- # Some yardocs contain documentation for dependencies that can be
25
- # ignored here. The YardMap will load dependencies separately.
26
- @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
27
- @pins
28
- end
29
-
30
- private
31
-
32
- # @param code_object [YARD::CodeObjects::Base]
33
- # @return [Array<Pin::Base>]
34
- def generate_pins code_object
35
- result = []
36
- if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
37
- nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
38
- @namespace_pins[code_object.path] = nspin
39
- result.push nspin
40
- if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
41
- # This method of superclass detection is a bit of a hack. If
42
- # the superclass is a Proxy, it is assumed to be undefined in its
43
- # yardoc and converted to a fully qualified namespace.
44
- superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
45
- "::#{code_object.superclass}"
46
- else
47
- code_object.superclass.to_s
48
- end
49
- result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin)
50
- end
51
- code_object.class_mixins.each do |m|
52
- result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path)
53
- end
54
- code_object.instance_mixins.each do |m|
55
- result.push Solargraph::Pin::Reference::Include.new(
56
- closure: nspin, # @todo Fix this
57
- name: m.path
58
- )
59
- end
60
- elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
61
- closure = @namespace_pins[code_object.namespace.to_s]
62
- if code_object.name == :initialize && code_object.scope == :instance
63
- # @todo Check the visibility of <Class>.new
64
- result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
65
- result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
66
- else
67
- result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
68
- end
69
- elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
70
- closure = @namespace_pins[code_object.namespace]
71
- result.push ToConstant.make(code_object, closure, @spec)
72
- end
73
- result
74
- end
75
- end
76
- end
77
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
7
+ autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
8
+ autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
9
+
10
+ # @param code_objects [Array<YARD::CodeObjects::Base>]
11
+ # @param spec [Gem::Specification, nil]
12
+ def initialize code_objects, spec = nil
13
+ @code_objects = code_objects
14
+ @spec = spec
15
+ # @type [Array<Solargraph::Pin::Base>]
16
+ @pins = []
17
+ @namespace_pins = {}
18
+ end
19
+
20
+ # @return [Array<Pin::Base>]
21
+ def map
22
+ @code_objects.each do |co|
23
+ @pins.concat generate_pins co
24
+ end
25
+ # Some yardocs contain documentation for dependencies that can be
26
+ # ignored here. The YardMap will load dependencies separately.
27
+ @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
28
+ @pins
29
+ end
30
+
31
+ private
32
+
33
+ # @param code_object [YARD::CodeObjects::Base]
34
+ # @return [Array<Pin::Base>]
35
+ def generate_pins code_object
36
+ result = []
37
+ if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
38
+ nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
39
+ @namespace_pins[code_object.path] = nspin
40
+ result.push nspin
41
+ if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
42
+ # This method of superclass detection is a bit of a hack. If
43
+ # the superclass is a Proxy, it is assumed to be undefined in its
44
+ # yardoc and converted to a fully qualified namespace.
45
+ superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
46
+ "::#{code_object.superclass}"
47
+ else
48
+ code_object.superclass.to_s
49
+ end
50
+ result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin)
51
+ end
52
+ code_object.class_mixins.each do |m|
53
+ result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path)
54
+ end
55
+ code_object.instance_mixins.each do |m|
56
+ result.push Solargraph::Pin::Reference::Include.new(
57
+ closure: nspin, # @todo Fix this
58
+ name: m.path
59
+ )
60
+ end
61
+ elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
62
+ closure = @namespace_pins[code_object.namespace.to_s]
63
+ if code_object.name == :initialize && code_object.scope == :instance
64
+ # @todo Check the visibility of <Class>.new
65
+ result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
66
+ result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
67
+ else
68
+ result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
69
+ end
70
+ elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
71
+ closure = @namespace_pins[code_object.namespace]
72
+ result.push ToConstant.make(code_object, closure, @spec)
73
+ end
74
+ result
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,79 +1,86 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class ToMethod
6
- module InnerMethods
7
- module_function
8
-
9
- # @param code_object [YARD::CodeObjects::Base]
10
- # @return [Array<Solargraph::Pin::Parameter>]
11
- def get_parameters code_object, location, comments
12
- return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
13
- # HACK: Skip `nil` and `self` parameters that are sometimes emitted
14
- # for methods defined in C
15
- # See https://github.com/castwide/solargraph/issues/345
16
- code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
17
- Solargraph::Pin::Parameter.new(
18
- location: location,
19
- closure: self,
20
- comments: comments,
21
- name: arg_name(a),
22
- presence: nil,
23
- decl: arg_type(a),
24
- asgn_code: a[1]
25
- )
26
- end
27
- end
28
-
29
- # @param a [Array]
30
- # @return [String]
31
- def arg_name a
32
- a[0].gsub(/[^a-z0-9_]/i, '')
33
- end
34
-
35
- # @param a [Array]
36
- # @return [::Symbol]
37
- def arg_type a
38
- if a[0].start_with?('**')
39
- :kwrestarg
40
- elsif a[0].start_with?('*')
41
- :restarg
42
- elsif a[0].start_with?('&')
43
- :blockarg
44
- elsif a[0].end_with?(':')
45
- a[1] ? :kwoptarg : :kwarg
46
- elsif a[1]
47
- :optarg
48
- else
49
- :arg
50
- end
51
- end
52
- end
53
- private_constant :InnerMethods
54
-
55
- # include YardMixin
56
- # extend YardMixin
57
- extend Helpers
58
-
59
- def make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
60
- closure ||= Solargraph::Pin::Namespace.new(
61
- name: code_object.namespace.to_s,
62
- gates: [code_object.namespace.to_s]
63
- )
64
- location = object_location(code_object, spec)
65
- comments = code_object.docstring ? code_object.docstring.all.to_s : ''
66
- Pin::Method.new(
67
- location: location,
68
- closure: closure,
69
- name: name || code_object.name.to_s,
70
- comments: comments,
71
- scope: scope || code_object.scope,
72
- visibility: visibility || code_object.visibility,
73
- parameters: InnerMethods.get_parameters(code_object, location, comments),
74
- explicit: code_object.is_explicit?
75
- )
76
- end
77
- end
78
- end
79
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class ToMethod
6
+ module InnerMethods
7
+ module_function
8
+
9
+ # @param code_object [YARD::CodeObjects::Base]
10
+ # @param location [Solargraph::Location]
11
+ # @param comments [String]
12
+ # @return [Array<Solargraph::Pin::Parameter>]
13
+ def get_parameters code_object, location, comments
14
+ return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
15
+ # HACK: Skip `nil` and `self` parameters that are sometimes emitted
16
+ # for methods defined in C
17
+ # See https://github.com/castwide/solargraph/issues/345
18
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
19
+ Solargraph::Pin::Parameter.new(
20
+ location: location,
21
+ closure: self,
22
+ comments: comments,
23
+ name: arg_name(a),
24
+ presence: nil,
25
+ decl: arg_type(a),
26
+ asgn_code: a[1]
27
+ )
28
+ end
29
+ end
30
+
31
+ # @param a [Array<String>]
32
+ # @return [String]
33
+ def arg_name a
34
+ a[0].gsub(/[^a-z0-9_]/i, '')
35
+ end
36
+
37
+ # @param a [Array]
38
+ # @return [::Symbol]
39
+ def arg_type a
40
+ if a[0].start_with?('**')
41
+ :kwrestarg
42
+ elsif a[0].start_with?('*')
43
+ :restarg
44
+ elsif a[0].start_with?('&')
45
+ :blockarg
46
+ elsif a[0].end_with?(':')
47
+ a[1] ? :kwoptarg : :kwarg
48
+ elsif a[1]
49
+ :optarg
50
+ else
51
+ :arg
52
+ end
53
+ end
54
+ end
55
+ private_constant :InnerMethods
56
+
57
+ include Helpers
58
+
59
+ # @param code_object [YARD::CodeObjects::Base]
60
+ # @param name [String, nil]
61
+ # @param scope [Symbol, nil]
62
+ # @param visibility [Symbol, nil]
63
+ # @param closure [Solargraph::Pin::Base, nil]
64
+ # @param spec [Solargraph::Pin::Base, nil]
65
+ # @return [Solargraph::Pin::Method]
66
+ def make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
67
+ closure ||= Solargraph::Pin::Namespace.new(
68
+ name: code_object.namespace.to_s,
69
+ gates: [code_object.namespace.to_s]
70
+ )
71
+ location = object_location(code_object, spec)
72
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
73
+ Pin::Method.new(
74
+ location: location,
75
+ closure: closure,
76
+ name: name || code_object.name.to_s,
77
+ comments: comments,
78
+ scope: scope || code_object.scope,
79
+ visibility: visibility || code_object.visibility,
80
+ parameters: InnerMethods.get_parameters(code_object, location, comments),
81
+ explicit: code_object.is_explicit?
82
+ )
83
+ end
84
+ end
85
+ end
86
+ end