solargraph 0.44.2 → 0.46.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.
- checksums.yaml +4 -4
- data/.github/workflows/rspec.yml +41 -0
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.travis.yml +19 -19
- data/CHANGELOG.md +1115 -1088
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +128 -120
- data/Rakefile +0 -0
- data/SPONSORS.md +18 -15
- data/bin/solargraph +0 -0
- data/lib/solargraph/api_map/bundler_methods.rb +22 -22
- data/lib/solargraph/api_map/cache.rb +70 -70
- data/lib/solargraph/api_map/source_to_yard.rb +81 -81
- data/lib/solargraph/api_map/store.rb +256 -256
- data/lib/solargraph/api_map.rb +686 -681
- data/lib/solargraph/bench.rb +27 -27
- data/lib/solargraph/compat.rb +37 -37
- data/lib/solargraph/complex_type/type_methods.rb +130 -130
- data/lib/solargraph/complex_type/unique_type.rb +75 -75
- data/lib/solargraph/complex_type.rb +221 -221
- data/lib/solargraph/convention/base.rb +33 -33
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +22 -22
- data/lib/solargraph/convention/rspec.rb +30 -21
- data/lib/solargraph/convention.rb +47 -47
- data/lib/solargraph/converters/dd.rb +12 -12
- data/lib/solargraph/converters/dl.rb +12 -12
- data/lib/solargraph/converters/dt.rb +12 -12
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/base.rb +29 -29
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
- data/lib/solargraph/diagnostics/severities.rb +15 -15
- data/lib/solargraph/diagnostics/type_check.rb +54 -54
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/documentor.rb +76 -76
- data/lib/solargraph/environ.rb +45 -45
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/cataloger.rb +56 -56
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +111 -111
- data/lib/solargraph/language_server/host/message_worker.rb +59 -59
- data/lib/solargraph/language_server/host/sources.rb +156 -156
- data/lib/solargraph/language_server/host.rb +865 -865
- data/lib/solargraph/language_server/message/base.rb +89 -89
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/client.rb +11 -11
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
- data/lib/solargraph/language_server/message/completion_item.rb +11 -11
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
- data/lib/solargraph/language_server/message/extended/document.rb +20 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/extended.rb +21 -21
- data/lib/solargraph/language_server/message/initialize.rb +162 -162
- data/lib/solargraph/language_server/message/initialized.rb +27 -27
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
- data/lib/solargraph/language_server/message/shutdown.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/workspace.rb +14 -14
- data/lib/solargraph/language_server/message.rb +93 -93
- data/lib/solargraph/language_server/message_types.rb +14 -14
- data/lib/solargraph/language_server/request.rb +24 -24
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
- data/lib/solargraph/language_server/transport/adapter.rb +53 -53
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
- data/lib/solargraph/language_server/transport.rb +13 -13
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/language_server.rb +19 -19
- data/lib/solargraph/library.rb +546 -546
- data/lib/solargraph/location.rb +37 -37
- data/lib/solargraph/logging.rb +27 -27
- data/lib/solargraph/page.rb +83 -83
- data/lib/solargraph/parser/comment_ripper.rb +52 -52
- data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
- data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
- data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
- data/lib/solargraph/parser/legacy.rb +12 -12
- data/lib/solargraph/parser/node_methods.rb +43 -43
- data/lib/solargraph/parser/node_processor/base.rb +77 -77
- data/lib/solargraph/parser/node_processor.rb +43 -43
- data/lib/solargraph/parser/region.rb +66 -66
- data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
- data/lib/solargraph/parser/rubyvm.rb +40 -40
- data/lib/solargraph/parser/snippet.rb +13 -13
- data/lib/solargraph/parser.rb +26 -26
- data/lib/solargraph/pin/base.rb +296 -296
- data/lib/solargraph/pin/base_variable.rb +84 -84
- data/lib/solargraph/pin/block.rb +72 -72
- data/lib/solargraph/pin/class_variable.rb +8 -8
- data/lib/solargraph/pin/closure.rb +37 -37
- data/lib/solargraph/pin/common.rb +70 -70
- data/lib/solargraph/pin/constant.rb +43 -43
- data/lib/solargraph/pin/conversions.rb +96 -96
- data/lib/solargraph/pin/documenting.rb +105 -105
- data/lib/solargraph/pin/duck_method.rb +16 -16
- data/lib/solargraph/pin/global_variable.rb +8 -8
- data/lib/solargraph/pin/instance_variable.rb +30 -30
- data/lib/solargraph/pin/keyword.rb +15 -15
- data/lib/solargraph/pin/keyword_param.rb +8 -8
- data/lib/solargraph/pin/local_variable.rb +55 -55
- data/lib/solargraph/pin/method.rb +245 -245
- data/lib/solargraph/pin/method_alias.rb +31 -31
- data/lib/solargraph/pin/namespace.rb +91 -91
- data/lib/solargraph/pin/parameter.rb +201 -206
- data/lib/solargraph/pin/proxy_type.rb +29 -29
- data/lib/solargraph/pin/reference/extend.rb +10 -10
- data/lib/solargraph/pin/reference/include.rb +10 -10
- data/lib/solargraph/pin/reference/override.rb +29 -29
- data/lib/solargraph/pin/reference/prepend.rb +10 -10
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +10 -10
- data/lib/solargraph/pin/reference.rb +14 -14
- data/lib/solargraph/pin/search.rb +56 -0
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +37 -36
- data/lib/solargraph/position.rb +100 -100
- data/lib/solargraph/range.rb +95 -95
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +226 -226
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +204 -204
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +75 -75
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +28 -28
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +71 -71
- data/lib/solargraph/source/chain/literal.rb +23 -23
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +164 -164
- data/lib/solargraph/source/change.rb +79 -79
- data/lib/solargraph/source/cursor.rb +164 -164
- data/lib/solargraph/source/source_chainer.rb +191 -191
- data/lib/solargraph/source/updater.rb +54 -54
- data/lib/solargraph/source.rb +522 -522
- data/lib/solargraph/source_map/clip.rb +224 -224
- data/lib/solargraph/source_map/completion.rb +23 -23
- data/lib/solargraph/source_map/mapper.rb +212 -212
- data/lib/solargraph/source_map.rb +180 -189
- data/lib/solargraph/type_checker/checks.rb +99 -99
- data/lib/solargraph/type_checker/param_def.rb +35 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +57 -57
- data/lib/solargraph/type_checker.rb +543 -510
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/environment.erb +58 -58
- data/lib/solargraph/workspace/config.rb +231 -231
- data/lib/solargraph/workspace.rb +215 -214
- data/lib/solargraph/yard_map/cache.rb +19 -19
- data/lib/solargraph/yard_map/core_docs.rb +170 -170
- data/lib/solargraph/yard_map/core_fills.rb +208 -203
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/solargraph/yard_map/helpers.rb +16 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
- data/lib/solargraph/yard_map/mapper.rb +77 -77
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
- data/lib/solargraph/yard_map/to_method.rb +79 -79
- data/lib/solargraph/yard_map.rb +460 -443
- data/lib/solargraph.rb +69 -69
- data/lib/yard-solargraph.rb +33 -33
- data/solargraph.gemspec +0 -0
- metadata +14 -12
|
@@ -1,204 +1,204 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class Call < Link
|
|
7
|
-
# @return [String]
|
|
8
|
-
attr_reader :word
|
|
9
|
-
|
|
10
|
-
# @return [Array<Chain>]
|
|
11
|
-
attr_reader :arguments
|
|
12
|
-
|
|
13
|
-
# @param word [String]
|
|
14
|
-
# @param arguments [Array<Chain>]
|
|
15
|
-
# @param with_block [Boolean] True if the chain is inside a block
|
|
16
|
-
# @param head [Boolean] True if the call is the start of its chain
|
|
17
|
-
def initialize word, arguments = [], with_block = false
|
|
18
|
-
@word = word
|
|
19
|
-
@arguments = arguments
|
|
20
|
-
@with_block = with_block
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def with_block?
|
|
24
|
-
@with_block
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @param api_map [ApiMap]
|
|
28
|
-
# @param name_pin [Pin::Base]
|
|
29
|
-
# @param locals [Array<Pin::Base>]
|
|
30
|
-
def resolve api_map, name_pin, locals
|
|
31
|
-
return super_pins(api_map, name_pin) if word == 'super'
|
|
32
|
-
found = if head?
|
|
33
|
-
locals.select { |p| p.name == word }
|
|
34
|
-
else
|
|
35
|
-
[]
|
|
36
|
-
end
|
|
37
|
-
return inferred_pins(found, api_map, name_pin.context, locals) unless found.empty?
|
|
38
|
-
pins = api_map.get_method_stack(name_pin.binder.namespace, word, scope: name_pin.binder.scope)
|
|
39
|
-
return [] if pins.empty?
|
|
40
|
-
inferred_pins(pins, api_map, name_pin.context, locals)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
private
|
|
44
|
-
|
|
45
|
-
# @param pins [Array<Pin::Base>]
|
|
46
|
-
# @param api_map [ApiMap]
|
|
47
|
-
# @param context [ComplexType]
|
|
48
|
-
# @param locals [Pin::LocalVariable]
|
|
49
|
-
# @return [Array<Pin::Base>]
|
|
50
|
-
def inferred_pins pins, api_map, context, locals
|
|
51
|
-
result = pins.map do |p|
|
|
52
|
-
overloads = p.docstring.tags(:overload)
|
|
53
|
-
# next p if overloads.empty?
|
|
54
|
-
type = ComplexType::UNDEFINED
|
|
55
|
-
# @param [YARD::Tags::OverloadTag]
|
|
56
|
-
overloads.each do |ol|
|
|
57
|
-
next unless arguments_match(arguments, ol.parameters)
|
|
58
|
-
next if ol.parameters.last && ol.parameters.last.first.start_with?('&') && ol.parameters.last.last.nil? && !with_block?
|
|
59
|
-
match = true
|
|
60
|
-
arguments.each_with_index do |arg, idx|
|
|
61
|
-
achain = arguments[idx]
|
|
62
|
-
next if achain.nil?
|
|
63
|
-
param = ol.parameters[idx]
|
|
64
|
-
if param.nil?
|
|
65
|
-
match = false unless ol.parameters.last && ol.parameters.last.first.start_with?('*')
|
|
66
|
-
break
|
|
67
|
-
end
|
|
68
|
-
par = ol.tags(:param).select { |pp| pp.name == param.first }.first
|
|
69
|
-
next if par.nil? || par.types.nil? || par.types.empty?
|
|
70
|
-
atype = achain.infer(api_map, Pin::ProxyType.anonymous(context), locals)
|
|
71
|
-
other = ComplexType.try_parse(*par.types)
|
|
72
|
-
# @todo Weak type comparison
|
|
73
|
-
unless atype.tag == other.tag || api_map.super_and_sub?(other.tag, atype.tag)
|
|
74
|
-
match = false
|
|
75
|
-
break
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
if match
|
|
79
|
-
type = extra_return_type(ol, context)
|
|
80
|
-
break if type
|
|
81
|
-
type = ComplexType.try_parse(*ol.tag(:return).types).self_to(context.to_s).qualify(api_map, context.namespace) if ol.has_tag?(:return) && ol.tag(:return).types && !ol.tag(:return).types.empty? && (type.nil? || type.undefined?)
|
|
82
|
-
type ||= ComplexType::UNDEFINED
|
|
83
|
-
end
|
|
84
|
-
break if type.defined?
|
|
85
|
-
end
|
|
86
|
-
next p.proxy(type) if type.defined?
|
|
87
|
-
type = extra_return_type(p.docstring, context)
|
|
88
|
-
if type
|
|
89
|
-
next Solargraph::Pin::Method.new(
|
|
90
|
-
location: p.location,
|
|
91
|
-
closure: p.closure,
|
|
92
|
-
name: p.name,
|
|
93
|
-
comments: "@return [#{context.subtypes.first.to_s}]",
|
|
94
|
-
scope: p.scope,
|
|
95
|
-
visibility: p.visibility,
|
|
96
|
-
parameters: p.parameters,
|
|
97
|
-
node: p.node
|
|
98
|
-
)
|
|
99
|
-
end
|
|
100
|
-
if p.is_a?(Pin::Method) && !p.macros.empty?
|
|
101
|
-
result = process_macro(p, api_map, context, locals)
|
|
102
|
-
next result unless result.return_type.undefined?
|
|
103
|
-
elsif !p.directives.empty?
|
|
104
|
-
result = process_directive(p, api_map, context, locals)
|
|
105
|
-
next result unless result.return_type.undefined?
|
|
106
|
-
end
|
|
107
|
-
p
|
|
108
|
-
end
|
|
109
|
-
result.map do |pin|
|
|
110
|
-
next pin if pin.return_type.undefined?
|
|
111
|
-
selfy = pin.return_type.self_to(context.tag)
|
|
112
|
-
selfy == pin.return_type ? pin : pin.proxy(selfy)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# @param pin [Pin::Method]
|
|
117
|
-
# @param api_map [ApiMap]
|
|
118
|
-
# @param context [ComplexType]
|
|
119
|
-
# @param locals [Pin::Base]
|
|
120
|
-
# @return [Pin::Base]
|
|
121
|
-
def process_macro pin, api_map, context, locals
|
|
122
|
-
pin.macros.each do |macro|
|
|
123
|
-
result = inner_process_macro(pin, macro, api_map, context, locals)
|
|
124
|
-
return result unless result.return_type.undefined?
|
|
125
|
-
end
|
|
126
|
-
Pin::ProxyType.anonymous(ComplexType::UNDEFINED)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# @param pin [Pin::Method]
|
|
130
|
-
# @param api_map [ApiMap]
|
|
131
|
-
# @param context [ComplexType]
|
|
132
|
-
# @param locals [Pin::Base]
|
|
133
|
-
# @return [Pin::ProxyType]
|
|
134
|
-
def process_directive pin, api_map, context, locals
|
|
135
|
-
pin.directives.each do |dir|
|
|
136
|
-
macro = api_map.named_macro(dir.tag.name)
|
|
137
|
-
next if macro.nil?
|
|
138
|
-
result = inner_process_macro(pin, macro, api_map, context, locals)
|
|
139
|
-
return result unless result.return_type.undefined?
|
|
140
|
-
end
|
|
141
|
-
Pin::ProxyType.anonymous ComplexType::UNDEFINED
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# @param pin [Pin]
|
|
145
|
-
# @param macro [YARD::Tags::MacroDirective]
|
|
146
|
-
# @param api_map [ApiMap]
|
|
147
|
-
# @param context [ComplexType]
|
|
148
|
-
# @param locals [Array<Pin::Base>]
|
|
149
|
-
# @return [Pin::ProxyType]
|
|
150
|
-
def inner_process_macro pin, macro, api_map, context, locals
|
|
151
|
-
vals = arguments.map{ |c| Pin::ProxyType.anonymous(c.infer(api_map, pin, locals)) }
|
|
152
|
-
txt = macro.tag.text.clone
|
|
153
|
-
if txt.empty? && macro.tag.name
|
|
154
|
-
named = api_map.named_macro(macro.tag.name)
|
|
155
|
-
txt = named.tag.text.clone if named
|
|
156
|
-
end
|
|
157
|
-
i = 1
|
|
158
|
-
vals.each do |v|
|
|
159
|
-
txt.gsub!(/\$#{i}/, v.context.namespace)
|
|
160
|
-
i += 1
|
|
161
|
-
end
|
|
162
|
-
docstring = Solargraph::Source.parse_docstring(txt).to_docstring
|
|
163
|
-
tag = docstring.tag(:return)
|
|
164
|
-
unless tag.nil? || tag.types.nil?
|
|
165
|
-
return Pin::ProxyType.anonymous(ComplexType.try_parse(*tag.types))
|
|
166
|
-
end
|
|
167
|
-
Pin::ProxyType.anonymous(ComplexType::UNDEFINED)
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
# @param docstring [YARD::Docstring]
|
|
171
|
-
# @param context [ComplexType]
|
|
172
|
-
# @return [ComplexType]
|
|
173
|
-
def extra_return_type docstring, context
|
|
174
|
-
if docstring.has_tag?(:return_single_parameter) #&& context.subtypes.one?
|
|
175
|
-
return context.subtypes.first || ComplexType::UNDEFINED
|
|
176
|
-
elsif docstring.has_tag?(:return_value_parameter) && context.value_types.one?
|
|
177
|
-
return context.value_types.first
|
|
178
|
-
end
|
|
179
|
-
nil
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
# @param arguments [Array<Chain>]
|
|
183
|
-
# @param parameters [Array<String>]
|
|
184
|
-
# @return [Boolean]
|
|
185
|
-
def arguments_match arguments, parameters
|
|
186
|
-
argcount = arguments.length
|
|
187
|
-
# argcount -= 1 if !arguments.empty? && arguments.last.links.first.word.start_with?('&')
|
|
188
|
-
parcount = parameters.length
|
|
189
|
-
parcount -= 1 if !parameters.empty? && parameters.last.first.start_with?('&')
|
|
190
|
-
return false if argcount < parcount && !(argcount == parcount - 1 && parameters.last.first.start_with?('*'))
|
|
191
|
-
true
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
# @param api_map [ApiMap]
|
|
195
|
-
# @param name_pin [Pin::Base]
|
|
196
|
-
# @return [Array<Pin::Base>]
|
|
197
|
-
def super_pins api_map, name_pin
|
|
198
|
-
pins = api_map.get_method_stack(name_pin.namespace, name_pin.name, scope: name_pin.scope)
|
|
199
|
-
pins.reject{|p| p.path == name_pin.path}
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class Call < Link
|
|
7
|
+
# @return [String]
|
|
8
|
+
attr_reader :word
|
|
9
|
+
|
|
10
|
+
# @return [Array<Chain>]
|
|
11
|
+
attr_reader :arguments
|
|
12
|
+
|
|
13
|
+
# @param word [String]
|
|
14
|
+
# @param arguments [Array<Chain>]
|
|
15
|
+
# @param with_block [Boolean] True if the chain is inside a block
|
|
16
|
+
# @param head [Boolean] True if the call is the start of its chain
|
|
17
|
+
def initialize word, arguments = [], with_block = false
|
|
18
|
+
@word = word
|
|
19
|
+
@arguments = arguments
|
|
20
|
+
@with_block = with_block
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def with_block?
|
|
24
|
+
@with_block
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @param api_map [ApiMap]
|
|
28
|
+
# @param name_pin [Pin::Base]
|
|
29
|
+
# @param locals [Array<Pin::Base>]
|
|
30
|
+
def resolve api_map, name_pin, locals
|
|
31
|
+
return super_pins(api_map, name_pin) if word == 'super'
|
|
32
|
+
found = if head?
|
|
33
|
+
locals.select { |p| p.name == word }
|
|
34
|
+
else
|
|
35
|
+
[]
|
|
36
|
+
end
|
|
37
|
+
return inferred_pins(found, api_map, name_pin.context, locals) unless found.empty?
|
|
38
|
+
pins = api_map.get_method_stack(name_pin.binder.namespace, word, scope: name_pin.binder.scope)
|
|
39
|
+
return [] if pins.empty?
|
|
40
|
+
inferred_pins(pins, api_map, name_pin.context, locals)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
# @param pins [Array<Pin::Base>]
|
|
46
|
+
# @param api_map [ApiMap]
|
|
47
|
+
# @param context [ComplexType]
|
|
48
|
+
# @param locals [Pin::LocalVariable]
|
|
49
|
+
# @return [Array<Pin::Base>]
|
|
50
|
+
def inferred_pins pins, api_map, context, locals
|
|
51
|
+
result = pins.map do |p|
|
|
52
|
+
overloads = p.docstring.tags(:overload)
|
|
53
|
+
# next p if overloads.empty?
|
|
54
|
+
type = ComplexType::UNDEFINED
|
|
55
|
+
# @param [YARD::Tags::OverloadTag]
|
|
56
|
+
overloads.each do |ol|
|
|
57
|
+
next unless arguments_match(arguments, ol.parameters)
|
|
58
|
+
next if ol.parameters.last && ol.parameters.last.first.start_with?('&') && ol.parameters.last.last.nil? && !with_block?
|
|
59
|
+
match = true
|
|
60
|
+
arguments.each_with_index do |arg, idx|
|
|
61
|
+
achain = arguments[idx]
|
|
62
|
+
next if achain.nil?
|
|
63
|
+
param = ol.parameters[idx]
|
|
64
|
+
if param.nil?
|
|
65
|
+
match = false unless ol.parameters.last && ol.parameters.last.first.start_with?('*')
|
|
66
|
+
break
|
|
67
|
+
end
|
|
68
|
+
par = ol.tags(:param).select { |pp| pp.name == param.first }.first
|
|
69
|
+
next if par.nil? || par.types.nil? || par.types.empty?
|
|
70
|
+
atype = achain.infer(api_map, Pin::ProxyType.anonymous(context), locals)
|
|
71
|
+
other = ComplexType.try_parse(*par.types)
|
|
72
|
+
# @todo Weak type comparison
|
|
73
|
+
unless atype.tag == other.tag || api_map.super_and_sub?(other.tag, atype.tag)
|
|
74
|
+
match = false
|
|
75
|
+
break
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
if match
|
|
79
|
+
type = extra_return_type(ol, context)
|
|
80
|
+
break if type
|
|
81
|
+
type = ComplexType.try_parse(*ol.tag(:return).types).self_to(context.to_s).qualify(api_map, context.namespace) if ol.has_tag?(:return) && ol.tag(:return).types && !ol.tag(:return).types.empty? && (type.nil? || type.undefined?)
|
|
82
|
+
type ||= ComplexType::UNDEFINED
|
|
83
|
+
end
|
|
84
|
+
break if type.defined?
|
|
85
|
+
end
|
|
86
|
+
next p.proxy(type) if type.defined?
|
|
87
|
+
type = extra_return_type(p.docstring, context)
|
|
88
|
+
if type
|
|
89
|
+
next Solargraph::Pin::Method.new(
|
|
90
|
+
location: p.location,
|
|
91
|
+
closure: p.closure,
|
|
92
|
+
name: p.name,
|
|
93
|
+
comments: "@return [#{context.subtypes.first.to_s}]",
|
|
94
|
+
scope: p.scope,
|
|
95
|
+
visibility: p.visibility,
|
|
96
|
+
parameters: p.parameters,
|
|
97
|
+
node: p.node
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
if p.is_a?(Pin::Method) && !p.macros.empty?
|
|
101
|
+
result = process_macro(p, api_map, context, locals)
|
|
102
|
+
next result unless result.return_type.undefined?
|
|
103
|
+
elsif !p.directives.empty?
|
|
104
|
+
result = process_directive(p, api_map, context, locals)
|
|
105
|
+
next result unless result.return_type.undefined?
|
|
106
|
+
end
|
|
107
|
+
p
|
|
108
|
+
end
|
|
109
|
+
result.map do |pin|
|
|
110
|
+
next pin if pin.return_type.undefined?
|
|
111
|
+
selfy = pin.return_type.self_to(context.tag)
|
|
112
|
+
selfy == pin.return_type ? pin : pin.proxy(selfy)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @param pin [Pin::Method]
|
|
117
|
+
# @param api_map [ApiMap]
|
|
118
|
+
# @param context [ComplexType]
|
|
119
|
+
# @param locals [Pin::Base]
|
|
120
|
+
# @return [Pin::Base]
|
|
121
|
+
def process_macro pin, api_map, context, locals
|
|
122
|
+
pin.macros.each do |macro|
|
|
123
|
+
result = inner_process_macro(pin, macro, api_map, context, locals)
|
|
124
|
+
return result unless result.return_type.undefined?
|
|
125
|
+
end
|
|
126
|
+
Pin::ProxyType.anonymous(ComplexType::UNDEFINED)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @param pin [Pin::Method]
|
|
130
|
+
# @param api_map [ApiMap]
|
|
131
|
+
# @param context [ComplexType]
|
|
132
|
+
# @param locals [Pin::Base]
|
|
133
|
+
# @return [Pin::ProxyType]
|
|
134
|
+
def process_directive pin, api_map, context, locals
|
|
135
|
+
pin.directives.each do |dir|
|
|
136
|
+
macro = api_map.named_macro(dir.tag.name)
|
|
137
|
+
next if macro.nil?
|
|
138
|
+
result = inner_process_macro(pin, macro, api_map, context, locals)
|
|
139
|
+
return result unless result.return_type.undefined?
|
|
140
|
+
end
|
|
141
|
+
Pin::ProxyType.anonymous ComplexType::UNDEFINED
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# @param pin [Pin]
|
|
145
|
+
# @param macro [YARD::Tags::MacroDirective]
|
|
146
|
+
# @param api_map [ApiMap]
|
|
147
|
+
# @param context [ComplexType]
|
|
148
|
+
# @param locals [Array<Pin::Base>]
|
|
149
|
+
# @return [Pin::ProxyType]
|
|
150
|
+
def inner_process_macro pin, macro, api_map, context, locals
|
|
151
|
+
vals = arguments.map{ |c| Pin::ProxyType.anonymous(c.infer(api_map, pin, locals)) }
|
|
152
|
+
txt = macro.tag.text.clone
|
|
153
|
+
if txt.empty? && macro.tag.name
|
|
154
|
+
named = api_map.named_macro(macro.tag.name)
|
|
155
|
+
txt = named.tag.text.clone if named
|
|
156
|
+
end
|
|
157
|
+
i = 1
|
|
158
|
+
vals.each do |v|
|
|
159
|
+
txt.gsub!(/\$#{i}/, v.context.namespace)
|
|
160
|
+
i += 1
|
|
161
|
+
end
|
|
162
|
+
docstring = Solargraph::Source.parse_docstring(txt).to_docstring
|
|
163
|
+
tag = docstring.tag(:return)
|
|
164
|
+
unless tag.nil? || tag.types.nil?
|
|
165
|
+
return Pin::ProxyType.anonymous(ComplexType.try_parse(*tag.types))
|
|
166
|
+
end
|
|
167
|
+
Pin::ProxyType.anonymous(ComplexType::UNDEFINED)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# @param docstring [YARD::Docstring]
|
|
171
|
+
# @param context [ComplexType]
|
|
172
|
+
# @return [ComplexType]
|
|
173
|
+
def extra_return_type docstring, context
|
|
174
|
+
if docstring.has_tag?(:return_single_parameter) #&& context.subtypes.one?
|
|
175
|
+
return context.subtypes.first || ComplexType::UNDEFINED
|
|
176
|
+
elsif docstring.has_tag?(:return_value_parameter) && context.value_types.one?
|
|
177
|
+
return context.value_types.first
|
|
178
|
+
end
|
|
179
|
+
nil
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @param arguments [Array<Chain>]
|
|
183
|
+
# @param parameters [Array<String>]
|
|
184
|
+
# @return [Boolean]
|
|
185
|
+
def arguments_match arguments, parameters
|
|
186
|
+
argcount = arguments.length
|
|
187
|
+
# argcount -= 1 if !arguments.empty? && arguments.last.links.first.word.start_with?('&')
|
|
188
|
+
parcount = parameters.length
|
|
189
|
+
parcount -= 1 if !parameters.empty? && parameters.last.first.start_with?('&')
|
|
190
|
+
return false if argcount < parcount && !(argcount == parcount - 1 && parameters.last.first.start_with?('*'))
|
|
191
|
+
true
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# @param api_map [ApiMap]
|
|
195
|
+
# @param name_pin [Pin::Base]
|
|
196
|
+
# @return [Array<Pin::Base>]
|
|
197
|
+
def super_pins api_map, name_pin
|
|
198
|
+
pins = api_map.get_method_stack(name_pin.namespace, name_pin.name, scope: name_pin.scope)
|
|
199
|
+
pins.reject{|p| p.path == name_pin.path}
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
@@ -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,75 +1,75 @@
|
|
|
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
|
-
type = deep_constant_type(gate, api_map)
|
|
23
|
-
# Use deep inference to resolve root
|
|
24
|
-
parts[0..-2].each do |sym|
|
|
25
|
-
pins = api_map.get_constants('', type.namespace).select{ |pin| pin.name == sym }
|
|
26
|
-
type = first_pin_type(pins, api_map)
|
|
27
|
-
break if type.undefined?
|
|
28
|
-
end
|
|
29
|
-
next if type.undefined?
|
|
30
|
-
result = api_map.get_constants('', type.namespace).select { |pin| pin.name == parts.last }
|
|
31
|
-
return result unless result.empty?
|
|
32
|
-
end
|
|
33
|
-
[]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
def crawl_gates pin
|
|
39
|
-
clos = pin
|
|
40
|
-
until clos.nil?
|
|
41
|
-
if clos.is_a?(Pin::Namespace)
|
|
42
|
-
gates = clos.gates
|
|
43
|
-
gates.push('') if gates.empty?
|
|
44
|
-
return gates
|
|
45
|
-
end
|
|
46
|
-
clos = clos.closure
|
|
47
|
-
end
|
|
48
|
-
['']
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def first_pin_type(pins, api_map)
|
|
52
|
-
type = ComplexType::UNDEFINED
|
|
53
|
-
pins.each do |pin|
|
|
54
|
-
type = pin.typify(api_map)
|
|
55
|
-
break if type.defined?
|
|
56
|
-
type = pin.probe(api_map)
|
|
57
|
-
break if type.defined?
|
|
58
|
-
end
|
|
59
|
-
type
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def deep_constant_type(gate, api_map)
|
|
63
|
-
type = ComplexType::ROOT
|
|
64
|
-
return type if gate == ''
|
|
65
|
-
gate.split('::').each do |word|
|
|
66
|
-
pins = api_map.get_constants('', type.namespace).select { |pin| pin.name == word }
|
|
67
|
-
type = first_pin_type(pins, api_map)
|
|
68
|
-
break if type.undefined?
|
|
69
|
-
end
|
|
70
|
-
type
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
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 = crawl_gates(name_pin)
|
|
19
|
+
end
|
|
20
|
+
parts = base.split('::')
|
|
21
|
+
gates.each do |gate|
|
|
22
|
+
type = deep_constant_type(gate, api_map)
|
|
23
|
+
# Use deep inference to resolve root
|
|
24
|
+
parts[0..-2].each do |sym|
|
|
25
|
+
pins = api_map.get_constants('', type.namespace).select{ |pin| pin.name == sym }
|
|
26
|
+
type = first_pin_type(pins, api_map)
|
|
27
|
+
break if type.undefined?
|
|
28
|
+
end
|
|
29
|
+
next if type.undefined?
|
|
30
|
+
result = api_map.get_constants('', type.namespace).select { |pin| pin.name == parts.last }
|
|
31
|
+
return result unless result.empty?
|
|
32
|
+
end
|
|
33
|
+
[]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def crawl_gates pin
|
|
39
|
+
clos = pin
|
|
40
|
+
until clos.nil?
|
|
41
|
+
if clos.is_a?(Pin::Namespace)
|
|
42
|
+
gates = clos.gates
|
|
43
|
+
gates.push('') if gates.empty?
|
|
44
|
+
return gates
|
|
45
|
+
end
|
|
46
|
+
clos = clos.closure
|
|
47
|
+
end
|
|
48
|
+
['']
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def first_pin_type(pins, api_map)
|
|
52
|
+
type = ComplexType::UNDEFINED
|
|
53
|
+
pins.each do |pin|
|
|
54
|
+
type = pin.typify(api_map)
|
|
55
|
+
break if type.defined?
|
|
56
|
+
type = pin.probe(api_map)
|
|
57
|
+
break if type.defined?
|
|
58
|
+
end
|
|
59
|
+
type
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def deep_constant_type(gate, api_map)
|
|
63
|
+
type = ComplexType::ROOT
|
|
64
|
+
return type if gate == ''
|
|
65
|
+
gate.split('::').each do |word|
|
|
66
|
+
pins = api_map.get_constants('', type.namespace).select { |pin| pin.name == word }
|
|
67
|
+
type = first_pin_type(pins, api_map)
|
|
68
|
+
break if type.undefined?
|
|
69
|
+
end
|
|
70
|
+
type
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
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,28 +1,28 @@
|
|
|
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 splatted [Boolean]
|
|
9
|
-
def initialize type, splatted = false
|
|
10
|
-
super(type)
|
|
11
|
-
@splatted = splatted
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def word
|
|
15
|
-
@word ||= "<#{@type}>"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def resolve api_map, name_pin, locals
|
|
19
|
-
[Pin::ProxyType.anonymous(@complex_type)]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def splatted?
|
|
23
|
-
@splatted
|
|
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 Hash < Literal
|
|
7
|
+
# @param type [String]
|
|
8
|
+
# @param splatted [Boolean]
|
|
9
|
+
def initialize type, splatted = false
|
|
10
|
+
super(type)
|
|
11
|
+
@splatted = splatted
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def word
|
|
15
|
+
@word ||= "<#{@type}>"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def resolve api_map, name_pin, locals
|
|
19
|
+
[Pin::ProxyType.anonymous(@complex_type)]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def splatted?
|
|
23
|
+
@splatted
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|