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,77 +1,87 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module NodeProcessor
6
- class Base
7
- # @return [Parser::AST::Node]
8
- attr_reader :node
9
-
10
- # @return [Region]
11
- attr_reader :region
12
-
13
- # @return [Array<Pin::Base>]
14
- attr_reader :pins
15
-
16
- # @return [Array<Pin::Base>]
17
- attr_reader :locals
18
-
19
- # @param node [Parser::AST::Node]
20
- # @param region [Region]
21
- # @param pins [Array<Pin::Base>]
22
- def initialize node, region, pins, locals
23
- @node = node
24
- @region = region
25
- @pins = pins
26
- @locals = locals
27
- @processed_children = false
28
- end
29
-
30
- # Subclasses should override this method to generate new pins.
31
- #
32
- # @return [void]
33
- def process
34
- process_children
35
- end
36
-
37
- private
38
-
39
- # @param subregion [Region]
40
- # @return [void]
41
- def process_children subregion = region
42
- return if @processed_children
43
- @processed_children = true
44
- node.children.each do |child|
45
- next unless Parser.is_ast_node?(child)
46
- NodeProcessor.process(child, subregion, pins, locals)
47
- end
48
- end
49
-
50
- # @param node [Parser::AST::Node]
51
- # @return [Solargraph::Location]
52
- def get_node_location(node)
53
- range = Parser.node_range(node)
54
- Location.new(region.filename, range)
55
- end
56
-
57
- def comments_for(node)
58
- region.source.comments_for(node)
59
- end
60
-
61
- def named_path_pin position
62
- pins.select{|pin| pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)}.last
63
- end
64
-
65
- # @todo Candidate for deprecation
66
- def block_pin position
67
- pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
68
- end
69
-
70
- # @todo Candidate for deprecation
71
- def closure_pin position
72
- pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
73
- end
74
- end
75
- end
76
- end
77
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module NodeProcessor
6
+ class Base
7
+ # @return [Parser::AST::Node]
8
+ attr_reader :node
9
+
10
+ # @return [Region]
11
+ attr_reader :region
12
+
13
+ # @return [Array<Pin::Base>]
14
+ attr_reader :pins
15
+
16
+ # @return [Array<Pin::BaseVariable>]
17
+ attr_reader :locals
18
+
19
+ # @param node [Parser::AST::Node]
20
+ # @param region [Region]
21
+ # @param pins [Array<Pin::Base>]
22
+ # @param locals [Array<Pin::LocalVariable>]
23
+ def initialize node, region, pins, locals
24
+ @node = node
25
+ @region = region
26
+ @pins = pins
27
+ @locals = locals
28
+ @processed_children = false
29
+ end
30
+
31
+ # Subclasses should override this method to generate new pins.
32
+ #
33
+ # @return [void]
34
+ def process
35
+ process_children
36
+ end
37
+
38
+ private
39
+
40
+ # @param subregion [Region]
41
+ # @return [void]
42
+ def process_children subregion = region
43
+ return if @processed_children
44
+ @processed_children = true
45
+ node.children.each do |child|
46
+ next unless Parser.is_ast_node?(child)
47
+ NodeProcessor.process(child, subregion, pins, locals)
48
+ end
49
+ end
50
+
51
+ # @param node [Parser::AST::Node]
52
+ # @return [Solargraph::Location]
53
+ def get_node_location(node)
54
+ range = Parser.node_range(node)
55
+ Location.new(region.filename, range)
56
+ end
57
+
58
+ # @param node [Parser::AST::Node]
59
+ # @return [String, nil]
60
+ def comments_for(node)
61
+ region.source.comments_for(node)
62
+ end
63
+
64
+ # @param position [Solargraph::Position]
65
+ # @return [Pin::Closure, nil]
66
+ def named_path_pin position
67
+ pins.select{|pin| pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)}.last
68
+ end
69
+
70
+ # @todo Candidate for deprecation
71
+ # @param position [Solargraph::Position]
72
+ # @return [Pin::Closure, nil]
73
+ def block_pin position
74
+ # @todo determine if this can return a Pin::Block
75
+ pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
76
+ end
77
+
78
+ # @todo Candidate for deprecation
79
+ # @param position [Solargraph::Position]
80
+ # @return [Pin::Closure, nil]
81
+ def closure_pin position
82
+ pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,43 +1,45 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- # The processor classes used by SourceMap::Mapper to generate pins from
6
- # parser nodes.
7
- #
8
- module NodeProcessor
9
- autoload :Base, 'solargraph/parser/node_processor/base'
10
-
11
- class << self
12
- @@processors ||= {}
13
-
14
- # Register a processor for a node type.
15
- #
16
- # @param type [Symbol]
17
- # @param cls [Class<NodeProcessor::Base>]
18
- # @return [Class<NodeProcessor::Base>]
19
- def register type, cls
20
- @@processors[type] = cls
21
- end
22
- end
23
-
24
- # @param node [Parser::AST::Node]
25
- # @param region [Region]
26
- # @param pins [Array<Pin::Base>]
27
- # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
28
- def self.process node, region = Region.new, pins = [], locals = []
29
- if pins.empty?
30
- pins.push Pin::Namespace.new(
31
- location: region.source.location,
32
- name: ''
33
- )
34
- end
35
- return [pins, locals] unless Parser.is_ast_node?(node)
36
- klass = @@processors[node.type] || NodeProcessor::Base
37
- processor = klass.new(node, region, pins, locals)
38
- processor.process
39
- [processor.pins, processor.locals]
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ # The processor classes used by SourceMap::Mapper to generate pins from
6
+ # parser nodes.
7
+ #
8
+ module NodeProcessor
9
+ autoload :Base, 'solargraph/parser/node_processor/base'
10
+
11
+ class << self
12
+ # @type [Hash<Symbol, Class<NodeProcessor::Base>>]
13
+ @@processors ||= {}
14
+
15
+ # Register a processor for a node type.
16
+ #
17
+ # @param type [Symbol]
18
+ # @param cls [Class<NodeProcessor::Base>]
19
+ # @return [Class<NodeProcessor::Base>]
20
+ def register type, cls
21
+ @@processors[type] = cls
22
+ end
23
+ end
24
+
25
+ # @param node [Parser::AST::Node]
26
+ # @param region [Region]
27
+ # @param pins [Array<Pin::Base>]
28
+ # @param locals [Array<Pin::BaseVariable>]
29
+ # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
30
+ def self.process node, region = Region.new, pins = [], locals = []
31
+ if pins.empty?
32
+ pins.push Pin::Namespace.new(
33
+ location: region.source.location,
34
+ name: ''
35
+ )
36
+ end
37
+ return [pins, locals] unless Parser.is_ast_node?(node)
38
+ klass = @@processors[node.type] || NodeProcessor::Base
39
+ processor = klass.new(node, region, pins, locals)
40
+ processor.process
41
+ [processor.pins, processor.locals]
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,135 +1,153 @@
1
- require 'parser/current'
2
-
3
- module Solargraph
4
- module Parser
5
- module Legacy
6
- module ClassMethods
7
- # @param code [String]
8
- # @param filename [String]
9
- # @return [Array(Parser::AST::Node, Array<Parser::Source::Comment>)]
10
- def parse_with_comments code, filename = nil
11
- buffer = ::Parser::Source::Buffer.new(filename, 0)
12
- buffer.source = code
13
- node = parser.parse(buffer)
14
- comments = CommentRipper.new(code, filename, 0).parse
15
- [node, comments]
16
- rescue ::Parser::SyntaxError => e
17
- raise Parser::SyntaxError, e.message
18
- end
19
-
20
- # @param code [String]
21
- # @param filename [String, nil]
22
- # @param line [Integer]
23
- # @return [Parser::AST::Node]
24
- def parse code, filename = nil, line = 0
25
- buffer = ::Parser::Source::Buffer.new(filename, line)
26
- buffer.source = code
27
- parser.parse(buffer)
28
- rescue ::Parser::SyntaxError => e
29
- raise Parser::SyntaxError, e.message
30
- end
31
-
32
- # @return [Parser::Base]
33
- def parser
34
- # @todo Consider setting an instance variable. We might not need to
35
- # recreate the parser every time we use it.
36
- parser = ::Parser::CurrentRuby.new(FlawedBuilder.new)
37
- parser.diagnostics.all_errors_are_fatal = true
38
- parser.diagnostics.ignore_warnings = true
39
- parser
40
- end
41
-
42
- def map source
43
- NodeProcessor.process(source.node, Region.new(source: source))
44
- end
45
-
46
- def returns_from node
47
- NodeMethods.returns_from(node)
48
- end
49
-
50
- def references source, name
51
- if name.end_with?("=")
52
- reg = /#{Regexp.escape name[0..-2]}\s*=/
53
- extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
54
- else
55
- extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
56
- end
57
- inner_node_references(name, source.node).map do |n|
58
- rng = Range.from_node(n)
59
- offset = Position.to_offset(source.code, rng.start)
60
- soff, eoff = extract_offset[source.code, offset]
61
- Location.new(
62
- source.filename,
63
- Range.new(
64
- Position.from_offset(source.code, soff),
65
- Position.from_offset(source.code, eoff)
66
- )
67
- )
68
- end
69
- end
70
-
71
- # @param name [String]
72
- # @param top [AST::Node]
73
- # @return [Array<AST::Node>]
74
- def inner_node_references name, top
75
- result = []
76
- if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
77
- result.push top if top.children.any? { |c| c.to_s == name }
78
- top.children.each { |c| result.concat inner_node_references(name, c) }
79
- end
80
- result
81
- end
82
-
83
- def chain *args
84
- NodeChainer.chain *args
85
- end
86
-
87
- def chain_string *args
88
- NodeChainer.load_string *args
89
- end
90
-
91
- def process_node *args
92
- Solargraph::Parser::NodeProcessor.process *args
93
- end
94
-
95
- def infer_literal_node_type node
96
- NodeMethods.infer_literal_node_type node
97
- end
98
-
99
- def version
100
- parser.version
101
- end
102
-
103
- def is_ast_node? node
104
- node.is_a?(::Parser::AST::Node)
105
- end
106
-
107
- def node_range node
108
- st = Position.new(node.loc.line, node.loc.column)
109
- en = Position.new(node.loc.last_line, node.loc.last_column)
110
- Range.new(st, en)
111
- end
112
-
113
- def string_ranges node
114
- return [] unless is_ast_node?(node)
115
- result = []
116
- if node.type == :str
117
- result.push Range.from_node(node)
118
- end
119
- node.children.each do |child|
120
- result.concat string_ranges(child)
121
- end
122
- if node.type == :dstr && node.children.last.nil?
123
- last = node.children[-2]
124
- unless last.nil?
125
- rng = Range.from_node(last)
126
- pos = Position.new(rng.ending.line, rng.ending.column - 1)
127
- result.push Range.new(pos, pos)
128
- end
129
- end
130
- result
131
- end
132
- end
133
- end
134
- end
135
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'parser/current'
4
+ require 'parser/source/buffer'
5
+
6
+ module Solargraph
7
+ module Parser
8
+ module ParserGem
9
+ module ClassMethods
10
+ # @param code [String]
11
+ # @param filename [String, nil]
12
+ # @return [Array(Parser::AST::Node, Hash{Integer => String})]
13
+ def parse_with_comments code, filename = nil
14
+ node = parse(code, filename)
15
+ comments = CommentRipper.new(code, filename, 0).parse
16
+ [node, comments]
17
+ end
18
+
19
+ # @param code [String]
20
+ # @param filename [String, nil]
21
+ # @param line [Integer]
22
+ # @return [Parser::AST::Node]
23
+ def parse code, filename = nil, line = 0
24
+ buffer = ::Parser::Source::Buffer.new(filename, line)
25
+ buffer.source = code
26
+ parser.parse(buffer)
27
+ rescue ::Parser::SyntaxError, ::Parser::UnknownEncodingInMagicComment => e
28
+ raise Parser::SyntaxError, e.message
29
+ end
30
+
31
+ # @return [::Parser::Base]
32
+ def parser
33
+ # @todo Consider setting an instance variable. We might not need to
34
+ # recreate the parser every time we use it.
35
+ parser = ::Parser::CurrentRuby.new(FlawedBuilder.new)
36
+ parser.diagnostics.all_errors_are_fatal = true
37
+ parser.diagnostics.ignore_warnings = true
38
+ parser
39
+ end
40
+
41
+ # @param source [Source]
42
+ # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
43
+ def map source
44
+ NodeProcessor.process(source.node, Region.new(source: source))
45
+ end
46
+
47
+ # @param source [Source]
48
+ # @param name [String]
49
+ # @return [Array<Location>]
50
+ def references source, name
51
+ if name.end_with?("=")
52
+ reg = /#{Regexp.escape name[0..-2]}\s*=/
53
+ # @param code [String]
54
+ # @param offset [Integer]
55
+ # @return [Array(Integer, Integer), Array(nil, nil)]
56
+ extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
57
+ else
58
+ # @param code [String]
59
+ # @param offset [Integer]
60
+ # @return [Array(Integer, Integer), Array(nil, nil)]
61
+ extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
62
+ end
63
+ inner_node_references(name, source.node).map do |n|
64
+ rng = Range.from_node(n)
65
+ offset = Position.to_offset(source.code, rng.start)
66
+ soff, eoff = extract_offset[source.code, offset]
67
+ Location.new(
68
+ source.filename,
69
+ Range.new(
70
+ Position.from_offset(source.code, soff),
71
+ Position.from_offset(source.code, eoff)
72
+ )
73
+ )
74
+ end
75
+ end
76
+
77
+ # @param name [String]
78
+ # @param top [AST::Node]
79
+ # @return [Array<AST::Node>]
80
+ def inner_node_references name, top
81
+ result = []
82
+ if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
83
+ result.push top if top.children.any? { |c| c.to_s == name }
84
+ top.children.each { |c| result.concat inner_node_references(name, c) }
85
+ end
86
+ result
87
+ end
88
+
89
+ # @return [Source::Chain]
90
+ def chain *args
91
+ NodeChainer.chain *args
92
+ end
93
+
94
+ # @return [Source::Chain]
95
+ def chain_string *args
96
+ NodeChainer.load_string *args
97
+ end
98
+
99
+ # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
100
+ def process_node *args
101
+ Solargraph::Parser::NodeProcessor.process *args
102
+ end
103
+
104
+ # @param node [Parser::AST::Node]
105
+ # @return [String, nil]
106
+ def infer_literal_node_type node
107
+ NodeMethods.infer_literal_node_type node
108
+ end
109
+
110
+ # @return [Integer]
111
+ def version
112
+ parser.version
113
+ end
114
+
115
+ # @param node [BasicObject]
116
+ # @return [Boolean]
117
+ def is_ast_node? node
118
+ node.is_a?(::Parser::AST::Node)
119
+ end
120
+
121
+ # @param node [Parser::AST::Node]
122
+ # @return [Range]
123
+ def node_range node
124
+ st = Position.new(node.loc.line, node.loc.column)
125
+ en = Position.new(node.loc.last_line, node.loc.last_column)
126
+ Range.new(st, en)
127
+ end
128
+
129
+ # @param node [Parser::AST::Node]
130
+ # @return [Array<Range>]
131
+ def string_ranges node
132
+ return [] unless is_ast_node?(node)
133
+ result = []
134
+ if node.type == :str
135
+ result.push Range.from_node(node)
136
+ end
137
+ node.children.each do |child|
138
+ result.concat string_ranges(child)
139
+ end
140
+ if node.type == :dstr && node.children.last.nil?
141
+ last = node.children[-2]
142
+ unless last.nil?
143
+ rng = Range.from_node(last)
144
+ pos = Position.new(rng.ending.line, rng.ending.column - 1)
145
+ result.push Range.new(pos, pos)
146
+ end
147
+ end
148
+ result
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -1,16 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module Legacy
6
- # A custom builder for source parsers that ignores character encoding
7
- # issues in literal strings.
8
- #
9
- class FlawedBuilder < ::Parser::Builders::Default
10
- def string_value(token)
11
- value(token)
12
- end
13
- end
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ # A custom builder for source parsers that ignores character encoding
7
+ # issues in literal strings.
8
+ #
9
+ class FlawedBuilder < ::Parser::Builders::Default
10
+ # @param token [::Parser::AST::Node]
11
+ # @return [String]
12
+ def string_value(token)
13
+ value(token)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end