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,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class CasgnNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ here = get_node_start_position(node)
12
+ pins.push Solargraph::Pin::Constant.new(
13
+ location: get_node_location(node),
14
+ closure: region.closure,
15
+ name: node.children[1].to_s,
16
+ comments: comments_for(node),
17
+ assignment: node.children[2]
18
+ )
19
+ process_children
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class CvasgnNode < Parser::NodeProcessor::Base
8
+ def process
9
+ loc = get_node_location(node)
10
+ pins.push Solargraph::Pin::ClassVariable.new(
11
+ location: loc,
12
+ closure: region.closure,
13
+ name: node.children[0].to_s,
14
+ comments: comments_for(node),
15
+ assignment: node.children[1]
16
+ )
17
+ process_children
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class DefNode < Parser::NodeProcessor::Base
8
+ def process
9
+ methpin = Solargraph::Pin::Method.new(
10
+ location: get_node_location(node),
11
+ closure: region.closure,
12
+ name: node.children[0].to_s,
13
+ comments: comments_for(node),
14
+ scope: region.scope || (region.closure.is_a?(Pin::Singleton) ? :class : :instance),
15
+ visibility: region.visibility,
16
+ node: node
17
+ )
18
+ if methpin.name == 'initialize' and methpin.scope == :instance
19
+ pins.push Solargraph::Pin::Method.new(
20
+ location: methpin.location,
21
+ closure: methpin.closure,
22
+ name: 'new',
23
+ comments: methpin.comments,
24
+ scope: :class,
25
+ parameters: methpin.parameters
26
+ )
27
+ # @todo Smelly instance variable access.
28
+ pins.last.instance_variable_set(:@return_type, ComplexType::SELF)
29
+ pins.push methpin
30
+ # @todo Smelly instance variable access.
31
+ methpin.instance_variable_set(:@visibility, :private)
32
+ methpin.instance_variable_set(:@return_type, ComplexType::VOID)
33
+ elsif region.visibility == :module_function
34
+ pins.push Solargraph::Pin::Method.new(
35
+ location: methpin.location,
36
+ closure: methpin.closure,
37
+ name: methpin.name,
38
+ comments: methpin.comments,
39
+ scope: :class,
40
+ visibility: :public,
41
+ parameters: methpin.parameters,
42
+ node: methpin.node
43
+ )
44
+ pins.push Solargraph::Pin::Method.new(
45
+ location: methpin.location,
46
+ closure: methpin.closure,
47
+ name: methpin.name,
48
+ comments: methpin.comments,
49
+ scope: :instance,
50
+ visibility: :private,
51
+ parameters: methpin.parameters,
52
+ node: methpin.node
53
+ )
54
+ else
55
+ pins.push methpin
56
+ end
57
+ process_children region.update(closure: methpin, scope: methpin.scope)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class DefsNode < DefNode
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ s_visi = region.visibility
12
+ s_visi = :public if s_visi == :module_function || region.scope != :class
13
+ loc = get_node_location(node)
14
+ if node.children[0].is_a?(AST::Node) && node.children[0].type == :self
15
+ closure = region.closure
16
+ else
17
+ closure = Solargraph::Pin::Namespace.new(
18
+ name: unpack_name(node.children[0])
19
+ )
20
+ end
21
+ pins.push Solargraph::Pin::Method.new(
22
+ location: loc,
23
+ closure: closure,
24
+ name: node.children[1].to_s,
25
+ comments: comments_for(node),
26
+ scope: :class,
27
+ visibility: s_visi,
28
+ node: node
29
+ )
30
+ process_children region.update(closure: pins.last, scope: :class)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class GvasgnNode < Parser::NodeProcessor::Base
8
+ def process
9
+ loc = get_node_location(node)
10
+ pins.push Solargraph::Pin::GlobalVariable.new(
11
+ location: loc,
12
+ closure: region.closure,
13
+ name: node.children[0].to_s,
14
+ comments: comments_for(node),
15
+ assignment: node.children[1]
16
+ )
17
+ process_children
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class IvasgnNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ loc = get_node_location(node)
12
+ pins.push Solargraph::Pin::InstanceVariable.new(
13
+ location: loc,
14
+ closure: region.closure,
15
+ name: node.children[0].to_s,
16
+ comments: comments_for(node),
17
+ assignment: node.children[1]
18
+ )
19
+ if region.visibility == :module_function
20
+ here = get_node_start_position(node)
21
+ named_path = named_path_pin(here)
22
+ if named_path.is_a?(Pin::Method)
23
+ pins.push Solargraph::Pin::InstanceVariable.new(
24
+ location: loc,
25
+ closure: Pin::Namespace.new(type: :module, closure: region.closure.closure, name: region.closure.name),
26
+ name: node.children[0].to_s,
27
+ comments: comments_for(node),
28
+ assignment: node.children[1]
29
+ )
30
+ end
31
+ end
32
+ process_children
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class LvasgnNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ here = get_node_start_position(node)
12
+ presence = Range.new(here, region.closure.location.range.ending)
13
+ loc = get_node_location(node)
14
+ locals.push Solargraph::Pin::LocalVariable.new(
15
+ location: loc,
16
+ closure: region.closure,
17
+ name: node.children[0].to_s,
18
+ assignment: node.children[1],
19
+ comments: comments_for(node),
20
+ presence: presence
21
+ )
22
+ process_children
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class NamespaceNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ sc = nil
12
+ if node.type == :class and !node.children[1].nil?
13
+ sc = unpack_name(node.children[1])
14
+ end
15
+ loc = get_node_location(node)
16
+ nspin = Solargraph::Pin::Namespace.new(
17
+ type: node.type,
18
+ location: loc,
19
+ closure: region.closure,
20
+ name: unpack_name(node.children[0]),
21
+ comments: comments_for(node),
22
+ visibility: :public,
23
+ gates: region.closure.gates.freeze
24
+ )
25
+ pins.push nspin
26
+ unless sc.nil?
27
+ pins.push Pin::Reference::Superclass.new(
28
+ location: loc,
29
+ closure: pins.last,
30
+ name: sc
31
+ )
32
+ end
33
+ process_children region.update(closure: nspin, visibility: :public)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class OrasgnNode < Parser::NodeProcessor::Base
8
+ def process
9
+ new_node = node.updated(node.children[0].type, node.children[0].children + [node.children[1]])
10
+ NodeProcessor.process(new_node, region, pins, locals)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class ResbodyNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ if node.children[1]
12
+ here = get_node_start_position(node.children[1])
13
+ presence = Range.new(here, region.closure.location.range.ending)
14
+ loc = get_node_location(node.children[1])
15
+ types = if node.children[0].nil?
16
+ ['Exception']
17
+ else
18
+ node.children[0].children.map do |child|
19
+ unpack_name(child)
20
+ end
21
+ end
22
+ locals.push Solargraph::Pin::LocalVariable.new(
23
+ location: loc,
24
+ closure: region.closure,
25
+ name: node.children[1].children[0].to_s,
26
+ comments: "@type [#{types.join(',')}]",
27
+ presence: presence
28
+ )
29
+ end
30
+ NodeProcessor.process(node.children[2], region, pins, locals)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class SclassNode < Parser::NodeProcessor::Base
8
+ def process
9
+ # @todo Temporarily skipping remote metaclasses
10
+ return unless node.children[0].is_a?(AST::Node) && node.children[0].type == :self
11
+ pins.push Solargraph::Pin::Singleton.new(
12
+ location: get_node_location(node),
13
+ closure: region.closure
14
+ )
15
+ process_children region.update(visibility: :public, scope: :class, closure: pins.last)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,257 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module NodeProcessors
7
+ class SendNode < Parser::NodeProcessor::Base
8
+ include Legacy::NodeMethods
9
+
10
+ def process
11
+ if node.children[0].nil?
12
+ if [:private, :public, :protected].include?(node.children[1])
13
+ process_visibility
14
+ elsif node.children[1] == :module_function
15
+ process_module_function
16
+ elsif [:attr_reader, :attr_writer, :attr_accessor].include?(node.children[1])
17
+ process_attribute
18
+ elsif node.children[1] == :include
19
+ process_include
20
+ elsif node.children[1] == :extend
21
+ process_extend
22
+ elsif node.children[1] == :prepend
23
+ process_prepend
24
+ elsif node.children[1] == :require
25
+ process_require
26
+ elsif node.children[1] == :autoload
27
+ process_autoload
28
+ elsif node.children[1] == :private_constant
29
+ process_private_constant
30
+ elsif node.children[1] == :alias_method && node.children[2] && node.children[2] && node.children[2].type == :sym && node.children[3] && node.children[3].type == :sym
31
+ process_alias_method
32
+ elsif node.children[1] == :private_class_method && node.children[2].is_a?(AST::Node)
33
+ # Processing a private class can potentially handle children on its own
34
+ return if process_private_class_method
35
+ end
36
+ elsif node.children[1] == :require && node.children[0].to_s == '(const nil :Bundler)'
37
+ pins.push Pin::Reference::Require.new(Solargraph::Location.new(region.filename, Solargraph::Range.from_to(0, 0, 0, 0)), 'bundler/require')
38
+ end
39
+ process_children
40
+ end
41
+
42
+ private
43
+
44
+ # @return [void]
45
+ def process_visibility
46
+ if (node.children.length > 2)
47
+ node.children[2..-1].each do |child|
48
+ if child.is_a?(AST::Node) && (child.type == :sym || child.type == :str)
49
+ name = child.children[0].to_s
50
+ matches = pins.select{ |pin| pin.is_a?(Pin::Method) && pin.name == name && pin.namespace == region.closure.full_context.namespace && pin.context.scope == (region.scope || :instance)}
51
+ matches.each do |pin|
52
+ # @todo Smelly instance variable access
53
+ pin.instance_variable_set(:@visibility, node.children[1])
54
+ end
55
+ else
56
+ process_children region.update(visibility: node.children[1])
57
+ end
58
+ end
59
+ else
60
+ # @todo Smelly instance variable access
61
+ region.instance_variable_set(:@visibility, node.children[1])
62
+ end
63
+ end
64
+
65
+ # @return [void]
66
+ def process_attribute
67
+ node.children[2..-1].each do |a|
68
+ loc = get_node_location(node)
69
+ clos = region.closure
70
+ cmnt = comments_for(node)
71
+ if node.children[1] == :attr_reader || node.children[1] == :attr_accessor
72
+ pins.push Solargraph::Pin::Method.new(
73
+ location: loc,
74
+ closure: clos,
75
+ name: a.children[0].to_s,
76
+ comments: cmnt,
77
+ scope: region.scope || :instance,
78
+ visibility: region.visibility,
79
+ attribute: true
80
+ )
81
+ end
82
+ if node.children[1] == :attr_writer || node.children[1] == :attr_accessor
83
+ pins.push Solargraph::Pin::Method.new(
84
+ location: loc,
85
+ closure: clos,
86
+ name: "#{a.children[0]}=",
87
+ comments: cmnt,
88
+ scope: region.scope || :instance,
89
+ visibility: region.visibility,
90
+ attribute: true
91
+ )
92
+ pins.last.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last)
93
+ if pins.last.return_type.defined?
94
+ pins.last.docstring.add_tag YARD::Tags::Tag.new(:param, '', pins.last.return_type.to_s.split(', '), 'value')
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ # @return [void]
101
+ def process_include
102
+ if node.children[2].is_a?(AST::Node) && node.children[2].type == :const
103
+ cp = region.closure
104
+ node.children[2..-1].each do |i|
105
+ type = region.scope == :class ? Pin::Reference::Extend : Pin::Reference::Include
106
+ pins.push type.new(
107
+ location: get_node_location(i),
108
+ closure: cp,
109
+ name: unpack_name(i)
110
+ )
111
+ end
112
+ end
113
+ end
114
+
115
+ def process_prepend
116
+ if node.children[2].is_a?(AST::Node) && node.children[2].type == :const
117
+ cp = region.closure
118
+ node.children[2..-1].each do |i|
119
+ pins.push Pin::Reference::Prepend.new(
120
+ location: get_node_location(i),
121
+ closure: cp,
122
+ name: unpack_name(i)
123
+ )
124
+ end
125
+ end
126
+ end
127
+
128
+ # @return [void]
129
+ def process_extend
130
+ node.children[2..-1].each do |i|
131
+ loc = get_node_location(node)
132
+ if i.type == :self
133
+ pins.push Pin::Reference::Extend.new(
134
+ location: loc,
135
+ closure: region.closure,
136
+ name: region.closure.full_context.namespace
137
+ )
138
+ else
139
+ pins.push Pin::Reference::Extend.new(
140
+ location: loc,
141
+ closure: region.closure,
142
+ name: unpack_name(i)
143
+ )
144
+ end
145
+ end
146
+ end
147
+
148
+ # @return [void]
149
+ def process_require
150
+ if node.children[2].is_a?(AST::Node) && node.children[2].type == :str
151
+ path = node.children[2].children[0].to_s
152
+ pins.push Pin::Reference::Require.new(get_node_location(node), path)
153
+ end
154
+ end
155
+
156
+ # @return [void]
157
+ def process_autoload
158
+ if node.children[3].is_a?(AST::Node) && node.children[3].type == :str
159
+ path = node.children[3].children[0].to_s
160
+ pins.push Pin::Reference::Require.new(get_node_location(node), path)
161
+ end
162
+ end
163
+
164
+ # @return [void]
165
+ def process_module_function
166
+ if node.children[2].nil?
167
+ # @todo Smelly instance variable access
168
+ region.instance_variable_set(:@visibility, :module_function)
169
+ elsif node.children[2].type == :sym || node.children[2].type == :str
170
+ node.children[2..-1].each do |x|
171
+ cn = x.children[0].to_s
172
+ ref = pins.select{ |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == cn }.first
173
+ unless ref.nil?
174
+ pins.delete ref
175
+ mm = Solargraph::Pin::Method.new(
176
+ location: ref.location,
177
+ closure: ref.closure,
178
+ name: ref.name,
179
+ parameters: ref.parameters,
180
+ comments: ref.comments,
181
+ scope: :class,
182
+ visibility: :public,
183
+ node: ref.node
184
+ )
185
+ cm = Solargraph::Pin::Method.new(
186
+ location: ref.location,
187
+ closure: ref.closure,
188
+ name: ref.name,
189
+ parameters: ref.parameters,
190
+ comments: ref.comments,
191
+ scope: :instance,
192
+ visibility: :private,
193
+ node: ref.node)
194
+ pins.push mm, cm
195
+ pins.select{|pin| pin.is_a?(Pin::InstanceVariable) && pin.closure.path == ref.path}.each do |ivar|
196
+ pins.delete ivar
197
+ pins.push Solargraph::Pin::InstanceVariable.new(
198
+ location: ivar.location,
199
+ closure: cm,
200
+ name: ivar.name,
201
+ comments: ivar.comments,
202
+ assignment: ivar.assignment
203
+ )
204
+ pins.push Solargraph::Pin::InstanceVariable.new(
205
+ location: ivar.location,
206
+ closure: mm,
207
+ name: ivar.name,
208
+ comments: ivar.comments,
209
+ assignment: ivar.assignment
210
+ )
211
+ end
212
+ end
213
+ end
214
+ elsif node.children[2].type == :def
215
+ NodeProcessor.process node.children[2], region.update(visibility: :module_function), pins, locals
216
+ end
217
+ end
218
+
219
+ # @return [void]
220
+ def process_private_constant
221
+ if node.children[2] && (node.children[2].type == :sym || node.children[2].type == :str)
222
+ cn = node.children[2].children[0].to_s
223
+ ref = pins.select{|p| [Solargraph::Pin::Namespace, Solargraph::Pin::Constant].include?(p.class) && p.namespace == region.closure.full_context.namespace && p.name == cn}.first
224
+ # HACK: Smelly instance variable access
225
+ ref.instance_variable_set(:@visibility, :private) unless ref.nil?
226
+ end
227
+ end
228
+
229
+ # @return [void]
230
+ def process_alias_method
231
+ loc = get_node_location(node)
232
+ pins.push Solargraph::Pin::MethodAlias.new(
233
+ location: get_node_location(node),
234
+ closure: region.closure,
235
+ name: node.children[2].children[0].to_s,
236
+ original: node.children[3].children[0].to_s,
237
+ scope: region.scope || :instance
238
+ )
239
+ end
240
+
241
+ # @return [Boolean]
242
+ def process_private_class_method
243
+ if node.children[2].type == :sym || node.children[2].type == :str
244
+ ref = pins.select { |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == node.children[2].children[0].to_s }.first
245
+ # HACK: Smelly instance variable access
246
+ ref.instance_variable_set(:@visibility, :private) unless ref.nil?
247
+ false
248
+ else
249
+ process_children region.update(scope: :class, visibility: :private)
250
+ true
251
+ end
252
+ end
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end