solargraph 0.50.0 → 0.58.2

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 (264) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +127 -0
  4. data/.github/workflows/plugins.yml +218 -0
  5. data/.github/workflows/rspec.yml +58 -12
  6. data/.github/workflows/typecheck.yml +39 -0
  7. data/.gitignore +8 -0
  8. data/.overcommit.yml +72 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +66 -0
  11. data/.rubocop_todo.yml +1279 -0
  12. data/.yardopts +3 -2
  13. data/CHANGELOG.md +306 -3
  14. data/README.md +29 -18
  15. data/Rakefile +125 -13
  16. data/SPONSORS.md +2 -9
  17. data/bin/solargraph +3 -0
  18. data/lib/solargraph/api_map/cache.rb +110 -70
  19. data/lib/solargraph/api_map/constants.rb +279 -0
  20. data/lib/solargraph/api_map/index.rb +193 -0
  21. data/lib/solargraph/api_map/source_to_yard.rb +97 -81
  22. data/lib/solargraph/api_map/store.rb +384 -268
  23. data/lib/solargraph/api_map.rb +945 -704
  24. data/lib/solargraph/bench.rb +21 -3
  25. data/lib/solargraph/complex_type/type_methods.rb +228 -134
  26. data/lib/solargraph/complex_type/unique_type.rb +482 -132
  27. data/lib/solargraph/complex_type.rb +444 -254
  28. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  29. data/lib/solargraph/convention/base.rb +20 -3
  30. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  31. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  32. data/lib/solargraph/convention/data_definition.rb +105 -0
  33. data/lib/solargraph/convention/gemspec.rb +3 -2
  34. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  35. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  36. data/lib/solargraph/convention/struct_definition.rb +164 -0
  37. data/lib/solargraph/convention.rb +36 -7
  38. data/lib/solargraph/converters/dd.rb +5 -0
  39. data/lib/solargraph/converters/dl.rb +3 -0
  40. data/lib/solargraph/converters/dt.rb +3 -0
  41. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  42. data/lib/solargraph/diagnostics/rubocop.rb +118 -112
  43. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -65
  44. data/lib/solargraph/diagnostics/type_check.rb +55 -54
  45. data/lib/solargraph/diagnostics.rb +2 -2
  46. data/lib/solargraph/doc_map.rb +439 -0
  47. data/lib/solargraph/environ.rb +9 -2
  48. data/lib/solargraph/equality.rb +34 -0
  49. data/lib/solargraph/gem_pins.rb +98 -0
  50. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  51. data/lib/solargraph/language_server/host/dispatch.rb +130 -111
  52. data/lib/solargraph/language_server/host/message_worker.rb +112 -59
  53. data/lib/solargraph/language_server/host/sources.rb +99 -156
  54. data/lib/solargraph/language_server/host.rb +878 -869
  55. data/lib/solargraph/language_server/message/base.rb +20 -12
  56. data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
  57. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -100
  58. data/lib/solargraph/language_server/message/extended/document.rb +23 -20
  59. data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
  60. data/lib/solargraph/language_server/message/initialize.rb +28 -1
  61. data/lib/solargraph/language_server/message/initialized.rb +1 -0
  62. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -59
  63. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  64. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -23
  65. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -126
  66. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -56
  67. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  68. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -0
  69. data/lib/solargraph/language_server/message/text_document.rb +1 -1
  70. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
  71. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
  72. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  73. data/lib/solargraph/language_server/message.rb +1 -0
  74. data/lib/solargraph/language_server/progress.rb +143 -0
  75. data/lib/solargraph/language_server/request.rb +4 -1
  76. data/lib/solargraph/language_server/transport/adapter.rb +16 -1
  77. data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
  78. data/lib/solargraph/language_server.rb +1 -0
  79. data/lib/solargraph/library.rb +683 -551
  80. data/lib/solargraph/location.rb +82 -37
  81. data/lib/solargraph/logging.rb +37 -27
  82. data/lib/solargraph/page.rb +9 -0
  83. data/lib/solargraph/parser/comment_ripper.rb +69 -52
  84. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  85. data/lib/solargraph/parser/node_processor/base.rb +92 -77
  86. data/lib/solargraph/parser/node_processor.rb +62 -43
  87. data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +149 -135
  88. data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +4 -1
  89. data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +166 -148
  90. data/lib/solargraph/parser/{legacy → parser_gem}/node_methods.rb +486 -325
  91. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +3 -2
  92. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  93. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -0
  94. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +15 -15
  95. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +46 -42
  96. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +4 -3
  97. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +3 -2
  98. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/def_node.rb +53 -63
  99. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +4 -3
  100. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +3 -2
  101. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  102. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +40 -38
  103. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +29 -28
  104. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -0
  105. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +10 -9
  106. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  107. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +17 -16
  108. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +38 -36
  109. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sclass_node.rb +52 -42
  110. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +291 -257
  111. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +4 -2
  112. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  113. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  114. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -0
  115. data/lib/solargraph/parser/parser_gem.rb +12 -0
  116. data/lib/solargraph/parser/region.rb +69 -66
  117. data/lib/solargraph/parser/snippet.rb +17 -13
  118. data/lib/solargraph/parser.rb +9 -12
  119. data/lib/solargraph/pin/base.rb +729 -299
  120. data/lib/solargraph/pin/base_variable.rb +126 -84
  121. data/lib/solargraph/pin/block.rb +104 -73
  122. data/lib/solargraph/pin/breakable.rb +9 -0
  123. data/lib/solargraph/pin/callable.rb +231 -0
  124. data/lib/solargraph/pin/closure.rb +72 -37
  125. data/lib/solargraph/pin/common.rb +79 -70
  126. data/lib/solargraph/pin/constant.rb +2 -0
  127. data/lib/solargraph/pin/conversions.rb +123 -92
  128. data/lib/solargraph/pin/delegated_method.rb +120 -0
  129. data/lib/solargraph/pin/documenting.rb +114 -105
  130. data/lib/solargraph/pin/instance_variable.rb +34 -30
  131. data/lib/solargraph/pin/keyword.rb +20 -15
  132. data/lib/solargraph/pin/local_variable.rb +75 -55
  133. data/lib/solargraph/pin/method.rb +672 -335
  134. data/lib/solargraph/pin/method_alias.rb +34 -31
  135. data/lib/solargraph/pin/namespace.rb +115 -94
  136. data/lib/solargraph/pin/parameter.rb +275 -206
  137. data/lib/solargraph/pin/proxy_type.rb +39 -29
  138. data/lib/solargraph/pin/reference/override.rb +47 -29
  139. data/lib/solargraph/pin/reference/require.rb +2 -2
  140. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  141. data/lib/solargraph/pin/reference.rb +39 -14
  142. data/lib/solargraph/pin/search.rb +61 -56
  143. data/lib/solargraph/pin/signature.rb +61 -23
  144. data/lib/solargraph/pin/singleton.rb +1 -1
  145. data/lib/solargraph/pin/symbol.rb +53 -47
  146. data/lib/solargraph/pin/until.rb +18 -0
  147. data/lib/solargraph/pin/while.rb +18 -0
  148. data/lib/solargraph/pin.rb +44 -38
  149. data/lib/solargraph/pin_cache.rb +245 -0
  150. data/lib/solargraph/position.rb +132 -100
  151. data/lib/solargraph/range.rb +112 -95
  152. data/lib/solargraph/rbs_map/conversions.rb +823 -394
  153. data/lib/solargraph/rbs_map/core_fills.rb +53 -30
  154. data/lib/solargraph/rbs_map/core_map.rb +58 -38
  155. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -36
  156. data/lib/solargraph/rbs_map.rb +163 -73
  157. data/lib/solargraph/shell.rb +352 -244
  158. data/lib/solargraph/source/chain/array.rb +37 -0
  159. data/lib/solargraph/source/chain/block_symbol.rb +13 -0
  160. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  161. data/lib/solargraph/source/chain/call.rb +337 -215
  162. data/lib/solargraph/source/chain/constant.rb +26 -75
  163. data/lib/solargraph/source/chain/hash.rb +34 -28
  164. data/lib/solargraph/source/chain/head.rb +1 -1
  165. data/lib/solargraph/source/chain/if.rb +28 -0
  166. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  167. data/lib/solargraph/source/chain/link.rb +44 -6
  168. data/lib/solargraph/source/chain/literal.rb +48 -23
  169. data/lib/solargraph/source/chain/or.rb +23 -23
  170. data/lib/solargraph/source/chain/z_super.rb +4 -4
  171. data/lib/solargraph/source/chain.rb +291 -179
  172. data/lib/solargraph/source/change.rb +82 -79
  173. data/lib/solargraph/source/cursor.rb +166 -164
  174. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  175. data/lib/solargraph/source/source_chainer.rb +194 -191
  176. data/lib/solargraph/source/updater.rb +55 -54
  177. data/lib/solargraph/source.rb +498 -522
  178. data/lib/solargraph/source_map/clip.rb +226 -229
  179. data/lib/solargraph/source_map/data.rb +34 -0
  180. data/lib/solargraph/source_map/mapper.rb +259 -243
  181. data/lib/solargraph/source_map.rb +212 -180
  182. data/lib/solargraph/type_checker/checks.rb +124 -112
  183. data/lib/solargraph/type_checker/param_def.rb +37 -35
  184. data/lib/solargraph/type_checker/problem.rb +32 -32
  185. data/lib/solargraph/type_checker/rules.rb +84 -57
  186. data/lib/solargraph/type_checker.rb +814 -549
  187. data/lib/solargraph/version.rb +5 -5
  188. data/lib/solargraph/views/_method.erb +10 -10
  189. data/lib/solargraph/views/_namespace.erb +3 -3
  190. data/lib/solargraph/views/document.erb +10 -10
  191. data/lib/solargraph/views/environment.erb +3 -5
  192. data/lib/solargraph/workspace/config.rb +255 -231
  193. data/lib/solargraph/workspace/require_paths.rb +97 -0
  194. data/lib/solargraph/workspace.rb +220 -212
  195. data/lib/solargraph/yard_map/cache.rb +6 -0
  196. data/lib/solargraph/yard_map/helpers.rb +44 -16
  197. data/lib/solargraph/yard_map/mapper/to_constant.rb +8 -5
  198. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -81
  199. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -27
  200. data/lib/solargraph/yard_map/mapper.rb +79 -77
  201. data/lib/solargraph/yard_map/to_method.rb +89 -79
  202. data/lib/solargraph/yard_map.rb +1 -284
  203. data/lib/solargraph/yard_tags.rb +20 -0
  204. data/lib/solargraph/yardoc.rb +87 -0
  205. data/lib/solargraph.rb +105 -69
  206. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  207. data/rbs/fills/open3/0/open3.rbs +172 -0
  208. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  209. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  210. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  211. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  212. data/rbs/fills/tuple/tuple.rbs +149 -0
  213. data/rbs/shims/ast/0/node.rbs +5 -0
  214. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  215. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  216. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  217. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  218. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  219. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  220. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  221. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  222. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  223. data/rbs_collection.yaml +19 -0
  224. data/solargraph.gemspec +39 -11
  225. metadata +354 -97
  226. data/lib/.rubocop.yml +0 -22
  227. data/lib/solargraph/api_map/bundler_methods.rb +0 -22
  228. data/lib/solargraph/cache.rb +0 -53
  229. data/lib/solargraph/convention/rspec.rb +0 -30
  230. data/lib/solargraph/documentor.rb +0 -76
  231. data/lib/solargraph/language_server/host/cataloger.rb +0 -56
  232. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
  233. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -35
  234. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
  235. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +0 -18
  236. data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
  237. data/lib/solargraph/parser/legacy.rb +0 -12
  238. data/lib/solargraph/parser/node_methods.rb +0 -43
  239. data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -149
  240. data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
  241. data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
  242. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
  243. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
  244. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -33
  245. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
  246. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +0 -75
  247. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -68
  248. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
  249. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
  250. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
  251. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
  252. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
  253. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
  254. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
  255. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
  256. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -45
  257. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -32
  258. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
  259. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -279
  260. data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
  261. data/lib/solargraph/parser/rubyvm/node_wrapper.rb +0 -47
  262. data/lib/solargraph/parser/rubyvm.rb +0 -40
  263. data/lib/solargraph/rbs_map/core_signs.rb +0 -33
  264. data/lib/yard-solargraph.rb +0 -33
@@ -1,81 +1,130 @@
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 = 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
- # @todo Might need to convert overloads to signatures
24
- parameters: [],
25
- explicit: code_object.is_explicit?
26
- )
27
- pin.parameters.concat get_parameters(code_object, location, comments, pin)
28
- pin
29
- end
30
-
31
- class << self
32
- private
33
-
34
- # @param code_object [YARD::CodeObjects::Base]
35
- # @return [Array<Solargraph::Pin::Parameter>]
36
- def get_parameters code_object, location, comments, pin
37
- return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
38
- # HACK: Skip `nil` and `self` parameters that are sometimes emitted
39
- # for methods defined in C
40
- # See https://github.com/castwide/solargraph/issues/345
41
- code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
42
- Solargraph::Pin::Parameter.new(
43
- location: location,
44
- closure: pin,
45
- comments: comments,
46
- name: arg_name(a),
47
- presence: nil,
48
- decl: arg_type(a),
49
- asgn_code: a[1]
50
- )
51
- end
52
- end
53
-
54
- # @param a [Array]
55
- # @return [String]
56
- def arg_name a
57
- a[0].gsub(/[^a-z0-9_]/i, '')
58
- end
59
-
60
- # @param a [Array]
61
- # @return [::Symbol]
62
- def arg_type a
63
- if a[0].start_with?('**')
64
- :kwrestarg
65
- elsif a[0].start_with?('*')
66
- :restarg
67
- elsif a[0].start_with?('&')
68
- :blockarg
69
- elsif a[0].end_with?(':')
70
- a[1] ? :kwoptarg : :kwarg
71
- elsif a[1]
72
- :optarg
73
- else
74
- :arg
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
81
- 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
+ VISIBILITY_OVERRIDE = {
10
+ # YARD pays attention to 'private' statements prior to class methods but shouldn't
11
+ ["Rails::Engine", :class, "find_root_with_flag"] => :public
12
+ }
13
+
14
+ # @param code_object [YARD::CodeObjects::MethodObject]
15
+ # @param name [String, nil]
16
+ # @param scope [Symbol, nil]
17
+ # @param visibility [Symbol, nil]
18
+ # @param closure [Solargraph::Pin::Namespace, nil]
19
+ # @param spec [Gem::Specification, nil]
20
+ # @return [Solargraph::Pin::Method]
21
+ def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
22
+ closure ||= create_closure_namespace_for(code_object, spec)
23
+ location = object_location(code_object, spec)
24
+ name ||= code_object.name.to_s
25
+ return_type = ComplexType::SELF if name == 'new'
26
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
27
+ final_scope = scope || code_object.scope
28
+ override_key = [closure.path, final_scope, name]
29
+ final_visibility = VISIBILITY_OVERRIDE[override_key]
30
+ final_visibility ||= VISIBILITY_OVERRIDE[[closure.path, final_scope]]
31
+ final_visibility ||= :private if closure.path == 'Kernel' && Kernel.private_instance_methods(false).include?(name.to_sym)
32
+ final_visibility ||= visibility
33
+ final_visibility ||= :private if code_object.module_function? && final_scope == :instance
34
+ final_visibility ||= :public if code_object.module_function? && final_scope == :class
35
+ final_visibility ||= code_object.visibility
36
+ if code_object.is_alias?
37
+ origin_code_object = code_object.namespace.aliases[code_object]
38
+ pin = Pin::MethodAlias.new(
39
+ name: name,
40
+ location: location,
41
+ original: origin_code_object.name.to_s,
42
+ closure: closure,
43
+ comments: comments,
44
+ scope: final_scope,
45
+ visibility: final_visibility,
46
+ explicit: code_object.is_explicit?,
47
+ return_type: return_type,
48
+ parameters: [],
49
+ source: :yardoc,
50
+ )
51
+ else
52
+ pin = Pin::Method.new(
53
+ location: location,
54
+ closure: closure,
55
+ name: name,
56
+ comments: comments,
57
+ scope: final_scope,
58
+ visibility: final_visibility,
59
+ # @todo Might need to convert overloads to signatures
60
+ explicit: code_object.is_explicit?,
61
+ return_type: return_type,
62
+ attribute: code_object.is_attribute?,
63
+ parameters: [],
64
+ source: :yardoc,
65
+ )
66
+ pin.parameters.concat get_parameters(code_object, location, comments, pin)
67
+ pin.parameters.freeze
68
+ end
69
+ logger.debug { "ToMethod.make: Just created method pin: #{pin.inspect}" }
70
+ pin
71
+ end
72
+
73
+ class << self
74
+ include Logging
75
+
76
+ private
77
+
78
+ # @param code_object [YARD::CodeObjects::Base]
79
+ # @param location [Location],
80
+ # @param comments [String]
81
+ # @param pin [Pin::Base]
82
+ # @return [Array<Solargraph::Pin::Parameter>]
83
+ def get_parameters code_object, location, comments, pin
84
+ return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
85
+ # HACK: Skip `nil` and `self` parameters that are sometimes emitted
86
+ # for methods defined in C
87
+ # See https://github.com/castwide/solargraph/issues/345
88
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
89
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
90
+ Solargraph::Pin::Parameter.new(
91
+ location: location,
92
+ closure: pin,
93
+ comments: comments,
94
+ name: arg_name(a),
95
+ presence: nil,
96
+ decl: arg_type(a),
97
+ asgn_code: a[1],
98
+ source: :yardoc,
99
+ )
100
+ end
101
+ end
102
+
103
+ # @param a [Array<String>]
104
+ # @return [String]
105
+ def arg_name a
106
+ a[0].gsub(/[^a-z0-9_]/i, '')
107
+ end
108
+
109
+ # @param a [Array]
110
+ # @return [::Symbol]
111
+ def arg_type a
112
+ if a[0].start_with?('**')
113
+ :kwrestarg
114
+ elsif a[0].start_with?('*')
115
+ :restarg
116
+ elsif a[0].start_with?('&')
117
+ :blockarg
118
+ elsif a[0].end_with?(':')
119
+ a[1] ? :kwoptarg : :kwarg
120
+ elsif a[1]
121
+ :optarg
122
+ else
123
+ :arg
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
@@ -1,27 +1,31 @@
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
+ # @param spec [Gem::Specification, nil]
11
+ # @param closure [Pin::Closure, nil]
12
+ # @return [Pin::Namespace]
13
+ def self.make code_object, spec, closure = nil
14
+ closure ||= create_closure_namespace_for(code_object, spec)
15
+ location = object_location(code_object, spec)
16
+
17
+ Pin::Namespace.new(
18
+ location: location,
19
+ name: code_object.name.to_s,
20
+ comments: code_object.docstring ? code_object.docstring.all.to_s : '',
21
+ type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
22
+ visibility: code_object.visibility,
23
+ closure: closure,
24
+ gates: closure.gates,
25
+ source: :yardoc,
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,77 +1,79 @@
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, source: :yard_map)
51
+ end
52
+ code_object.class_mixins.each do |m|
53
+ result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path, source: :yard_map)
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
+ source: :yard_map
60
+ )
61
+ end
62
+ elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
63
+ closure = @namespace_pins[code_object.namespace.to_s]
64
+ if code_object.name == :initialize && code_object.scope == :instance
65
+ # @todo Check the visibility of <Class>.new
66
+ result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
67
+ result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
68
+ else
69
+ result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
70
+ end
71
+ elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
72
+ closure = @namespace_pins[code_object.namespace]
73
+ result.push ToConstant.make(code_object, closure, @spec)
74
+ end
75
+ result
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,79 +1,89 @@
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
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
19
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
20
+ Solargraph::Pin::Parameter.new(
21
+ location: location,
22
+ closure: self,
23
+ comments: comments,
24
+ name: arg_name(a),
25
+ presence: nil,
26
+ decl: arg_type(a),
27
+ asgn_code: a[1],
28
+ source: :yard_map
29
+ )
30
+ end
31
+ end
32
+
33
+ # @param a [Array<String>]
34
+ # @return [String]
35
+ def arg_name a
36
+ a[0].gsub(/[^a-z0-9_]/i, '')
37
+ end
38
+
39
+ # @param a [Array]
40
+ # @return [::Symbol]
41
+ def arg_type a
42
+ if a[0].start_with?('**')
43
+ :kwrestarg
44
+ elsif a[0].start_with?('*')
45
+ :restarg
46
+ elsif a[0].start_with?('&')
47
+ :blockarg
48
+ elsif a[0].end_with?(':')
49
+ a[1] ? :kwoptarg : :kwarg
50
+ elsif a[1]
51
+ :optarg
52
+ else
53
+ :arg
54
+ end
55
+ end
56
+ end
57
+ private_constant :InnerMethods
58
+
59
+ include Helpers
60
+
61
+ # @param code_object [YARD::CodeObjects::MethodObject]
62
+ # @param name [String, nil]
63
+ # @param scope [Symbol, nil]
64
+ # @param visibility [Symbol, nil]
65
+ # @param closure [Solargraph::Pin::Base, nil]
66
+ # @param spec [Solargraph::Pin::Base, nil]
67
+ # @return [Solargraph::Pin::Method]
68
+ def make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
69
+ closure ||= Solargraph::Pin::Namespace.new(
70
+ name: code_object.namespace.to_s,
71
+ gates: [code_object.namespace.to_s]
72
+ )
73
+ location = object_location(code_object, spec)
74
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
75
+ Pin::Method.new(
76
+ location: location,
77
+ closure: closure,
78
+ name: name || code_object.name.to_s,
79
+ comments: comments,
80
+ scope: scope || code_object.scope,
81
+ visibility: visibility || code_object.visibility,
82
+ parameters: InnerMethods.get_parameters(code_object, location, comments),
83
+ explicit: code_object.is_explicit?,
84
+ source: :yard_map
85
+ )
86
+ end
87
+ end
88
+ end
89
+ end