solargraph 0.57.0 → 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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +4 -2
  4. data/.github/workflows/plugins.yml +63 -28
  5. data/.github/workflows/rspec.yml +19 -4
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.gitignore +1 -0
  8. data/.rubocop.yml +1 -1
  9. data/.rubocop_todo.yml +90 -1438
  10. data/CHANGELOG.md +39 -0
  11. data/Rakefile +1 -1
  12. data/bin/solargraph +3 -0
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +279 -218
  15. data/lib/solargraph/api_map/index.rb +193 -169
  16. data/lib/solargraph/api_map/source_to_yard.rb +97 -94
  17. data/lib/solargraph/api_map/store.rb +384 -374
  18. data/lib/solargraph/api_map.rb +945 -951
  19. data/lib/solargraph/bench.rb +45 -45
  20. data/lib/solargraph/complex_type/type_methods.rb +228 -223
  21. data/lib/solargraph/complex_type/unique_type.rb +482 -475
  22. data/lib/solargraph/complex_type.rb +444 -427
  23. data/lib/solargraph/convention/active_support_concern.rb +1 -1
  24. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  25. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
  26. data/lib/solargraph/convention/data_definition.rb +105 -105
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +23 -23
  29. data/lib/solargraph/convention/rakefile.rb +17 -17
  30. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
  31. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
  32. data/lib/solargraph/convention/struct_definition.rb +164 -164
  33. data/lib/solargraph/convention.rb +78 -78
  34. data/lib/solargraph/converters/dd.rb +17 -17
  35. data/lib/solargraph/converters/dl.rb +15 -15
  36. data/lib/solargraph/converters/dt.rb +15 -15
  37. data/lib/solargraph/converters/misc.rb +1 -1
  38. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  39. data/lib/solargraph/diagnostics/rubocop.rb +118 -118
  40. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  41. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  42. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  43. data/lib/solargraph/doc_map.rb +439 -436
  44. data/lib/solargraph/environ.rb +1 -1
  45. data/lib/solargraph/equality.rb +34 -33
  46. data/lib/solargraph/gem_pins.rb +98 -94
  47. data/lib/solargraph/language_server/error_codes.rb +20 -20
  48. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  49. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  50. data/lib/solargraph/language_server/host/message_worker.rb +112 -112
  51. data/lib/solargraph/language_server/host/sources.rb +99 -99
  52. data/lib/solargraph/language_server/host.rb +878 -872
  53. data/lib/solargraph/language_server/message/base.rb +97 -97
  54. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  55. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  56. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  57. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  58. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  59. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  60. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  61. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  62. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  63. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
  64. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  65. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  66. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -145
  67. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  68. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  69. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  71. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  72. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
  73. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  74. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  75. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
  76. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  77. data/lib/solargraph/language_server/message.rb +94 -94
  78. data/lib/solargraph/language_server/progress.rb +1 -1
  79. data/lib/solargraph/language_server/request.rb +27 -25
  80. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  81. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  82. data/lib/solargraph/library.rb +683 -683
  83. data/lib/solargraph/location.rb +82 -81
  84. data/lib/solargraph/logging.rb +37 -37
  85. data/lib/solargraph/page.rb +92 -93
  86. data/lib/solargraph/parser/comment_ripper.rb +69 -69
  87. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
  88. data/lib/solargraph/parser/node_processor/base.rb +92 -92
  89. data/lib/solargraph/parser/node_processor.rb +62 -62
  90. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -159
  91. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  92. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
  93. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -499
  94. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -21
  95. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  96. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  97. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  98. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  99. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
  100. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
  101. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  102. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  103. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
  104. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -42
  105. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  106. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
  107. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -43
  108. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -292
  109. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  110. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  111. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
  112. data/lib/solargraph/parser/parser_gem.rb +12 -12
  113. data/lib/solargraph/parser/region.rb +69 -69
  114. data/lib/solargraph/parser/snippet.rb +17 -17
  115. data/lib/solargraph/parser.rb +23 -23
  116. data/lib/solargraph/pin/base.rb +729 -708
  117. data/lib/solargraph/pin/base_variable.rb +126 -124
  118. data/lib/solargraph/pin/block.rb +104 -103
  119. data/lib/solargraph/pin/breakable.rb +9 -9
  120. data/lib/solargraph/pin/callable.rb +231 -227
  121. data/lib/solargraph/pin/closure.rb +72 -76
  122. data/lib/solargraph/pin/common.rb +79 -79
  123. data/lib/solargraph/pin/constant.rb +45 -45
  124. data/lib/solargraph/pin/conversions.rb +123 -123
  125. data/lib/solargraph/pin/delegated_method.rb +120 -121
  126. data/lib/solargraph/pin/documenting.rb +114 -114
  127. data/lib/solargraph/pin/instance_variable.rb +34 -34
  128. data/lib/solargraph/pin/keyword.rb +20 -20
  129. data/lib/solargraph/pin/local_variable.rb +75 -79
  130. data/lib/solargraph/pin/method.rb +672 -656
  131. data/lib/solargraph/pin/method_alias.rb +34 -34
  132. data/lib/solargraph/pin/namespace.rb +115 -115
  133. data/lib/solargraph/pin/parameter.rb +275 -271
  134. data/lib/solargraph/pin/proxy_type.rb +39 -36
  135. data/lib/solargraph/pin/reference/override.rb +47 -47
  136. data/lib/solargraph/pin/reference/superclass.rb +15 -15
  137. data/lib/solargraph/pin/reference.rb +39 -48
  138. data/lib/solargraph/pin/search.rb +61 -58
  139. data/lib/solargraph/pin/signature.rb +61 -61
  140. data/lib/solargraph/pin/symbol.rb +53 -53
  141. data/lib/solargraph/pin/until.rb +18 -18
  142. data/lib/solargraph/pin/while.rb +18 -18
  143. data/lib/solargraph/pin.rb +44 -44
  144. data/lib/solargraph/pin_cache.rb +245 -245
  145. data/lib/solargraph/position.rb +132 -118
  146. data/lib/solargraph/range.rb +112 -108
  147. data/lib/solargraph/rbs_map/conversions.rb +823 -802
  148. data/lib/solargraph/rbs_map/core_fills.rb +84 -66
  149. data/lib/solargraph/rbs_map/core_map.rb +58 -54
  150. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  151. data/lib/solargraph/rbs_map.rb +163 -163
  152. data/lib/solargraph/server_methods.rb +16 -16
  153. data/lib/solargraph/shell.rb +363 -271
  154. data/lib/solargraph/source/chain/array.rb +37 -37
  155. data/lib/solargraph/source/chain/call.rb +337 -333
  156. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  157. data/lib/solargraph/source/chain/constant.rb +26 -89
  158. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  159. data/lib/solargraph/source/chain/hash.rb +34 -34
  160. data/lib/solargraph/source/chain/if.rb +28 -28
  161. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  162. data/lib/solargraph/source/chain/link.rb +109 -109
  163. data/lib/solargraph/source/chain/literal.rb +48 -48
  164. data/lib/solargraph/source/chain/or.rb +23 -23
  165. data/lib/solargraph/source/chain/q_call.rb +11 -11
  166. data/lib/solargraph/source/chain/variable.rb +13 -13
  167. data/lib/solargraph/source/chain/z_super.rb +30 -30
  168. data/lib/solargraph/source/chain.rb +291 -289
  169. data/lib/solargraph/source/change.rb +82 -82
  170. data/lib/solargraph/source/cursor.rb +166 -166
  171. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  172. data/lib/solargraph/source/source_chainer.rb +194 -194
  173. data/lib/solargraph/source/updater.rb +55 -55
  174. data/lib/solargraph/source.rb +498 -498
  175. data/lib/solargraph/source_map/clip.rb +226 -234
  176. data/lib/solargraph/source_map/data.rb +34 -34
  177. data/lib/solargraph/source_map/mapper.rb +259 -261
  178. data/lib/solargraph/source_map.rb +212 -207
  179. data/lib/solargraph/type_checker/checks.rb +124 -124
  180. data/lib/solargraph/type_checker/param_def.rb +37 -37
  181. data/lib/solargraph/type_checker/problem.rb +32 -32
  182. data/lib/solargraph/type_checker/rules.rb +84 -70
  183. data/lib/solargraph/type_checker.rb +814 -752
  184. data/lib/solargraph/version.rb +5 -5
  185. data/lib/solargraph/workspace/config.rb +255 -237
  186. data/lib/solargraph/workspace/require_paths.rb +97 -98
  187. data/lib/solargraph/workspace.rb +220 -225
  188. data/lib/solargraph/yard_map/helpers.rb +44 -44
  189. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -129
  190. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -30
  191. data/lib/solargraph/yard_map/mapper.rb +79 -79
  192. data/lib/solargraph/yard_map/to_method.rb +89 -88
  193. data/lib/solargraph/yard_tags.rb +20 -20
  194. data/lib/solargraph/yardoc.rb +87 -64
  195. data/lib/solargraph.rb +105 -105
  196. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  197. data/rbs/fills/open3/0/open3.rbs +172 -0
  198. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  199. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  200. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  201. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  202. data/rbs/shims/ast/0/node.rbs +5 -0
  203. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  204. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  205. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  206. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  207. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  208. data/rbs_collection.yaml +4 -4
  209. data/solargraph.gemspec +15 -4
  210. metadata +71 -16
  211. data/lib/solargraph/parser/node_methods.rb +0 -97
  212. /data/rbs/fills/{tuple.rbs → tuple/tuple.rbs} +0 -0
  213. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  214. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  215. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  216. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class ClassVariable < Link
7
- def resolve api_map, name_pin, locals
8
- api_map.get_class_variable_pins(name_pin.context.namespace).select{|p| p.name == word}
9
- end
10
- end
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class ClassVariable < Link
7
+ def resolve api_map, name_pin, locals
8
+ api_map.get_class_variable_pins(name_pin.context.namespace).select{|p| p.name == word}
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,89 +1,26 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class Constant < Link
7
- def initialize word
8
- @word = word
9
- end
10
-
11
- def resolve api_map, name_pin, locals
12
- return [Pin::ROOT_PIN] if word.empty?
13
- if word.start_with?('::')
14
- base = word[2..-1]
15
- gates = ['']
16
- else
17
- base = word
18
- gates = crawl_gates(name_pin)
19
- end
20
- parts = base.split('::')
21
- gates.each do |gate|
22
- # @todo 'Wrong argument type for
23
- # Solargraph::Source::Chain::Constant#deep_constant_type:
24
- # gate expected String, received generic<Elem>' is because
25
- # we lose 'rooted' information in the 'Chain::Array' class
26
- # internally, leaving ::Array#each shadowed when it
27
- # shouldn't be.
28
- type = deep_constant_type(gate, api_map)
29
- # Use deep inference to resolve root
30
- parts[0..-2].each do |sym|
31
- pins = api_map.get_constants('', type.namespace).select{ |pin| pin.name == sym }
32
- type = first_pin_type(pins, api_map)
33
- break if type.undefined?
34
- end
35
- next if type.undefined?
36
- result = api_map.get_constants('', type.namespace).select { |pin| pin.name == parts.last }
37
- return result unless result.empty?
38
- end
39
- []
40
- end
41
-
42
- private
43
-
44
- # @param pin [Pin::Closure]
45
- # @return [::Array<String>]
46
- def crawl_gates pin
47
- clos = pin
48
- until clos.nil?
49
- if clos.is_a?(Pin::Namespace)
50
- gates = clos.gates
51
- gates.push('') if gates.empty?
52
- return gates
53
- end
54
- clos = clos.closure
55
- end
56
- ['']
57
- end
58
-
59
- # @param pins [::Array<Pin::Base>]
60
- # @param api_map [ApiMap]
61
- # @return [ComplexType]
62
- def first_pin_type(pins, api_map)
63
- type = ComplexType::UNDEFINED
64
- pins.each do |pin|
65
- type = pin.typify(api_map)
66
- break if type.defined?
67
- type = pin.probe(api_map)
68
- break if type.defined?
69
- end
70
- type
71
- end
72
-
73
- # @param gate [String]
74
- # @param api_map [ApiMap]
75
- # @return [ComplexType]
76
- def deep_constant_type(gate, api_map)
77
- type = ComplexType::ROOT
78
- return type if gate == ''
79
- gate.split('::').each do |word|
80
- pins = api_map.get_constants('', type.namespace).select { |pin| pin.name == word }
81
- type = first_pin_type(pins, api_map)
82
- break if type.undefined?
83
- end
84
- type
85
- end
86
- end
87
- end
88
- end
89
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class Constant < Link
7
+ def initialize word
8
+ @word = word
9
+ end
10
+
11
+ def resolve api_map, name_pin, locals
12
+ return [Pin::ROOT_PIN] if word.empty?
13
+ if word.start_with?('::')
14
+ base = word[2..-1]
15
+ gates = ['']
16
+ else
17
+ base = word
18
+ gates = name_pin.gates
19
+ end
20
+ fqns = api_map.resolve(base, gates)
21
+ api_map.get_path_pins(fqns)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class GlobalVariable < Link
7
- def resolve api_map, name_pin, locals
8
- api_map.get_global_variable_pins.select{|p| p.name == word}
9
- end
10
- end
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class GlobalVariable < Link
7
+ def resolve api_map, name_pin, locals
8
+ api_map.get_global_variable_pins.select{|p| p.name == word}
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,34 +1,34 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class Hash < Literal
7
- # @param type [String]
8
- # @param node [Parser::AST::Node]
9
- # @param splatted [Boolean]
10
- def initialize type, node, splatted = false
11
- super(type, node)
12
- @splatted = splatted
13
- end
14
-
15
- # @sg-ignore Fix "Not enough arguments to Module#protected"
16
- protected def equality_fields
17
- super + [@splatted]
18
- end
19
-
20
- def word
21
- @word ||= "<#{@type}>"
22
- end
23
-
24
- def resolve api_map, name_pin, locals
25
- [Pin::ProxyType.anonymous(@complex_type, source: :chain)]
26
- end
27
-
28
- def splatted?
29
- @splatted
30
- end
31
- end
32
- end
33
- end
34
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class Hash < Literal
7
+ # @param type [String]
8
+ # @param node [Parser::AST::Node]
9
+ # @param splatted [Boolean]
10
+ def initialize type, node, splatted = false
11
+ super(type, node)
12
+ @splatted = splatted
13
+ end
14
+
15
+ # @sg-ignore Fix "Not enough arguments to Module#protected"
16
+ protected def equality_fields
17
+ super + [@splatted]
18
+ end
19
+
20
+ def word
21
+ @word ||= "<#{@type}>"
22
+ end
23
+
24
+ def resolve api_map, name_pin, locals
25
+ [Pin::ProxyType.anonymous(@complex_type, source: :chain)]
26
+ end
27
+
28
+ def splatted?
29
+ @splatted
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,28 +1,28 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class If < Link
7
- def word
8
- '<if>'
9
- end
10
-
11
- # @param links [::Array<Link>]
12
- def initialize links
13
- @links = links
14
- end
15
-
16
- # @sg-ignore Fix "Not enough arguments to Module#protected"
17
- protected def equality_fields
18
- super + [@links]
19
- end
20
-
21
- def resolve api_map, name_pin, locals
22
- types = @links.map { |link| link.infer(api_map, name_pin, locals) }
23
- [Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.try_parse(types.map(&:tag).uniq.join(', ')), source: :chain)]
24
- end
25
- end
26
- end
27
- end
28
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class If < Link
7
+ def word
8
+ '<if>'
9
+ end
10
+
11
+ # @param links [::Array<Chain>]
12
+ def initialize links
13
+ @links = links
14
+ end
15
+
16
+ # @sg-ignore Fix "Not enough arguments to Module#protected"
17
+ protected def equality_fields
18
+ super + [@links]
19
+ end
20
+
21
+ def resolve api_map, name_pin, locals
22
+ types = @links.map { |link| link.infer(api_map, name_pin, locals) }
23
+ [Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.try_parse(types.map(&:tag).uniq.join(', ')), source: :chain)]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class InstanceVariable < Link
7
- def resolve api_map, name_pin, locals
8
- api_map.get_instance_variable_pins(name_pin.binder.namespace, name_pin.binder.scope).select{|p| p.name == word}
9
- end
10
- end
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class InstanceVariable < Link
7
+ def resolve api_map, name_pin, locals
8
+ api_map.get_instance_variable_pins(name_pin.binder.namespace, name_pin.binder.scope).select{|p| p.name == word}
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,109 +1,109 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class Source
5
- class Chain
6
- class Link
7
- include Equality
8
-
9
- # @return [String]
10
- attr_reader :word
11
-
12
- # @return [Pin::Base]
13
- attr_accessor :last_context
14
-
15
- # @param word [String]
16
- def initialize word = '<undefined>'
17
- @word = word
18
- end
19
-
20
- # @sg-ignore two problems - Declared return type
21
- # ::Solargraph::Source::Chain::Array does not match inferred
22
- # type ::Array(::Class<::Solargraph::Source::Chain::Link>,
23
- # ::String) for
24
- # Solargraph::Source::Chain::Link#equality_fields
25
- # and
26
- # Not enough arguments to Module#protected
27
- protected def equality_fields
28
- [self.class, word]
29
- end
30
-
31
- def undefined?
32
- word == '<undefined>'
33
- end
34
-
35
- def constant?
36
- is_a?(Chain::Constant)
37
- end
38
-
39
- # @param api_map [ApiMap]
40
- # @param name_pin [Pin::Base]
41
- # @param locals [::Enumerable<Pin::Base>]
42
- # @return [::Array<Pin::Base>]
43
- def resolve api_map, name_pin, locals
44
- []
45
- end
46
-
47
- # debugging description of contents; not for machine use
48
- # @return [String]
49
- def desc
50
- word
51
- end
52
-
53
- def to_s
54
- desc
55
- end
56
-
57
- def inspect
58
- "#<#{self.class} - `#{self.desc}`>"
59
- end
60
-
61
- def head?
62
- @head ||= false
63
- end
64
-
65
- # Make a copy of this link marked as the head of a chain
66
- #
67
- # @return [self]
68
- def clone_head
69
- clone.mark_head(true)
70
- end
71
-
72
- # Make a copy of this link unmarked as the head of a chain
73
- #
74
- # @return [self]
75
- def clone_body
76
- clone.mark_head(false)
77
- end
78
-
79
- def nullable?
80
- false
81
- end
82
-
83
- # debugging description of contents; not for machine use
84
- #
85
- # @return [String]
86
- def desc
87
- word
88
- end
89
-
90
- def inspect
91
- "#<#{self.class} - `#{self.desc}`>"
92
- end
93
-
94
- include Logging
95
-
96
- protected
97
-
98
- # Mark whether this link is the head of a chain
99
- #
100
- # @param bool [Boolean]
101
- # @return [self]
102
- def mark_head bool
103
- @head = bool
104
- self
105
- end
106
- end
107
- end
108
- end
109
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class Source
5
+ class Chain
6
+ class Link
7
+ include Equality
8
+
9
+ # @return [String]
10
+ attr_reader :word
11
+
12
+ # @return [Pin::Base]
13
+ attr_accessor :last_context
14
+
15
+ # @param word [String]
16
+ def initialize word = '<undefined>'
17
+ @word = word
18
+ end
19
+
20
+ # @sg-ignore two problems - Declared return type
21
+ # ::Solargraph::Source::Chain::Array does not match inferred
22
+ # type ::Array(::Class<::Solargraph::Source::Chain::Link>,
23
+ # ::String) for
24
+ # Solargraph::Source::Chain::Link#equality_fields
25
+ # and
26
+ # Not enough arguments to Module#protected
27
+ protected def equality_fields
28
+ [self.class, word]
29
+ end
30
+
31
+ def undefined?
32
+ word == '<undefined>'
33
+ end
34
+
35
+ def constant?
36
+ is_a?(Chain::Constant)
37
+ end
38
+
39
+ # @param api_map [ApiMap]
40
+ # @param name_pin [Pin::Base]
41
+ # @param locals [::Array<Pin::Base>]
42
+ # @return [::Array<Pin::Base>]
43
+ def resolve api_map, name_pin, locals
44
+ []
45
+ end
46
+
47
+ # debugging description of contents; not for machine use
48
+ # @return [String]
49
+ def desc
50
+ word
51
+ end
52
+
53
+ def to_s
54
+ desc
55
+ end
56
+
57
+ def inspect
58
+ "#<#{self.class} - `#{self.desc}`>"
59
+ end
60
+
61
+ def head?
62
+ @head ||= false
63
+ end
64
+
65
+ # Make a copy of this link marked as the head of a chain
66
+ #
67
+ # @return [self]
68
+ def clone_head
69
+ clone.mark_head(true)
70
+ end
71
+
72
+ # Make a copy of this link unmarked as the head of a chain
73
+ #
74
+ # @return [self]
75
+ def clone_body
76
+ clone.mark_head(false)
77
+ end
78
+
79
+ def nullable?
80
+ false
81
+ end
82
+
83
+ # debugging description of contents; not for machine use
84
+ #
85
+ # @return [String]
86
+ def desc
87
+ word
88
+ end
89
+
90
+ def inspect
91
+ "#<#{self.class} - `#{self.desc}`>"
92
+ end
93
+
94
+ include Logging
95
+
96
+ protected
97
+
98
+ # Mark whether this link is the head of a chain
99
+ #
100
+ # @param bool [Boolean]
101
+ # @return [self]
102
+ def mark_head bool
103
+ @head = bool
104
+ self
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -1,48 +1,48 @@
1
- # frozen_string_literal: true
2
-
3
- require 'parser'
4
-
5
- module Solargraph
6
- class Source
7
- class Chain
8
- class Literal < Link
9
- def word
10
- @word ||= "<#{@type}>"
11
- end
12
-
13
- attr_reader :value
14
-
15
- # @param type [String]
16
- # @param node [Parser::AST::Node, Object]
17
- def initialize type, node
18
- if node.is_a?(::Parser::AST::Node)
19
- if node.type == :true
20
- @value = true
21
- elsif node.type == :false
22
- @value = false
23
- elsif [:int, :sym].include?(node.type)
24
- @value = node.children.first
25
- end
26
- end
27
- @type = type
28
- @literal_type = ComplexType.try_parse(@value.inspect)
29
- @complex_type = ComplexType.try_parse(type)
30
- end
31
-
32
- # @sg-ignore Fix "Not enough arguments to Module#protected"
33
- protected def equality_fields
34
- super + [@value, @type, @literal_type, @complex_type]
35
- end
36
-
37
- def resolve api_map, name_pin, locals
38
- if api_map.super_and_sub?(@complex_type.name, @literal_type.name)
39
- [Pin::ProxyType.anonymous(@literal_type, source: :chain)]
40
- else
41
- # we don't support this value as a literal type
42
- [Pin::ProxyType.anonymous(@complex_type, source: :chain)]
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'parser'
4
+
5
+ module Solargraph
6
+ class Source
7
+ class Chain
8
+ class Literal < Link
9
+ def word
10
+ @word ||= "<#{@type}>"
11
+ end
12
+
13
+ attr_reader :value
14
+
15
+ # @param type [String]
16
+ # @param node [Parser::AST::Node, Object]
17
+ def initialize type, node
18
+ if node.is_a?(::Parser::AST::Node)
19
+ if node.type == :true
20
+ @value = true
21
+ elsif node.type == :false
22
+ @value = false
23
+ elsif [:int, :sym].include?(node.type)
24
+ @value = node.children.first
25
+ end
26
+ end
27
+ @type = type
28
+ @literal_type = ComplexType.try_parse(@value.inspect)
29
+ @complex_type = ComplexType.try_parse(type)
30
+ end
31
+
32
+ # @sg-ignore Fix "Not enough arguments to Module#protected"
33
+ protected def equality_fields
34
+ super + [@value, @type, @literal_type, @complex_type]
35
+ end
36
+
37
+ def resolve api_map, name_pin, locals
38
+ if api_map.super_and_sub?(@complex_type.name, @literal_type.name)
39
+ [Pin::ProxyType.anonymous(@literal_type, source: :chain)]
40
+ else
41
+ # we don't support this value as a literal type
42
+ [Pin::ProxyType.anonymous(@complex_type, source: :chain)]
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end