solargraph 0.58.3 → 0.59.2
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/.envrc +3 -0
- data/.github/workflows/linting.yml +12 -5
- data/.github/workflows/plugins.yml +54 -34
- data/.github/workflows/rspec.yml +15 -28
- data/.github/workflows/typecheck.yml +6 -3
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +53 -966
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/README.md +3 -3
- data/Rakefile +26 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/cache.rb +3 -3
- data/lib/solargraph/api_map/constants.rb +12 -3
- data/lib/solargraph/api_map/index.rb +29 -18
- data/lib/solargraph/api_map/source_to_yard.rb +22 -9
- data/lib/solargraph/api_map/store.rb +40 -30
- data/lib/solargraph/api_map.rb +160 -78
- data/lib/solargraph/bench.rb +2 -3
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +31 -18
- data/lib/solargraph/complex_type/unique_type.rb +221 -63
- data/lib/solargraph/complex_type.rb +173 -59
- data/lib/solargraph/convention/active_support_concern.rb +111 -111
- data/lib/solargraph/convention/base.rb +50 -50
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -1
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
- data/lib/solargraph/convention/data_definition.rb +5 -2
- data/lib/solargraph/convention/gemfile.rb +1 -1
- data/lib/solargraph/convention/gemspec.rb +1 -1
- data/lib/solargraph/convention/rakefile.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
- data/lib/solargraph/convention/struct_definition.rb +8 -4
- data/lib/solargraph/convention.rb +2 -2
- data/lib/solargraph/converters/dd.rb +2 -0
- data/lib/solargraph/converters/dl.rb +2 -0
- data/lib/solargraph/converters/dt.rb +2 -0
- data/lib/solargraph/converters/misc.rb +2 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop.rb +11 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
- data/lib/solargraph/diagnostics/type_check.rb +11 -10
- data/lib/solargraph/diagnostics/update_errors.rb +4 -8
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/doc_map.rb +38 -39
- data/lib/solargraph/environ.rb +52 -52
- data/lib/solargraph/equality.rb +4 -4
- data/lib/solargraph/gem_pins.rb +4 -15
- data/lib/solargraph/language_server/error_codes.rb +10 -10
- data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
- data/lib/solargraph/language_server/host/dispatch.rb +3 -3
- data/lib/solargraph/language_server/host/message_worker.rb +4 -3
- data/lib/solargraph/language_server/host/sources.rb +2 -1
- data/lib/solargraph/language_server/host.rb +35 -28
- data/lib/solargraph/language_server/message/base.rb +1 -1
- data/lib/solargraph/language_server/message/client/register_capability.rb +1 -3
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +6 -8
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
- data/lib/solargraph/language_server/message/extended/document.rb +1 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -7
- data/lib/solargraph/language_server/message/extended/download_core.rb +2 -1
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +1 -1
- data/lib/solargraph/language_server/message/initialize.rb +20 -14
- data/lib/solargraph/language_server/message/initialized.rb +28 -28
- data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
- data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +13 -6
- data/lib/solargraph/language_server/message/text_document/references.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/rename.rb +20 -13
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +34 -28
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +38 -30
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +23 -17
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
- data/lib/solargraph/language_server/message.rb +1 -1
- data/lib/solargraph/language_server/progress.rb +143 -143
- data/lib/solargraph/language_server/request.rb +4 -2
- data/lib/solargraph/language_server/transport/adapter.rb +68 -68
- data/lib/solargraph/language_server/transport/data_reader.rb +11 -13
- data/lib/solargraph/language_server/uri_helpers.rb +2 -2
- data/lib/solargraph/language_server.rb +20 -20
- data/lib/solargraph/library.rb +57 -38
- data/lib/solargraph/location.rb +17 -14
- data/lib/solargraph/logging.rb +22 -4
- data/lib/solargraph/page.rb +1 -1
- data/lib/solargraph/parser/comment_ripper.rb +19 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +324 -108
- data/lib/solargraph/parser/node_processor/base.rb +34 -4
- data/lib/solargraph/parser/node_processor.rb +8 -7
- data/lib/solargraph/parser/parser_gem/class_methods.rb +30 -14
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +51 -25
- data/lib/solargraph/parser/parser_gem/node_methods.rb +181 -73
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -12
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +36 -36
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +9 -8
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
- data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
- data/lib/solargraph/parser/parser_gem.rb +2 -0
- data/lib/solargraph/parser/region.rb +9 -3
- data/lib/solargraph/parser/snippet.rb +3 -1
- data/lib/solargraph/parser.rb +2 -0
- data/lib/solargraph/pin/base.rb +126 -82
- data/lib/solargraph/pin/base_variable.rb +273 -24
- data/lib/solargraph/pin/block.rb +29 -6
- data/lib/solargraph/pin/breakable.rb +7 -1
- data/lib/solargraph/pin/callable.rb +65 -21
- data/lib/solargraph/pin/closure.rb +7 -10
- data/lib/solargraph/pin/common.rb +24 -6
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +3 -5
- data/lib/solargraph/pin/conversions.rb +10 -4
- data/lib/solargraph/pin/delegated_method.rb +19 -8
- data/lib/solargraph/pin/documenting.rb +4 -2
- data/lib/solargraph/pin/instance_variable.rb +5 -1
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/local_variable.rb +15 -59
- data/lib/solargraph/pin/method.rb +158 -104
- data/lib/solargraph/pin/method_alias.rb +8 -0
- data/lib/solargraph/pin/namespace.rb +19 -12
- data/lib/solargraph/pin/parameter.rb +102 -36
- data/lib/solargraph/pin/proxy_type.rb +4 -1
- data/lib/solargraph/pin/reference/override.rb +1 -1
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +2 -0
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +20 -0
- data/lib/solargraph/pin/search.rb +8 -7
- data/lib/solargraph/pin/signature.rb +15 -12
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +2 -1
- data/lib/solargraph/pin/until.rb +2 -4
- data/lib/solargraph/pin/while.rb +2 -4
- data/lib/solargraph/pin.rb +2 -0
- data/lib/solargraph/pin_cache.rb +22 -19
- data/lib/solargraph/position.rb +17 -10
- data/lib/solargraph/range.rb +16 -15
- data/lib/solargraph/rbs_map/conversions.rb +367 -231
- data/lib/solargraph/rbs_map/core_fills.rb +18 -11
- data/lib/solargraph/rbs_map/core_map.rb +24 -17
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
- data/lib/solargraph/rbs_map.rb +76 -32
- data/lib/solargraph/server_methods.rb +1 -1
- data/lib/solargraph/shell.rb +258 -66
- data/lib/solargraph/source/chain/array.rb +3 -12
- data/lib/solargraph/source/chain/block_symbol.rb +13 -13
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +96 -56
- data/lib/solargraph/source/chain/class_variable.rb +1 -1
- data/lib/solargraph/source/chain/constant.rb +5 -1
- data/lib/solargraph/source/chain/global_variable.rb +1 -1
- data/lib/solargraph/source/chain/hash.rb +8 -5
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/if.rb +12 -10
- data/lib/solargraph/source/chain/instance_variable.rb +24 -1
- data/lib/solargraph/source/chain/link.rb +12 -22
- data/lib/solargraph/source/chain/literal.rb +22 -15
- data/lib/solargraph/source/chain/or.rb +10 -4
- data/lib/solargraph/source/chain/q_call.rb +2 -0
- data/lib/solargraph/source/chain/variable.rb +3 -1
- data/lib/solargraph/source/chain/z_super.rb +1 -3
- data/lib/solargraph/source/chain.rb +51 -38
- data/lib/solargraph/source/change.rb +12 -5
- data/lib/solargraph/source/cursor.rb +33 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +56 -32
- data/lib/solargraph/source/updater.rb +5 -1
- data/lib/solargraph/source.rb +59 -35
- data/lib/solargraph/source_map/clip.rb +54 -30
- data/lib/solargraph/source_map/data.rb +4 -1
- data/lib/solargraph/source_map/mapper.rb +69 -42
- data/lib/solargraph/source_map.rb +21 -9
- data/lib/solargraph/type_checker/problem.rb +3 -1
- data/lib/solargraph/type_checker/rules.rb +81 -8
- data/lib/solargraph/type_checker.rb +196 -122
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +14 -11
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +1 -0
- data/lib/solargraph/workspace.rb +50 -28
- data/lib/solargraph/yard_map/cache.rb +25 -25
- data/lib/solargraph/yard_map/helpers.rb +8 -3
- data/lib/solargraph/yard_map/mapper/to_constant.rb +28 -28
- data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
- data/lib/solargraph/yard_map/mapper.rb +13 -8
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +2 -2
- data/lib/solargraph/yardoc.rb +7 -4
- data/lib/solargraph.rb +33 -10
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/shims/ast/0/node.rbs +1 -1
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/solargraph.gemspec +37 -35
- metadata +41 -42
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/rbs/fills/tuple/tuple.rbs +0 -149
|
@@ -22,8 +22,10 @@ module Solargraph
|
|
|
22
22
|
# @param attribute [Boolean]
|
|
23
23
|
# @param signatures [::Array<Signature>, nil]
|
|
24
24
|
# @param anon_splat [Boolean]
|
|
25
|
+
# @param context [ComplexType, ComplexType::UniqueType, nil]
|
|
26
|
+
# @param [Hash{Symbol => Object}] splat
|
|
25
27
|
def initialize visibility: :public, explicit: true, block: :undefined, node: nil, attribute: false, signatures: nil, anon_splat: false,
|
|
26
|
-
**splat
|
|
28
|
+
context: nil, **splat
|
|
27
29
|
super(**splat)
|
|
28
30
|
@visibility = visibility
|
|
29
31
|
@explicit = explicit
|
|
@@ -32,31 +34,12 @@ module Solargraph
|
|
|
32
34
|
@attribute = attribute
|
|
33
35
|
@signatures = signatures
|
|
34
36
|
@anon_splat = anon_splat
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# @param signature_pins [Array<Pin::Signature>]
|
|
38
|
-
# @return [Array<Pin::Signature>]
|
|
39
|
-
def combine_all_signature_pins(*signature_pins)
|
|
40
|
-
# @type [Hash{Array => Array<Pin::Signature>}]
|
|
41
|
-
by_arity = {}
|
|
42
|
-
signature_pins.each do |signature_pin|
|
|
43
|
-
by_arity[signature_pin.arity] ||= []
|
|
44
|
-
by_arity[signature_pin.arity] << signature_pin
|
|
45
|
-
end
|
|
46
|
-
by_arity.transform_values! do |same_arity_pins|
|
|
47
|
-
# @param memo [Pin::Signature, nil]
|
|
48
|
-
# @param signature [Pin::Signature]
|
|
49
|
-
same_arity_pins.reduce(nil) do |memo, signature|
|
|
50
|
-
next signature if memo.nil?
|
|
51
|
-
memo.combine_with(signature)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
by_arity.values.flatten
|
|
37
|
+
@context = context if context
|
|
55
38
|
end
|
|
56
39
|
|
|
57
40
|
# @param other [Pin::Method]
|
|
58
41
|
# @return [::Symbol]
|
|
59
|
-
def combine_visibility
|
|
42
|
+
def combine_visibility other
|
|
60
43
|
if dodgy_visibility_source? && !other.dodgy_visibility_source?
|
|
61
44
|
other.visibility
|
|
62
45
|
elsif other.dodgy_visibility_source? && !dodgy_visibility_source?
|
|
@@ -66,33 +49,18 @@ module Solargraph
|
|
|
66
49
|
end
|
|
67
50
|
end
|
|
68
51
|
|
|
69
|
-
|
|
70
|
-
# @return [Array<Pin::Signature>]
|
|
71
|
-
def combine_signatures(other)
|
|
72
|
-
all_undefined = signatures.all? { |sig| sig.return_type.undefined? }
|
|
73
|
-
other_all_undefined = other.signatures.all? { |sig| sig.return_type.undefined? }
|
|
74
|
-
if all_undefined && !other_all_undefined
|
|
75
|
-
other.signatures
|
|
76
|
-
elsif other_all_undefined && !all_undefined
|
|
77
|
-
signatures
|
|
78
|
-
else
|
|
79
|
-
combine_all_signature_pins(*signatures, *other.signatures)
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def combine_with(other, attrs = {})
|
|
52
|
+
def combine_with other, attrs = {}
|
|
84
53
|
priority_choice = choose_priority(other)
|
|
85
54
|
return priority_choice unless priority_choice.nil?
|
|
86
55
|
|
|
87
56
|
sigs = combine_signatures(other)
|
|
88
|
-
parameters = if sigs.length
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
57
|
+
parameters = if sigs.length.positive?
|
|
58
|
+
[].freeze
|
|
59
|
+
else
|
|
60
|
+
choose(other, :parameters).clone.freeze
|
|
61
|
+
end
|
|
93
62
|
new_attrs = {
|
|
94
63
|
visibility: combine_visibility(other),
|
|
95
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1050
|
|
96
64
|
explicit: explicit? || other.explicit?,
|
|
97
65
|
block: combine_blocks(other),
|
|
98
66
|
node: choose_node(other, :node),
|
|
@@ -110,7 +78,7 @@ module Solargraph
|
|
|
110
78
|
super && other.node == node
|
|
111
79
|
end
|
|
112
80
|
|
|
113
|
-
def transform_types
|
|
81
|
+
def transform_types &transform
|
|
114
82
|
# @todo 'super' alone should work here I think, but doesn't typecheck at level typed
|
|
115
83
|
m = super(&transform)
|
|
116
84
|
m.signatures = m.signatures.map do |sig|
|
|
@@ -125,14 +93,12 @@ module Solargraph
|
|
|
125
93
|
def reset_generated!
|
|
126
94
|
super
|
|
127
95
|
unless signatures.empty?
|
|
128
|
-
return_type = nil
|
|
129
96
|
@block = :undefined
|
|
130
|
-
|
|
97
|
+
[]
|
|
131
98
|
end
|
|
132
99
|
block&.reset_generated!
|
|
133
100
|
@signatures&.each(&:reset_generated!)
|
|
134
|
-
|
|
135
|
-
documentation = nil
|
|
101
|
+
nil
|
|
136
102
|
end
|
|
137
103
|
|
|
138
104
|
def all_rooted?
|
|
@@ -141,7 +107,7 @@ module Solargraph
|
|
|
141
107
|
|
|
142
108
|
# @param signature [Pin::Signature]
|
|
143
109
|
# @return [Pin::Method]
|
|
144
|
-
def with_single_signature
|
|
110
|
+
def with_single_signature signature
|
|
145
111
|
m = proxy signature.return_type
|
|
146
112
|
m.reset_generated!
|
|
147
113
|
# @todo populating the single parameters/return_type/block
|
|
@@ -160,6 +126,8 @@ module Solargraph
|
|
|
160
126
|
!block.nil?
|
|
161
127
|
end
|
|
162
128
|
|
|
129
|
+
# @sg-ignore flow sensitive typing needs to remove literal with
|
|
130
|
+
# this unless block
|
|
163
131
|
# @return [Pin::Signature, nil]
|
|
164
132
|
def block
|
|
165
133
|
return @block unless @block == :undefined
|
|
@@ -179,9 +147,10 @@ module Solargraph
|
|
|
179
147
|
end
|
|
180
148
|
|
|
181
149
|
# @param parameters [::Array<Parameter>]
|
|
182
|
-
# @param return_type [ComplexType]
|
|
150
|
+
# @param return_type [ComplexType, nil]
|
|
183
151
|
# @return [Signature]
|
|
184
|
-
def generate_signature
|
|
152
|
+
def generate_signature parameters, return_type
|
|
153
|
+
# @type [Pin::Signature, nil]
|
|
185
154
|
block = nil
|
|
186
155
|
yieldparam_tags = docstring.tags(:yieldparam)
|
|
187
156
|
yieldreturn_tags = docstring.tags(:yieldreturn)
|
|
@@ -202,7 +171,7 @@ module Solargraph
|
|
|
202
171
|
comments: p.text,
|
|
203
172
|
name: name,
|
|
204
173
|
decl: decl,
|
|
205
|
-
presence: location
|
|
174
|
+
presence: location&.range,
|
|
206
175
|
return_type: ComplexType.try_parse(*p.types),
|
|
207
176
|
source: source
|
|
208
177
|
)
|
|
@@ -223,7 +192,11 @@ module Solargraph
|
|
|
223
192
|
top_type = generate_complex_type
|
|
224
193
|
result = []
|
|
225
194
|
result.push generate_signature(parameters, top_type) if top_type.defined?
|
|
226
|
-
|
|
195
|
+
unless overloads.empty?
|
|
196
|
+
result.concat(overloads.map do |meth|
|
|
197
|
+
generate_signature(meth.parameters, meth.return_type)
|
|
198
|
+
end)
|
|
199
|
+
end
|
|
227
200
|
result.push generate_signature(parameters, @return_type || ComplexType::UNDEFINED) if result.empty?
|
|
228
201
|
result
|
|
229
202
|
end
|
|
@@ -243,11 +216,18 @@ module Solargraph
|
|
|
243
216
|
# change when pins get proxied.
|
|
244
217
|
detail = String.new
|
|
245
218
|
detail += if signatures.length > 1
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
219
|
+
'(*) '
|
|
220
|
+
else
|
|
221
|
+
"(#{signatures.first.parameters.map(&:full).join(', ')}) " unless signatures.first.parameters.empty?
|
|
222
|
+
end.to_s
|
|
223
|
+
# @sg-ignore Need to add nil check here
|
|
224
|
+
unless return_type.undefined?
|
|
225
|
+
detail += "=#{if probed?
|
|
226
|
+
'~'
|
|
227
|
+
else
|
|
228
|
+
(proxied? ? '^' : '>')
|
|
229
|
+
end} #{return_type}"
|
|
230
|
+
end
|
|
251
231
|
detail.strip!
|
|
252
232
|
return nil if detail.empty?
|
|
253
233
|
detail
|
|
@@ -257,7 +237,7 @@ module Solargraph
|
|
|
257
237
|
def signature_help
|
|
258
238
|
@signature_help ||= signatures.map do |sig|
|
|
259
239
|
{
|
|
260
|
-
label: name
|
|
240
|
+
label: "#{name}(#{sig.parameters.map(&:full).join(', ')})",
|
|
261
241
|
documentation: documentation
|
|
262
242
|
}
|
|
263
243
|
end
|
|
@@ -276,6 +256,7 @@ module Solargraph
|
|
|
276
256
|
return nil if signatures.empty?
|
|
277
257
|
|
|
278
258
|
rbs = "def #{name}: #{signatures.first.to_rbs}"
|
|
259
|
+
# @sg-ignore Need to add nil check here
|
|
279
260
|
signatures[1..].each do |sig|
|
|
280
261
|
rbs += "\n"
|
|
281
262
|
rbs += (' ' * (4 + name.length))
|
|
@@ -285,7 +266,7 @@ module Solargraph
|
|
|
285
266
|
end
|
|
286
267
|
|
|
287
268
|
def path
|
|
288
|
-
@path ||= "#{namespace}#{
|
|
269
|
+
@path ||= "#{namespace}#{scope == :instance ? '#' : '.'}#{name}"
|
|
289
270
|
end
|
|
290
271
|
|
|
291
272
|
# @return [String]
|
|
@@ -294,15 +275,21 @@ module Solargraph
|
|
|
294
275
|
end
|
|
295
276
|
|
|
296
277
|
def typify api_map
|
|
297
|
-
logger.debug
|
|
278
|
+
logger.debug do
|
|
279
|
+
# @sg-ignore Need to add nil check here
|
|
280
|
+
"Method#typify(self=#{self}, binder=#{binder}, closure=#{closure}, context=#{context.rooted_tags}, return_type=#{return_type.rooted_tags}) - starting"
|
|
281
|
+
end
|
|
298
282
|
decl = super
|
|
299
283
|
unless decl.undefined?
|
|
300
|
-
logger.debug
|
|
284
|
+
logger.debug do
|
|
285
|
+
"Method#typify(self=#{self}, binder=#{binder}, closure=#{closure}, context=#{context}) => #{decl.rooted_tags.inspect} - decl found"
|
|
286
|
+
end
|
|
301
287
|
return decl
|
|
302
288
|
end
|
|
303
289
|
type = see_reference(api_map) || typify_from_super(api_map)
|
|
304
290
|
logger.debug { "Method#typify(self=#{self}) - type=#{type&.rooted_tags.inspect}" }
|
|
305
291
|
unless type.nil?
|
|
292
|
+
# @sg-ignore Need to add nil check here
|
|
306
293
|
qualified = type.qualify(api_map, *closure.gates)
|
|
307
294
|
logger.debug { "Method#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
|
|
308
295
|
return qualified
|
|
@@ -314,26 +301,26 @@ module Solargraph
|
|
|
314
301
|
if @documentation.nil?
|
|
315
302
|
method_docs ||= super || ''
|
|
316
303
|
param_tags = docstring.tags(:param)
|
|
317
|
-
unless param_tags.nil?
|
|
304
|
+
unless param_tags.nil? || param_tags.empty?
|
|
318
305
|
method_docs += "\n\n" unless method_docs.empty?
|
|
319
306
|
method_docs += "Params:\n"
|
|
320
307
|
lines = []
|
|
321
308
|
param_tags.each do |p|
|
|
322
309
|
l = "* #{p.name}"
|
|
323
|
-
l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil?
|
|
310
|
+
l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil? || p.types.empty?
|
|
324
311
|
l += " #{p.text}"
|
|
325
312
|
lines.push l
|
|
326
313
|
end
|
|
327
314
|
method_docs += lines.join("\n")
|
|
328
315
|
end
|
|
329
316
|
yieldparam_tags = docstring.tags(:yieldparam)
|
|
330
|
-
unless yieldparam_tags.nil?
|
|
317
|
+
unless yieldparam_tags.nil? || yieldparam_tags.empty?
|
|
331
318
|
method_docs += "\n\n" unless method_docs.empty?
|
|
332
319
|
method_docs += "Block Params:\n"
|
|
333
320
|
lines = []
|
|
334
321
|
yieldparam_tags.each do |p|
|
|
335
322
|
l = "* #{p.name}"
|
|
336
|
-
l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil?
|
|
323
|
+
l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil? || p.types.empty?
|
|
337
324
|
l += " #{p.text}"
|
|
338
325
|
lines.push l
|
|
339
326
|
end
|
|
@@ -345,8 +332,8 @@ module Solargraph
|
|
|
345
332
|
method_docs += "Block Returns:\n"
|
|
346
333
|
lines = []
|
|
347
334
|
yieldreturn_tags.each do |r|
|
|
348
|
-
l =
|
|
349
|
-
l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil?
|
|
335
|
+
l = '*'
|
|
336
|
+
l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil? || r.types.empty?
|
|
350
337
|
l += " #{r.text}"
|
|
351
338
|
lines.push l
|
|
352
339
|
end
|
|
@@ -358,8 +345,8 @@ module Solargraph
|
|
|
358
345
|
method_docs += "Returns:\n"
|
|
359
346
|
lines = []
|
|
360
347
|
return_tags.each do |r|
|
|
361
|
-
l =
|
|
362
|
-
l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil?
|
|
348
|
+
l = '*'
|
|
349
|
+
l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil? || r.types.empty?
|
|
363
350
|
l += " #{r.text}"
|
|
364
351
|
lines.push l
|
|
365
352
|
end
|
|
@@ -396,7 +383,7 @@ module Solargraph
|
|
|
396
383
|
attribute? ? infer_from_iv(api_map) : infer_from_return_nodes(api_map)
|
|
397
384
|
end
|
|
398
385
|
|
|
399
|
-
# @return [::Array<Pin::
|
|
386
|
+
# @return [::Array<Pin::Signature>]
|
|
400
387
|
def overloads
|
|
401
388
|
# Ignore overload tags with nil parameters. If it's not an array, the
|
|
402
389
|
# tag's source is likely malformed.
|
|
@@ -414,14 +401,14 @@ module Solargraph
|
|
|
414
401
|
comments: tag.docstring.all.to_s,
|
|
415
402
|
name: name,
|
|
416
403
|
decl: decl,
|
|
417
|
-
presence: location
|
|
404
|
+
presence: location&.range,
|
|
418
405
|
return_type: param_type_from_name(tag, src.first),
|
|
419
406
|
source: :overloads
|
|
420
407
|
)
|
|
421
408
|
end,
|
|
422
409
|
closure: self,
|
|
423
410
|
return_type: ComplexType.try_parse(*tag.docstring.tags(:return).flat_map(&:types)),
|
|
424
|
-
source: :overloads
|
|
411
|
+
source: :overloads
|
|
425
412
|
)
|
|
426
413
|
end
|
|
427
414
|
@overloads
|
|
@@ -440,13 +427,13 @@ module Solargraph
|
|
|
440
427
|
return self unless docstring.ref_tags.any?
|
|
441
428
|
docstring.ref_tags.each do |tag|
|
|
442
429
|
ref = if tag.owner.to_s.start_with?(/[#.]/)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
430
|
+
api_map.get_methods(namespace)
|
|
431
|
+
.select { |pin| pin.path.end_with?(tag.owner.to_s) }
|
|
432
|
+
.first
|
|
433
|
+
else
|
|
434
|
+
# @todo Resolve relative namespaces
|
|
435
|
+
api_map.get_path_pins(tag.owner.to_s).first
|
|
436
|
+
end
|
|
450
437
|
next unless ref
|
|
451
438
|
|
|
452
439
|
docstring.add_tag(*ref.docstring.tags(:param))
|
|
@@ -462,29 +449,95 @@ module Solargraph
|
|
|
462
449
|
|
|
463
450
|
protected
|
|
464
451
|
|
|
465
|
-
attr_writer :block
|
|
466
|
-
|
|
467
|
-
attr_writer :signature_help
|
|
468
|
-
|
|
469
|
-
attr_writer :documentation
|
|
452
|
+
attr_writer :block, :signature_help, :documentation, :return_type
|
|
470
453
|
|
|
454
|
+
# @sg-ignore Need to add nil check here
|
|
471
455
|
def dodgy_visibility_source?
|
|
472
456
|
# as of 2025-03-12, the RBS generator used for
|
|
473
457
|
# e.g. activesupport did not understand 'private' markings
|
|
474
458
|
# inside 'class << self' blocks, but YARD did OK at it
|
|
475
|
-
|
|
459
|
+
# @sg-ignore Need to add nil check here
|
|
460
|
+
(source == :rbs && scope == :class && type_location&.filename&.include?('generated') && return_type.undefined?) ||
|
|
476
461
|
# YARD's RBS generator seems to miss a lot of should-be protected instance methods
|
|
477
|
-
source == :rbs && scope == :instance && namespace.start_with?('YARD::') ||
|
|
462
|
+
(source == :rbs && scope == :instance && namespace.start_with?('YARD::')) ||
|
|
478
463
|
# private on attr_readers seems to be broken in Prism's auto-generator script
|
|
479
|
-
source == :rbs && scope == :instance && namespace.start_with?('Prism::') ||
|
|
464
|
+
(source == :rbs && scope == :instance && namespace.start_with?('Prism::')) ||
|
|
480
465
|
# The RBS for the RBS gem itself seems to use private as a
|
|
481
466
|
# 'is this a public API' concept, more aggressively than the
|
|
482
467
|
# actual code. Let's respect that and ignore the actual .rb file.
|
|
483
|
-
source == :yardoc && scope == :instance && namespace.start_with?('RBS::')
|
|
468
|
+
(source == :yardoc && scope == :instance && namespace.start_with?('RBS::'))
|
|
484
469
|
end
|
|
485
470
|
|
|
486
471
|
private
|
|
487
472
|
|
|
473
|
+
# @param other [Pin::Method]
|
|
474
|
+
# @return [Array<Pin::Signature>]
|
|
475
|
+
def combine_signatures other
|
|
476
|
+
all_undefined = signatures.all? { |sig| !sig.return_type&.defined? }
|
|
477
|
+
other_all_undefined = other.signatures.all? { |sig| !sig.return_type&.defined? }
|
|
478
|
+
if all_undefined && !other_all_undefined
|
|
479
|
+
other.signatures
|
|
480
|
+
elsif other_all_undefined && !all_undefined
|
|
481
|
+
signatures
|
|
482
|
+
else
|
|
483
|
+
combine_signatures_by_type_arity(*signatures, *other.signatures)
|
|
484
|
+
end
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
# @param signature_pins [Array<Pin::Signature>]
|
|
488
|
+
#
|
|
489
|
+
# @return [Array<Pin::Signature>]
|
|
490
|
+
def combine_signatures_by_type_arity(*signature_pins)
|
|
491
|
+
# @type [Hash{Array => Array<Pin::Signature>}]
|
|
492
|
+
by_type_arity = {}
|
|
493
|
+
signature_pins.each do |signature_pin|
|
|
494
|
+
by_type_arity[signature_pin.type_arity] ||= []
|
|
495
|
+
by_type_arity[signature_pin.type_arity] << signature_pin
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
by_type_arity.transform_values! do |same_type_arity_signatures|
|
|
499
|
+
combine_same_type_arity_signatures same_type_arity_signatures
|
|
500
|
+
end
|
|
501
|
+
by_type_arity.values.flatten
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
# @param same_type_arity_signatures [Array<Pin::Signature>]
|
|
505
|
+
#
|
|
506
|
+
# @return [Array<Pin::Signature>]
|
|
507
|
+
def combine_same_type_arity_signatures same_type_arity_signatures
|
|
508
|
+
# @todo Stubbing this method while we debug an infinite loop bug in Ruby 3.x
|
|
509
|
+
return same_type_arity_signatures
|
|
510
|
+
|
|
511
|
+
# rubocop:disable Lint/UnreachableCode
|
|
512
|
+
# This is an O(n^2) operation, so bail out if n is not small
|
|
513
|
+
return same_type_arity_signatures if same_type_arity_signatures.length > 10
|
|
514
|
+
|
|
515
|
+
# @param old_signatures [Array<Pin::Signature>]
|
|
516
|
+
# @param new_signature [Pin::Signature]
|
|
517
|
+
same_type_arity_signatures.reduce([]) do |old_signatures, new_signature|
|
|
518
|
+
next old_signatures + [new_signature] if old_signatures.empty?
|
|
519
|
+
old_signatures.flat_map do |old_signature|
|
|
520
|
+
potential_new_signature = old_signature.combine_with(new_signature)
|
|
521
|
+
|
|
522
|
+
if potential_new_signature.type_arity == old_signature.type_arity
|
|
523
|
+
# the number of types in each parameter and return type
|
|
524
|
+
# match, so we found compatible signatures to merge. If
|
|
525
|
+
# we increased the number of types, we'd potentially
|
|
526
|
+
# have taken away the ability to use parameter types to
|
|
527
|
+
# choose the correct return type (while Ruby doesn't
|
|
528
|
+
# dispatch based on type, RBS does distinguish overloads
|
|
529
|
+
# based on types, not just arity, allowing for type
|
|
530
|
+
# information describing how methods behave based on
|
|
531
|
+
# their input types)
|
|
532
|
+
old_signatures - [old_signature] + [potential_new_signature]
|
|
533
|
+
else
|
|
534
|
+
old_signatures + [new_signature]
|
|
535
|
+
end
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
# rubocop:enable Lint/UnreachableCode
|
|
539
|
+
end
|
|
540
|
+
|
|
488
541
|
# @param name [String]
|
|
489
542
|
# @param asgn [Boolean]
|
|
490
543
|
#
|
|
@@ -517,7 +570,7 @@ module Solargraph
|
|
|
517
570
|
# @param name [String]
|
|
518
571
|
#
|
|
519
572
|
# @return [ComplexType]
|
|
520
|
-
def param_type_from_name
|
|
573
|
+
def param_type_from_name tag, name
|
|
521
574
|
# @param t [YARD::Tags::Tag]
|
|
522
575
|
param = tag.tags(:param).select { |t| t.name == name }.first
|
|
523
576
|
return ComplexType::UNDEFINED unless param
|
|
@@ -528,23 +581,24 @@ module Solargraph
|
|
|
528
581
|
def generate_complex_type
|
|
529
582
|
tags = docstring.tags(:return).map(&:types).flatten.compact
|
|
530
583
|
return ComplexType::UNDEFINED if tags.empty?
|
|
531
|
-
ComplexType.try_parse
|
|
584
|
+
ComplexType.try_parse(*tags)
|
|
532
585
|
end
|
|
533
586
|
|
|
534
587
|
# @param api_map [ApiMap]
|
|
535
|
-
# @return [ComplexType, nil]
|
|
588
|
+
# @return [ComplexType, ComplexType::UniqueType, nil]
|
|
536
589
|
def see_reference api_map
|
|
537
590
|
# This should actually be an intersection type
|
|
538
|
-
# @param ref [YARD::Tags::Tag,
|
|
591
|
+
# @param ref [YARD::Tags::Tag, YARD::Tags::RefTag]
|
|
539
592
|
docstring.ref_tags.each do |ref|
|
|
540
593
|
# @sg-ignore ref should actually be an intersection type
|
|
541
594
|
next unless ref.tag_name == 'return' && ref.owner
|
|
542
|
-
# @sg-ignore
|
|
595
|
+
# @sg-ignore should actually be an intersection type
|
|
543
596
|
result = resolve_reference(ref.owner.to_s, api_map)
|
|
544
597
|
return result unless result.nil?
|
|
545
598
|
end
|
|
546
599
|
match = comments.match(/^[ \t]*\(see (.*)\)/m)
|
|
547
600
|
return nil if match.nil?
|
|
601
|
+
# @sg-ignore Need to add nil check here
|
|
548
602
|
resolve_reference match[1], api_map
|
|
549
603
|
end
|
|
550
604
|
|
|
@@ -559,6 +613,7 @@ module Solargraph
|
|
|
559
613
|
stack = rest_of_stack api_map
|
|
560
614
|
return nil if stack.empty?
|
|
561
615
|
stack.each do |pin|
|
|
616
|
+
# @sg-ignore Need to add nil check here
|
|
562
617
|
return pin.return_type unless pin.return_type.undefined?
|
|
563
618
|
end
|
|
564
619
|
nil
|
|
@@ -566,7 +621,7 @@ module Solargraph
|
|
|
566
621
|
|
|
567
622
|
# @param ref [String]
|
|
568
623
|
# @param api_map [ApiMap]
|
|
569
|
-
# @return [ComplexType, nil]
|
|
624
|
+
# @return [ComplexType, ComplexType::UniqueType, nil]
|
|
570
625
|
def resolve_reference ref, api_map
|
|
571
626
|
parts = ref.split(/[.#]/)
|
|
572
627
|
if parts.first.empty? || parts.one?
|
|
@@ -574,6 +629,7 @@ module Solargraph
|
|
|
574
629
|
else
|
|
575
630
|
fqns = api_map.qualify(parts.first, *gates)
|
|
576
631
|
return ComplexType::UNDEFINED if fqns.nil?
|
|
632
|
+
# @sg-ignore Need to add nil check here
|
|
577
633
|
path = fqns + ref[parts.first.length] + parts.last
|
|
578
634
|
end
|
|
579
635
|
pins = api_map.get_path_pins(path)
|
|
@@ -589,7 +645,7 @@ module Solargraph
|
|
|
589
645
|
return nil if node.nil?
|
|
590
646
|
return node.children[1].children.last if node.type == :DEFN
|
|
591
647
|
return node.children[2].children.last if node.type == :DEFS
|
|
592
|
-
return node.children[2] if
|
|
648
|
+
return node.children[2] if %i[def DEFS].include?(node.type)
|
|
593
649
|
return node.children[3] if node.type == :defs
|
|
594
650
|
nil
|
|
595
651
|
end
|
|
@@ -602,16 +658,18 @@ module Solargraph
|
|
|
602
658
|
has_nil = false
|
|
603
659
|
return ComplexType::NIL if method_body_node.nil?
|
|
604
660
|
returns_from_method_body(method_body_node).each do |n|
|
|
605
|
-
if n.nil? || [
|
|
661
|
+
if n.nil? || %i[NIL nil].include?(n.type)
|
|
606
662
|
has_nil = true
|
|
607
663
|
next
|
|
608
664
|
end
|
|
609
665
|
rng = Range.from_node(n)
|
|
610
666
|
next unless rng
|
|
611
667
|
clip = api_map.clip_at(
|
|
668
|
+
# @sg-ignore Need to add nil check here
|
|
612
669
|
location.filename,
|
|
613
670
|
rng.ending
|
|
614
671
|
)
|
|
672
|
+
# @sg-ignore Need to add nil check here
|
|
615
673
|
chain = Solargraph::Parser.chain(n, location.filename)
|
|
616
674
|
type = chain.infer(api_map, self, clip.locals)
|
|
617
675
|
result.push type unless type.undefined?
|
|
@@ -640,12 +698,12 @@ module Solargraph
|
|
|
640
698
|
#
|
|
641
699
|
# @param name [String]
|
|
642
700
|
# @return [::Array(String, ::Symbol)]
|
|
643
|
-
def parse_overload_param
|
|
701
|
+
def parse_overload_param name
|
|
644
702
|
# @todo this needs to handle mandatory vs not args, kwargs, blocks, etc
|
|
645
703
|
if name.start_with?('**')
|
|
646
|
-
[name[2
|
|
704
|
+
[name[2..], :kwrestarg]
|
|
647
705
|
elsif name.start_with?('*')
|
|
648
|
-
[name[1
|
|
706
|
+
[name[1..], :restarg]
|
|
649
707
|
else
|
|
650
708
|
[name, :arg]
|
|
651
709
|
end
|
|
@@ -663,10 +721,6 @@ module Solargraph
|
|
|
663
721
|
.join("\n")
|
|
664
722
|
.concat("```\n")
|
|
665
723
|
end
|
|
666
|
-
|
|
667
|
-
protected
|
|
668
|
-
|
|
669
|
-
attr_writer :return_type
|
|
670
724
|
end
|
|
671
725
|
end
|
|
672
726
|
end
|
|
@@ -26,6 +26,14 @@ module Solargraph
|
|
|
26
26
|
:public
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
def to_rbs
|
|
30
|
+
if scope == :class
|
|
31
|
+
"alias self.#{name} self.#{original}"
|
|
32
|
+
else
|
|
33
|
+
"alias #{name} #{original}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
29
37
|
def path
|
|
30
38
|
@path ||= namespace + (scope == :instance ? '#' : '.') + name
|
|
31
39
|
end
|
|
@@ -20,14 +20,14 @@ module Solargraph
|
|
|
20
20
|
# @param visibility [::Symbol] :public or :private
|
|
21
21
|
# @param gates [::Array<String>]
|
|
22
22
|
# @param name [String]
|
|
23
|
+
# @param [Hash{Symbol => Object}] splat
|
|
23
24
|
def initialize type: :class, visibility: :public, gates: [''], name: '', **splat
|
|
24
25
|
# super(location, namespace, name, comments)
|
|
25
26
|
super(**splat, name: name)
|
|
26
27
|
@type = type
|
|
27
28
|
@visibility = visibility
|
|
28
29
|
if name.start_with?('::')
|
|
29
|
-
|
|
30
|
-
name = name[2..-1] || ''
|
|
30
|
+
name = name[2..] || ''
|
|
31
31
|
@closure = Solargraph::Pin::ROOT_PIN
|
|
32
32
|
end
|
|
33
33
|
@open_gates = gates
|
|
@@ -37,10 +37,11 @@ module Solargraph
|
|
|
37
37
|
parts = name.split('::')
|
|
38
38
|
name = parts.pop
|
|
39
39
|
closure_name = if [Solargraph::Pin::ROOT_PIN, nil].include?(closure)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
''
|
|
41
|
+
else
|
|
42
|
+
# @sg-ignore Need to add nil check here
|
|
43
|
+
"#{closure.full_context.namespace}::"
|
|
44
|
+
end
|
|
44
45
|
closure_name += parts.join('::')
|
|
45
46
|
@closure = Pin::Namespace.new(name: closure_name, gates: [parts.join('::')], source: :namespace)
|
|
46
47
|
@context = nil
|
|
@@ -48,8 +49,14 @@ module Solargraph
|
|
|
48
49
|
@name = name
|
|
49
50
|
end
|
|
50
51
|
|
|
52
|
+
def reset_generated!
|
|
53
|
+
@return_type = nil
|
|
54
|
+
@full_context = nil
|
|
55
|
+
@path = nil
|
|
56
|
+
end
|
|
57
|
+
|
|
51
58
|
def to_rbs
|
|
52
|
-
"#{@type
|
|
59
|
+
"#{@type} #{return_type.all_params.first.to_rbs}#{rbs_generics}".strip
|
|
53
60
|
end
|
|
54
61
|
|
|
55
62
|
def inner_desc
|
|
@@ -91,7 +98,7 @@ module Solargraph
|
|
|
91
98
|
end
|
|
92
99
|
|
|
93
100
|
def return_type
|
|
94
|
-
@return_type ||= ComplexType.try_parse(
|
|
101
|
+
@return_type ||= ComplexType.try_parse((type == :class ? '::Class' : '::Module') + "<::#{path}>")
|
|
95
102
|
end
|
|
96
103
|
|
|
97
104
|
# @return [Array<String>]
|
|
@@ -105,10 +112,10 @@ module Solargraph
|
|
|
105
112
|
|
|
106
113
|
def gates
|
|
107
114
|
@gates ||= if path.empty?
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
@open_gates
|
|
116
|
+
else
|
|
117
|
+
[path] + @open_gates
|
|
118
|
+
end
|
|
112
119
|
end
|
|
113
120
|
end
|
|
114
121
|
end
|