solargraph 0.54.4 → 0.58.3

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 (238) 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 +185 -6
  5. data/.github/workflows/rspec.yml +55 -5
  6. data/.github/workflows/typecheck.yml +8 -3
  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 +1 -0
  13. data/CHANGELOG.md +143 -0
  14. data/README.md +20 -6
  15. data/Rakefile +125 -13
  16. data/bin/solargraph +3 -0
  17. data/lib/solargraph/api_map/cache.rb +110 -109
  18. data/lib/solargraph/api_map/constants.rb +279 -0
  19. data/lib/solargraph/api_map/index.rb +193 -167
  20. data/lib/solargraph/api_map/source_to_yard.rb +97 -88
  21. data/lib/solargraph/api_map/store.rb +384 -241
  22. data/lib/solargraph/api_map.rb +945 -875
  23. data/lib/solargraph/bench.rb +45 -28
  24. data/lib/solargraph/complex_type/type_methods.rb +228 -217
  25. data/lib/solargraph/complex_type/unique_type.rb +482 -386
  26. data/lib/solargraph/complex_type.rb +444 -394
  27. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  28. data/lib/solargraph/convention/base.rb +20 -3
  29. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  30. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  31. data/lib/solargraph/convention/data_definition.rb +105 -0
  32. data/lib/solargraph/convention/gemfile.rb +15 -15
  33. data/lib/solargraph/convention/gemspec.rb +23 -22
  34. data/lib/solargraph/convention/rakefile.rb +17 -17
  35. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  36. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  37. data/lib/solargraph/convention/struct_definition.rb +164 -0
  38. data/lib/solargraph/convention.rb +78 -47
  39. data/lib/solargraph/converters/dd.rb +17 -17
  40. data/lib/solargraph/converters/dl.rb +15 -15
  41. data/lib/solargraph/converters/dt.rb +15 -15
  42. data/lib/solargraph/converters/misc.rb +1 -1
  43. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  44. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  45. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  46. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  47. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  48. data/lib/solargraph/doc_map.rb +439 -188
  49. data/lib/solargraph/environ.rb +9 -2
  50. data/lib/solargraph/equality.rb +34 -33
  51. data/lib/solargraph/gem_pins.rb +98 -72
  52. data/lib/solargraph/language_server/error_codes.rb +20 -20
  53. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  54. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  55. data/lib/solargraph/language_server/host/message_worker.rb +112 -106
  56. data/lib/solargraph/language_server/host/sources.rb +99 -99
  57. data/lib/solargraph/language_server/host.rb +878 -861
  58. data/lib/solargraph/language_server/message/base.rb +97 -96
  59. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  60. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
  62. data/lib/solargraph/language_server/message/extended/document.rb +23 -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 -19
  65. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  66. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  67. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  68. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  69. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  71. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  72. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  73. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  74. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  75. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  76. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  77. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  78. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  79. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  80. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
  81. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  82. data/lib/solargraph/language_server/message.rb +94 -94
  83. data/lib/solargraph/language_server/progress.rb +8 -0
  84. data/lib/solargraph/language_server/request.rb +27 -24
  85. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  86. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  87. data/lib/solargraph/library.rb +683 -662
  88. data/lib/solargraph/location.rb +82 -58
  89. data/lib/solargraph/logging.rb +37 -27
  90. data/lib/solargraph/page.rb +92 -89
  91. data/lib/solargraph/parser/comment_ripper.rb +69 -56
  92. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  93. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  94. data/lib/solargraph/parser/node_processor.rb +62 -45
  95. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
  96. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
  97. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  98. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
  99. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  100. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  101. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
  102. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  103. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
  104. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  106. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
  107. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
  108. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  109. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  110. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
  111. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
  112. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  113. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
  114. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  115. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  116. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
  117. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
  118. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
  119. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
  120. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  121. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  122. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
  123. data/lib/solargraph/parser/parser_gem.rb +12 -12
  124. data/lib/solargraph/parser/region.rb +69 -66
  125. data/lib/solargraph/parser/snippet.rb +17 -15
  126. data/lib/solargraph/parser.rb +23 -22
  127. data/lib/solargraph/pin/base.rb +729 -378
  128. data/lib/solargraph/pin/base_variable.rb +126 -118
  129. data/lib/solargraph/pin/block.rb +104 -101
  130. data/lib/solargraph/pin/breakable.rb +9 -0
  131. data/lib/solargraph/pin/callable.rb +231 -147
  132. data/lib/solargraph/pin/closure.rb +72 -57
  133. data/lib/solargraph/pin/common.rb +79 -70
  134. data/lib/solargraph/pin/constant.rb +45 -43
  135. data/lib/solargraph/pin/conversions.rb +123 -123
  136. data/lib/solargraph/pin/delegated_method.rb +120 -101
  137. data/lib/solargraph/pin/documenting.rb +114 -98
  138. data/lib/solargraph/pin/instance_variable.rb +34 -34
  139. data/lib/solargraph/pin/keyword.rb +20 -15
  140. data/lib/solargraph/pin/local_variable.rb +75 -67
  141. data/lib/solargraph/pin/method.rb +672 -527
  142. data/lib/solargraph/pin/method_alias.rb +34 -31
  143. data/lib/solargraph/pin/namespace.rb +115 -107
  144. data/lib/solargraph/pin/parameter.rb +275 -212
  145. data/lib/solargraph/pin/proxy_type.rb +39 -29
  146. data/lib/solargraph/pin/reference/override.rb +47 -29
  147. data/lib/solargraph/pin/reference/require.rb +2 -2
  148. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  149. data/lib/solargraph/pin/reference.rb +39 -22
  150. data/lib/solargraph/pin/search.rb +61 -56
  151. data/lib/solargraph/pin/signature.rb +61 -17
  152. data/lib/solargraph/pin/singleton.rb +1 -1
  153. data/lib/solargraph/pin/symbol.rb +53 -47
  154. data/lib/solargraph/pin/until.rb +18 -0
  155. data/lib/solargraph/pin/while.rb +18 -0
  156. data/lib/solargraph/pin.rb +44 -41
  157. data/lib/solargraph/pin_cache.rb +245 -0
  158. data/lib/solargraph/position.rb +132 -107
  159. data/lib/solargraph/range.rb +112 -98
  160. data/lib/solargraph/rbs_map/conversions.rb +823 -646
  161. data/lib/solargraph/rbs_map/core_fills.rb +84 -50
  162. data/lib/solargraph/rbs_map/core_map.rb +58 -28
  163. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
  164. data/lib/solargraph/rbs_map.rb +163 -93
  165. data/lib/solargraph/server_methods.rb +16 -16
  166. data/lib/solargraph/shell.rb +363 -269
  167. data/lib/solargraph/source/chain/array.rb +37 -33
  168. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  169. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  170. data/lib/solargraph/source/chain/call.rb +337 -303
  171. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  172. data/lib/solargraph/source/chain/constant.rb +26 -89
  173. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  174. data/lib/solargraph/source/chain/hash.rb +34 -33
  175. data/lib/solargraph/source/chain/head.rb +1 -1
  176. data/lib/solargraph/source/chain/if.rb +28 -28
  177. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  178. data/lib/solargraph/source/chain/link.rb +109 -98
  179. data/lib/solargraph/source/chain/literal.rb +48 -28
  180. data/lib/solargraph/source/chain/or.rb +23 -23
  181. data/lib/solargraph/source/chain/q_call.rb +11 -11
  182. data/lib/solargraph/source/chain/variable.rb +13 -13
  183. data/lib/solargraph/source/chain/z_super.rb +30 -30
  184. data/lib/solargraph/source/chain.rb +291 -252
  185. data/lib/solargraph/source/change.rb +82 -82
  186. data/lib/solargraph/source/cursor.rb +166 -167
  187. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  188. data/lib/solargraph/source/source_chainer.rb +194 -194
  189. data/lib/solargraph/source/updater.rb +55 -55
  190. data/lib/solargraph/source.rb +498 -495
  191. data/lib/solargraph/source_map/clip.rb +226 -232
  192. data/lib/solargraph/source_map/data.rb +34 -30
  193. data/lib/solargraph/source_map/mapper.rb +259 -255
  194. data/lib/solargraph/source_map.rb +212 -217
  195. data/lib/solargraph/type_checker/checks.rb +124 -120
  196. data/lib/solargraph/type_checker/param_def.rb +37 -35
  197. data/lib/solargraph/type_checker/problem.rb +32 -32
  198. data/lib/solargraph/type_checker/rules.rb +84 -62
  199. data/lib/solargraph/type_checker.rb +814 -672
  200. data/lib/solargraph/version.rb +5 -5
  201. data/lib/solargraph/views/_method.erb +10 -10
  202. data/lib/solargraph/views/_namespace.erb +3 -3
  203. data/lib/solargraph/views/document.erb +10 -10
  204. data/lib/solargraph/workspace/config.rb +255 -239
  205. data/lib/solargraph/workspace/require_paths.rb +97 -0
  206. data/lib/solargraph/workspace.rb +220 -239
  207. data/lib/solargraph/yard_map/helpers.rb +44 -16
  208. data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
  209. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
  210. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
  211. data/lib/solargraph/yard_map/mapper.rb +79 -78
  212. data/lib/solargraph/yard_map/to_method.rb +89 -86
  213. data/lib/solargraph/yard_tags.rb +20 -20
  214. data/lib/solargraph/yardoc.rb +87 -52
  215. data/lib/solargraph.rb +105 -72
  216. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  217. data/rbs/fills/open3/0/open3.rbs +172 -0
  218. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  219. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  220. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  221. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  222. data/rbs/fills/tuple/tuple.rbs +149 -0
  223. data/rbs/shims/ast/0/node.rbs +5 -0
  224. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  225. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  226. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  227. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  228. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  229. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  230. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  231. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  232. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  233. data/rbs_collection.yaml +19 -0
  234. data/solargraph.gemspec +27 -5
  235. metadata +215 -18
  236. data/lib/.rubocop.yml +0 -22
  237. data/lib/solargraph/cache.rb +0 -77
  238. data/lib/solargraph/parser/node_methods.rb +0 -83
@@ -1,157 +1,149 @@
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
- buffer = ::Parser::Source::Buffer.new(filename, 0)
15
- buffer.source = code
16
- node = parser.parse(buffer)
17
- comments = CommentRipper.new(code, filename, 0).parse
18
- [node, comments]
19
- rescue ::Parser::SyntaxError => e
20
- raise Parser::SyntaxError, e.message
21
- end
22
-
23
- # @param code [String]
24
- # @param filename [String, nil]
25
- # @param line [Integer]
26
- # @return [Parser::AST::Node]
27
- def parse code, filename = nil, line = 0
28
- buffer = ::Parser::Source::Buffer.new(filename, line)
29
- buffer.source = code
30
- parser.parse(buffer)
31
- rescue ::Parser::SyntaxError => e
32
- raise Parser::SyntaxError, e.message
33
- end
34
-
35
- # @return [::Parser::Base]
36
- def parser
37
- # @todo Consider setting an instance variable. We might not need to
38
- # recreate the parser every time we use it.
39
- parser = ::Parser::CurrentRuby.new(FlawedBuilder.new)
40
- parser.diagnostics.all_errors_are_fatal = true
41
- parser.diagnostics.ignore_warnings = true
42
- parser
43
- end
44
-
45
- # @param source [Source]
46
- # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
47
- def map source
48
- NodeProcessor.process(source.node, Region.new(source: source))
49
- end
50
-
51
- # @param source [Source]
52
- # @param name [String]
53
- # @return [Array<Location>]
54
- def references source, name
55
- if name.end_with?("=")
56
- reg = /#{Regexp.escape name[0..-2]}\s*=/
57
- # @param code [String]
58
- # @param offset [Integer]
59
- # @return [Array(Integer, Integer), Array(nil, nil)]
60
- extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
61
- else
62
- # @param code [String]
63
- # @param offset [Integer]
64
- # @return [Array(Integer, Integer), Array(nil, nil)]
65
- extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
66
- end
67
- inner_node_references(name, source.node).map do |n|
68
- rng = Range.from_node(n)
69
- offset = Position.to_offset(source.code, rng.start)
70
- soff, eoff = extract_offset[source.code, offset]
71
- Location.new(
72
- source.filename,
73
- Range.new(
74
- Position.from_offset(source.code, soff),
75
- Position.from_offset(source.code, eoff)
76
- )
77
- )
78
- end
79
- end
80
-
81
- # @param name [String]
82
- # @param top [AST::Node]
83
- # @return [Array<AST::Node>]
84
- def inner_node_references name, top
85
- result = []
86
- if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
87
- result.push top if top.children.any? { |c| c.to_s == name }
88
- top.children.each { |c| result.concat inner_node_references(name, c) }
89
- end
90
- result
91
- end
92
-
93
- # @return [Source::Chain]
94
- def chain *args
95
- NodeChainer.chain *args
96
- end
97
-
98
- # @return [Source::Chain]
99
- def chain_string *args
100
- NodeChainer.load_string *args
101
- end
102
-
103
- # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
104
- def process_node *args
105
- Solargraph::Parser::NodeProcessor.process *args
106
- end
107
-
108
- # @param node [Parser::AST::Node]
109
- # @return [String, nil]
110
- def infer_literal_node_type node
111
- NodeMethods.infer_literal_node_type node
112
- end
113
-
114
- # @return [Integer]
115
- def version
116
- parser.version
117
- end
118
-
119
- # @param node [BasicObject]
120
- # @return [Boolean]
121
- def is_ast_node? node
122
- node.is_a?(::Parser::AST::Node)
123
- end
124
-
125
- # @param node [Parser::AST::Node]
126
- # @return [Range]
127
- def node_range node
128
- st = Position.new(node.loc.line, node.loc.column)
129
- en = Position.new(node.loc.last_line, node.loc.last_column)
130
- Range.new(st, en)
131
- end
132
-
133
- # @param node [Parser::AST::Node]
134
- # @return [Array<Range>]
135
- def string_ranges node
136
- return [] unless is_ast_node?(node)
137
- result = []
138
- if node.type == :str
139
- result.push Range.from_node(node)
140
- end
141
- node.children.each do |child|
142
- result.concat string_ranges(child)
143
- end
144
- if node.type == :dstr && node.children.last.nil?
145
- last = node.children[-2]
146
- unless last.nil?
147
- rng = Range.from_node(last)
148
- pos = Position.new(rng.ending.line, rng.ending.column - 1)
149
- result.push Range.new(pos, pos)
150
- end
151
- end
152
- result
153
- end
154
- end
155
- end
156
- end
157
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'prism'
4
+
5
+ module Solargraph
6
+ module Parser
7
+ module ParserGem
8
+ module ClassMethods
9
+ # @param code [String]
10
+ # @param filename [String, nil]
11
+ # @return [Array(Parser::AST::Node, Hash{Integer => Solargraph::Parser::Snippet})]
12
+ def parse_with_comments code, filename = nil
13
+ node = parse(code, filename)
14
+ comments = CommentRipper.new(code, filename, 0).parse
15
+ [node, comments]
16
+ end
17
+
18
+ # @param code [String]
19
+ # @param filename [String, nil]
20
+ # @param line [Integer]
21
+ # @return [Parser::AST::Node]
22
+ def parse code, filename = nil, line = 0
23
+ buffer = ::Parser::Source::Buffer.new(filename, line)
24
+ buffer.source = code
25
+ parser.parse(buffer)
26
+ rescue ::Parser::SyntaxError, ::Parser::UnknownEncodingInMagicComment => e
27
+ raise Parser::SyntaxError, e.message
28
+ end
29
+
30
+ # @return [::Parser::Base]
31
+ def parser
32
+ @parser ||= Prism::Translation::Parser.new(FlawedBuilder.new).tap do |parser|
33
+ parser.diagnostics.all_errors_are_fatal = true
34
+ parser.diagnostics.ignore_warnings = true
35
+ end
36
+ end
37
+
38
+ # @param source [Source]
39
+ # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
40
+ def map source
41
+ NodeProcessor.process(source.node, Region.new(source: source))
42
+ end
43
+
44
+ # @param source [Source]
45
+ # @param name [String]
46
+ # @return [Array<Location>]
47
+ def references source, name
48
+ if name.end_with?("=")
49
+ reg = /#{Regexp.escape name[0..-2]}\s*=/
50
+ # @param code [String]
51
+ # @param offset [Integer]
52
+ # @return [Array(Integer, Integer), Array(nil, nil)]
53
+ extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
54
+ else
55
+ # @param code [String]
56
+ # @param offset [Integer]
57
+ # @return [Array(Integer, Integer), Array(nil, nil)]
58
+ extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
59
+ end
60
+ inner_node_references(name, source.node).map do |n|
61
+ rng = Range.from_node(n)
62
+ offset = Position.to_offset(source.code, rng.start)
63
+ soff, eoff = extract_offset[source.code, offset]
64
+ Location.new(
65
+ source.filename,
66
+ Range.new(
67
+ Position.from_offset(source.code, soff),
68
+ Position.from_offset(source.code, eoff)
69
+ )
70
+ )
71
+ end
72
+ end
73
+
74
+ # @param name [String]
75
+ # @param top [AST::Node]
76
+ # @return [Array<AST::Node>]
77
+ def inner_node_references name, top
78
+ # @type [Array<AST::Node>]
79
+ result = []
80
+ if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
81
+ result.push top if top.children.any? { |c| c.to_s == name }
82
+ top.children.each { |c| result.concat inner_node_references(name, c) }
83
+ end
84
+ result
85
+ end
86
+
87
+ # @return [Source::Chain]
88
+ def chain *args
89
+ NodeChainer.chain *args
90
+ end
91
+
92
+ # @return [Source::Chain]
93
+ def chain_string *args
94
+ NodeChainer.load_string *args
95
+ end
96
+
97
+ # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
98
+ def process_node *args
99
+ Solargraph::Parser::NodeProcessor.process *args
100
+ end
101
+
102
+ # @param node [Parser::AST::Node]
103
+ # @return [String, nil]
104
+ def infer_literal_node_type node
105
+ NodeMethods.infer_literal_node_type node
106
+ end
107
+
108
+ # @return [Integer]
109
+ def version
110
+ parser.version
111
+ end
112
+
113
+ # @param node [BasicObject]
114
+ # @return [Boolean]
115
+ def is_ast_node? node
116
+ node.is_a?(::Parser::AST::Node)
117
+ end
118
+
119
+ # @param node [Parser::AST::Node]
120
+ # @return [Range]
121
+ def node_range node
122
+ st = Position.new(node.loc.line, node.loc.column)
123
+ en = Position.new(node.loc.last_line, node.loc.last_column)
124
+ Range.new(st, en)
125
+ end
126
+
127
+ # @param node [Parser::AST::Node]
128
+ # @return [Array<Range>]
129
+ def string_ranges node
130
+ return [] unless is_ast_node?(node)
131
+ result = []
132
+ result.push Range.from_node(node) if node.type == :str
133
+ node.children.each do |child|
134
+ result.concat string_ranges(child)
135
+ end
136
+ if node.type == :dstr && node.children.last.nil?
137
+ last = node.children[-2]
138
+ unless last.nil?
139
+ rng = Range.from_node(last)
140
+ pos = Position.new(rng.ending.line, rng.ending.column - 1)
141
+ result.push Range.new(pos, pos)
142
+ end
143
+ end
144
+ result
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,18 +1,19 @@
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
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
+ # @sg-ignore
13
+ def string_value(token)
14
+ value(token)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end