solargraph 0.59.0.dev.1 → 0.59.0.dev.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/.github/workflows/plugins.yml +4 -1
- data/.github/workflows/rspec.yml +3 -14
- data/.gitignore +1 -0
- data/.rubocop.yml +32 -5
- data/.rubocop_todo.yml +37 -931
- data/CHANGELOG.md +7 -1
- data/Gemfile +3 -1
- data/Rakefile +25 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/index.rb +5 -11
- data/lib/solargraph/api_map/source_to_yard.rb +9 -8
- data/lib/solargraph/api_map/store.rb +22 -20
- data/lib/solargraph/api_map.rb +50 -37
- data/lib/solargraph/bench.rb +44 -45
- data/lib/solargraph/complex_type/type_methods.rb +12 -15
- data/lib/solargraph/complex_type/unique_type.rb +54 -43
- data/lib/solargraph/complex_type.rb +69 -61
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
- data/lib/solargraph/convention/data_definition.rb +1 -1
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
- data/lib/solargraph/convention/struct_definition.rb +3 -3
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +19 -17
- data/lib/solargraph/converters/dl.rb +17 -15
- data/lib/solargraph/converters/dt.rb +17 -15
- data/lib/solargraph/converters/misc.rb +3 -1
- data/lib/solargraph/diagnostics/rubocop.rb +10 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
- data/lib/solargraph/diagnostics/type_check.rb +10 -10
- data/lib/solargraph/diagnostics/update_errors.rb +37 -41
- data/lib/solargraph/doc_map.rb +9 -10
- data/lib/solargraph/equality.rb +3 -3
- data/lib/solargraph/gem_pins.rb +7 -5
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +2 -3
- data/lib/solargraph/language_server/host/message_worker.rb +2 -2
- data/lib/solargraph/language_server/host/sources.rb +1 -1
- data/lib/solargraph/language_server/host.rb +24 -21
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +197 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
- data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +29 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +28 -33
- data/lib/solargraph/location.rb +10 -12
- data/lib/solargraph/logging.rb +4 -4
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +12 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -42
- data/lib/solargraph/parser/node_processor/base.rb +4 -4
- data/lib/solargraph/parser/node_processor.rb +1 -1
- data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -4
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem.rb +14 -12
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +25 -23
- data/lib/solargraph/pin/base.rb +78 -64
- data/lib/solargraph/pin/base_variable.rb +28 -71
- data/lib/solargraph/pin/block.rb +3 -2
- data/lib/solargraph/pin/breakable.rb +2 -0
- data/lib/solargraph/pin/callable.rb +23 -26
- data/lib/solargraph/pin/closure.rb +5 -4
- data/lib/solargraph/pin/common.rb +5 -2
- data/lib/solargraph/pin/compound_statement.rb +3 -3
- data/lib/solargraph/pin/constant.rb +43 -45
- data/lib/solargraph/pin/conversions.rb +9 -4
- data/lib/solargraph/pin/delegated_method.rb +4 -4
- data/lib/solargraph/pin/documenting.rb +3 -2
- data/lib/solargraph/pin/local_variable.rb +4 -4
- data/lib/solargraph/pin/method.rb +71 -70
- data/lib/solargraph/pin/namespace.rb +13 -12
- data/lib/solargraph/pin/parameter.rb +28 -27
- data/lib/solargraph/pin/proxy_type.rb +2 -0
- data/lib/solargraph/pin/reference.rb +17 -0
- data/lib/solargraph/pin/search.rb +2 -2
- data/lib/solargraph/pin/signature.rb +9 -14
- data/lib/solargraph/pin/symbol.rb +1 -0
- data/lib/solargraph/pin/until.rb +1 -3
- data/lib/solargraph/pin/while.rb +1 -3
- data/lib/solargraph/pin_cache.rb +16 -19
- data/lib/solargraph/position.rb +35 -17
- data/lib/solargraph/range.rb +10 -9
- data/lib/solargraph/rbs_map/conversions.rb +312 -206
- data/lib/solargraph/rbs_map/core_fills.rb +91 -84
- data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
- data/lib/solargraph/rbs_map.rb +3 -12
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +63 -53
- data/lib/solargraph/source/chain/array.rb +39 -37
- data/lib/solargraph/source/chain/call.rb +49 -44
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +3 -1
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +8 -6
- data/lib/solargraph/source/chain/if.rb +11 -10
- data/lib/solargraph/source/chain/instance_variable.rb +3 -1
- data/lib/solargraph/source/chain/link.rb +99 -109
- data/lib/solargraph/source/chain/literal.rb +4 -6
- data/lib/solargraph/source/chain/or.rb +2 -4
- data/lib/solargraph/source/chain/q_call.rb +13 -11
- data/lib/solargraph/source/chain/variable.rb +15 -13
- data/lib/solargraph/source/chain/z_super.rb +28 -30
- data/lib/solargraph/source/chain.rb +24 -16
- data/lib/solargraph/source/change.rb +3 -3
- data/lib/solargraph/source/cursor.rb +18 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +46 -32
- data/lib/solargraph/source/updater.rb +1 -1
- data/lib/solargraph/source.rb +27 -29
- data/lib/solargraph/source_map/clip.rb +38 -30
- data/lib/solargraph/source_map/mapper.rb +52 -46
- data/lib/solargraph/source_map.rb +8 -4
- data/lib/solargraph/type_checker/rules.rb +8 -8
- data/lib/solargraph/type_checker.rb +95 -101
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +10 -9
- data/lib/solargraph/workspace/gemspecs.rb +1 -1
- data/lib/solargraph/workspace.rb +21 -44
- data/lib/solargraph/yard_map/helpers.rb +6 -2
- data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
- data/lib/solargraph/yard_map/mapper.rb +12 -12
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph.rb +5 -5
- data/solargraph.gemspec +35 -34
- metadata +28 -28
|
@@ -14,6 +14,7 @@ module Solargraph
|
|
|
14
14
|
# @param block [Signature, nil]
|
|
15
15
|
# @param return_type [ComplexType, nil]
|
|
16
16
|
# @param parameters [::Array<Pin::Parameter>]
|
|
17
|
+
# @param [Hash{Symbol => Object}] splat
|
|
17
18
|
def initialize block: nil, return_type: nil, parameters: [], **splat
|
|
18
19
|
super(**splat)
|
|
19
20
|
@block = block
|
|
@@ -36,7 +37,7 @@ module Solargraph
|
|
|
36
37
|
# @param other [self]
|
|
37
38
|
#
|
|
38
39
|
# @return [Pin::Signature, nil]
|
|
39
|
-
def combine_blocks
|
|
40
|
+
def combine_blocks other
|
|
40
41
|
if block.nil?
|
|
41
42
|
other.block
|
|
42
43
|
elsif other.block.nil?
|
|
@@ -51,10 +52,10 @@ module Solargraph
|
|
|
51
52
|
# @param attrs [Hash{Symbol => Object}]
|
|
52
53
|
#
|
|
53
54
|
# @return [self]
|
|
54
|
-
def combine_with
|
|
55
|
+
def combine_with other, attrs = {}
|
|
55
56
|
new_attrs = {
|
|
56
57
|
block: combine_blocks(other),
|
|
57
|
-
return_type: combine_return_type(other)
|
|
58
|
+
return_type: combine_return_type(other)
|
|
58
59
|
}.merge(attrs)
|
|
59
60
|
new_attrs[:parameters] = choose_parameters(other).clone.freeze unless new_attrs.key?(:parameters)
|
|
60
61
|
super(other, new_attrs)
|
|
@@ -72,8 +73,10 @@ module Solargraph
|
|
|
72
73
|
# @param other [self]
|
|
73
74
|
#
|
|
74
75
|
# @return [Array<Pin::Parameter>]
|
|
75
|
-
def choose_parameters
|
|
76
|
-
|
|
76
|
+
def choose_parameters other
|
|
77
|
+
if other.arity != arity
|
|
78
|
+
raise "Trying to combine two pins with different arities - \nself =#{inspect}, \nother=#{other.inspect}, \n\n self.arity=#{arity}, \nother.arity=#{other.arity}"
|
|
79
|
+
end
|
|
77
80
|
# @param param [Pin::Parameter]
|
|
78
81
|
# @param other_param [Pin::Parameter]
|
|
79
82
|
parameters.zip(other.parameters).map do |param, other_param|
|
|
@@ -129,16 +132,15 @@ module Solargraph
|
|
|
129
132
|
# @param return_type_context [ComplexType, nil]
|
|
130
133
|
# @param yield_arg_types [Array<ComplexType>, nil]
|
|
131
134
|
# @param yield_return_type_context [ComplexType, nil]
|
|
132
|
-
# @param context [ComplexType, nil]
|
|
133
135
|
# @param resolved_generic_values [Hash{String => ComplexType}]
|
|
134
136
|
#
|
|
135
137
|
# @return [self]
|
|
136
|
-
def resolve_generics_from_context
|
|
138
|
+
def resolve_generics_from_context generics_to_resolve,
|
|
137
139
|
arg_types = nil,
|
|
138
140
|
return_type_context = nil,
|
|
139
141
|
yield_arg_types = nil,
|
|
140
142
|
yield_return_type_context = nil,
|
|
141
|
-
resolved_generic_values: {}
|
|
143
|
+
resolved_generic_values: {}
|
|
142
144
|
callable = super(generics_to_resolve, return_type_context, resolved_generic_values: resolved_generic_values)
|
|
143
145
|
callable.parameters = callable.parameters.each_with_index.map do |param, i|
|
|
144
146
|
if arg_types.nil?
|
|
@@ -149,10 +151,12 @@ module Solargraph
|
|
|
149
151
|
resolved_generic_values: resolved_generic_values)
|
|
150
152
|
end
|
|
151
153
|
end
|
|
152
|
-
callable.block
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
if callable.block?
|
|
155
|
+
callable.block = block.resolve_generics_from_context(generics_to_resolve,
|
|
156
|
+
yield_arg_types,
|
|
157
|
+
yield_return_type_context,
|
|
158
|
+
resolved_generic_values: resolved_generic_values)
|
|
159
|
+
end
|
|
156
160
|
callable
|
|
157
161
|
end
|
|
158
162
|
|
|
@@ -171,7 +175,7 @@ module Solargraph
|
|
|
171
175
|
# @sg-ignore Need to add nil check here
|
|
172
176
|
# @return [String]
|
|
173
177
|
def method_name
|
|
174
|
-
raise "closure was nil in #{
|
|
178
|
+
raise "closure was nil in #{inspect}" if closure.nil?
|
|
175
179
|
# @sg-ignore Need to add nil check here
|
|
176
180
|
@method_name ||= closure.name
|
|
177
181
|
end
|
|
@@ -181,16 +185,15 @@ module Solargraph
|
|
|
181
185
|
# @param return_type_context [ComplexType, nil]
|
|
182
186
|
# @param yield_arg_types [Array<ComplexType>, nil]
|
|
183
187
|
# @param yield_return_type_context [ComplexType, nil]
|
|
184
|
-
# @param context [ComplexType, nil]
|
|
185
188
|
# @param resolved_generic_values [Hash{String => ComplexType}]
|
|
186
189
|
#
|
|
187
190
|
# @return [self]
|
|
188
|
-
def resolve_generics_from_context_until_complete
|
|
191
|
+
def resolve_generics_from_context_until_complete generics_to_resolve,
|
|
189
192
|
arg_types = nil,
|
|
190
193
|
return_type_context = nil,
|
|
191
194
|
yield_arg_types = nil,
|
|
192
195
|
yield_return_type_context = nil,
|
|
193
|
-
resolved_generic_values: {}
|
|
196
|
+
resolved_generic_values: {}
|
|
194
197
|
# See
|
|
195
198
|
# https://github.com/soutaro/steep/tree/master/lib/steep/type_inference
|
|
196
199
|
# and
|
|
@@ -208,7 +211,7 @@ module Solargraph
|
|
|
208
211
|
resolved_generic_values: resolved_generic_values)
|
|
209
212
|
if last_resolved_generic_values == resolved_generic_values
|
|
210
213
|
# erase anything unresolved
|
|
211
|
-
return new_pin.erase_generics(
|
|
214
|
+
return new_pin.erase_generics(generics)
|
|
212
215
|
end
|
|
213
216
|
new_pin.resolve_generics_from_context_until_complete(generics_to_resolve,
|
|
214
217
|
arg_types,
|
|
@@ -221,7 +224,7 @@ module Solargraph
|
|
|
221
224
|
# @yieldparam [ComplexType]
|
|
222
225
|
# @yieldreturn [ComplexType]
|
|
223
226
|
# @return [self]
|
|
224
|
-
def transform_types
|
|
227
|
+
def transform_types &transform
|
|
225
228
|
# @todo 'super' alone should work here I think, but doesn't typecheck at level typed
|
|
226
229
|
callable = super(&transform)
|
|
227
230
|
callable.block = block.transform_types(&transform) if block?
|
|
@@ -246,11 +249,6 @@ module Solargraph
|
|
|
246
249
|
true
|
|
247
250
|
end
|
|
248
251
|
|
|
249
|
-
def reset_generated!
|
|
250
|
-
super
|
|
251
|
-
@parameters.each(&:reset_generated!)
|
|
252
|
-
end
|
|
253
|
-
|
|
254
252
|
# @return [Integer]
|
|
255
253
|
def mandatory_positional_param_count
|
|
256
254
|
parameters.count(&:arg?)
|
|
@@ -258,12 +256,11 @@ module Solargraph
|
|
|
258
256
|
|
|
259
257
|
# @return [String]
|
|
260
258
|
def parameters_to_rbs
|
|
261
|
-
#
|
|
262
|
-
rbs_generics + '(' + parameters.map { |param| param.to_rbs }.join(', ') + ') ' + (block.nil? ? '' : '{ ' + block.to_rbs + ' } ')
|
|
259
|
+
"#{rbs_generics}(#{parameters.map(&:to_rbs).join(', ')}) #{"{ #{block.to_rbs} } " unless block.nil?}"
|
|
263
260
|
end
|
|
264
261
|
|
|
265
262
|
def to_rbs
|
|
266
|
-
parameters_to_rbs
|
|
263
|
+
"#{parameters_to_rbs}-> #{return_type&.to_rbs || 'untyped'}"
|
|
267
264
|
end
|
|
268
265
|
|
|
269
266
|
def block?
|
|
@@ -9,7 +9,8 @@ module Solargraph
|
|
|
9
9
|
# @param scope [::Symbol] :class or :instance
|
|
10
10
|
# @param generics [::Array<Pin::String>, nil]
|
|
11
11
|
# @param generic_defaults [Hash{String => ComplexType}]
|
|
12
|
-
|
|
12
|
+
# @param [Hash{Symbol => Object}] splat
|
|
13
|
+
def initialize scope: :class, generics: nil, generic_defaults: {}, **splat
|
|
13
14
|
super(**splat)
|
|
14
15
|
@scope = scope
|
|
15
16
|
@generics = generics
|
|
@@ -25,10 +26,10 @@ module Solargraph
|
|
|
25
26
|
# @param attrs [Hash{Symbol => Object}]
|
|
26
27
|
#
|
|
27
28
|
# @return [self]
|
|
28
|
-
def combine_with
|
|
29
|
+
def combine_with other, attrs = {}
|
|
29
30
|
new_attrs = {
|
|
30
31
|
scope: assert_same(other, :scope),
|
|
31
|
-
generics: generics.empty? ? other.generics : generics
|
|
32
|
+
generics: generics.empty? ? other.generics : generics
|
|
32
33
|
}.merge(attrs)
|
|
33
34
|
super(other, new_attrs)
|
|
34
35
|
end
|
|
@@ -61,7 +62,7 @@ module Solargraph
|
|
|
61
62
|
def rbs_generics
|
|
62
63
|
return '' if generics.empty?
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
"[#{generics.map(&:to_s).join(', ')}] "
|
|
65
66
|
end
|
|
66
67
|
end
|
|
67
68
|
end
|
|
@@ -18,7 +18,7 @@ module Solargraph
|
|
|
18
18
|
|
|
19
19
|
# @param value [Pin::Closure]
|
|
20
20
|
# @return [void]
|
|
21
|
-
def closure=
|
|
21
|
+
def closure= value
|
|
22
22
|
@closure = value
|
|
23
23
|
# remove cached values generated from closure
|
|
24
24
|
reset_generated!
|
|
@@ -26,7 +26,10 @@ module Solargraph
|
|
|
26
26
|
|
|
27
27
|
# @return [Pin::Closure, nil]
|
|
28
28
|
def closure
|
|
29
|
-
|
|
29
|
+
unless @closure
|
|
30
|
+
Solargraph.assert_or_log(:closure,
|
|
31
|
+
"Closure not set on #{self.class} #{name.inspect} from #{source.inspect}")
|
|
32
|
+
end
|
|
30
33
|
@closure
|
|
31
34
|
end
|
|
32
35
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Solargraph
|
|
2
4
|
module Pin
|
|
3
5
|
# A series of statements where if a given statement executes, /all
|
|
@@ -42,10 +44,8 @@ module Solargraph
|
|
|
42
44
|
class CompoundStatement < Pin::Base
|
|
43
45
|
attr_reader :node
|
|
44
46
|
|
|
45
|
-
# @param receiver [Parser::AST::Node, nil]
|
|
46
47
|
# @param node [Parser::AST::Node, nil]
|
|
47
|
-
# @param
|
|
48
|
-
# @param args [::Array<Parameter>]
|
|
48
|
+
# @param [Hash{Symbol => Object}] splat
|
|
49
49
|
def initialize node: nil, **splat
|
|
50
50
|
super(**splat)
|
|
51
51
|
@node = node
|
|
@@ -1,45 +1,43 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Constant < BaseVariable
|
|
6
|
-
attr_reader :visibility
|
|
7
|
-
|
|
8
|
-
# @param visibility [::Symbol] The visibility of the constant (:public, :protected, or :private)
|
|
9
|
-
# @param splat [Hash] Additional options supported by superclasses
|
|
10
|
-
def initialize visibility: :public, **splat
|
|
11
|
-
super(**splat)
|
|
12
|
-
@visibility = visibility
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def return_type
|
|
16
|
-
@return_type ||= generate_complex_type
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def completion_item_kind
|
|
20
|
-
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @return [Integer]
|
|
24
|
-
def symbol_kind
|
|
25
|
-
LanguageServer::SymbolKinds::CONSTANT
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def path
|
|
29
|
-
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
# @return [ComplexType]
|
|
35
|
-
def generate_complex_type
|
|
36
|
-
tags = docstring.tags(:return).map(&:types).flatten.
|
|
37
|
-
if tags.empty?
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Constant < BaseVariable
|
|
6
|
+
attr_reader :visibility
|
|
7
|
+
|
|
8
|
+
# @param visibility [::Symbol] The visibility of the constant (:public, :protected, or :private)
|
|
9
|
+
# @param splat [Hash] Additional options supported by superclasses
|
|
10
|
+
def initialize visibility: :public, **splat
|
|
11
|
+
super(**splat)
|
|
12
|
+
@visibility = visibility
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def return_type
|
|
16
|
+
@return_type ||= generate_complex_type
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def completion_item_kind
|
|
20
|
+
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [Integer]
|
|
24
|
+
def symbol_kind
|
|
25
|
+
LanguageServer::SymbolKinds::CONSTANT
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def path
|
|
29
|
+
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @return [ComplexType]
|
|
35
|
+
def generate_complex_type
|
|
36
|
+
tags = docstring.tags(:return).map(&:types).flatten.compact
|
|
37
|
+
tags = docstring.tags(:type).map(&:types).flatten.compact if tags.empty?
|
|
38
|
+
return ComplexType::UNDEFINED if tags.empty?
|
|
39
|
+
ComplexType.try_parse(*tags)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -43,8 +43,7 @@ module Solargraph
|
|
|
43
43
|
data: {
|
|
44
44
|
path: path,
|
|
45
45
|
return_type: return_type.tag,
|
|
46
|
-
|
|
47
|
-
location: (location ? location.to_hash : nil),
|
|
46
|
+
location: location&.to_hash,
|
|
48
47
|
deprecated: deprecated?
|
|
49
48
|
}
|
|
50
49
|
}
|
|
@@ -73,7 +72,13 @@ module Solargraph
|
|
|
73
72
|
# This property is not cached in an instance variable because it can
|
|
74
73
|
# change when pins get proxied.
|
|
75
74
|
detail = String.new
|
|
76
|
-
|
|
75
|
+
unless return_type.undefined?
|
|
76
|
+
detail += "=#{if probed?
|
|
77
|
+
'~'
|
|
78
|
+
else
|
|
79
|
+
(proxied? ? '^' : '>')
|
|
80
|
+
end} #{return_type}"
|
|
81
|
+
end
|
|
77
82
|
detail.strip!
|
|
78
83
|
return nil if detail.empty?
|
|
79
84
|
detail
|
|
@@ -117,7 +122,7 @@ module Solargraph
|
|
|
117
122
|
# @return [String]
|
|
118
123
|
def escape_brackets text
|
|
119
124
|
# text.gsub(/(\<|\>)/, "\\#{$1}")
|
|
120
|
-
text.gsub(
|
|
125
|
+
text.gsub('<', '\<').gsub('>', '\>')
|
|
121
126
|
end
|
|
122
127
|
end
|
|
123
128
|
end
|
|
@@ -15,6 +15,7 @@ module Solargraph
|
|
|
15
15
|
# @param receiver [Source::Chain, nil] the source code used to resolve the receiver for this delegated method.
|
|
16
16
|
# @param name [String, nil]
|
|
17
17
|
# @param receiver_method_name [String, nil] the method name that will be called on the receiver (defaults to :name).
|
|
18
|
+
# @param [Hash{Symbol => Object}] splat
|
|
18
19
|
def initialize(method: nil, receiver: nil, name: method&.name, receiver_method_name: name, **splat)
|
|
19
20
|
raise ArgumentError, 'either :method or :receiver is required' if (method && receiver) || (!method && !receiver)
|
|
20
21
|
# @sg-ignore Need to add nil check here
|
|
@@ -35,7 +36,6 @@ module Solargraph
|
|
|
35
36
|
@resolved_method&.send(:location)
|
|
36
37
|
end
|
|
37
38
|
|
|
38
|
-
|
|
39
39
|
def type_location
|
|
40
40
|
return super if super
|
|
41
41
|
|
|
@@ -59,7 +59,7 @@ module Solargraph
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
# @param api_map [ApiMap]
|
|
62
|
-
def resolvable?
|
|
62
|
+
def resolvable? api_map
|
|
63
63
|
resolve_method(api_map)
|
|
64
64
|
!!@resolved_method
|
|
65
65
|
end
|
|
@@ -112,10 +112,10 @@ module Solargraph
|
|
|
112
112
|
#
|
|
113
113
|
# @param chain [Source::Chain]
|
|
114
114
|
# @return [String]
|
|
115
|
-
def print_chain
|
|
115
|
+
def print_chain chain
|
|
116
116
|
out = +''
|
|
117
117
|
chain.links.each_with_index do |link, index|
|
|
118
|
-
if index
|
|
118
|
+
if index.positive?
|
|
119
119
|
if Source::Chain::Constant
|
|
120
120
|
out << '::' unless link.word.start_with?('::')
|
|
121
121
|
else
|
|
@@ -62,7 +62,7 @@ module Solargraph
|
|
|
62
62
|
|
|
63
63
|
# @return [String]
|
|
64
64
|
def to_code
|
|
65
|
-
"\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{@plaintext.end_with?("\n")
|
|
65
|
+
"\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{"\n" unless @plaintext.end_with?("\n")}```\n\n"
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
# @return [String]
|
|
@@ -78,7 +78,8 @@ module Solargraph
|
|
|
78
78
|
# line and at least two spaces of indentation. This is a common
|
|
79
79
|
# convention in Ruby core documentation, e.g., String#split.
|
|
80
80
|
sections = [DocSection.new(false)]
|
|
81
|
-
Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t",
|
|
81
|
+
Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t",
|
|
82
|
+
' '))).lines.each do |l|
|
|
82
83
|
if l.start_with?(' ')
|
|
83
84
|
# Code block
|
|
84
85
|
sections.push DocSection.new(true) unless sections.last.code?
|
|
@@ -6,7 +6,7 @@ module Solargraph
|
|
|
6
6
|
# @param api_map [ApiMap]
|
|
7
7
|
# @return [ComplexType, ComplexType::UniqueType]
|
|
8
8
|
def probe api_map
|
|
9
|
-
if presence_certain? && return_type
|
|
9
|
+
if presence_certain? && return_type&.defined?
|
|
10
10
|
# flow sensitive typing has already figured out this type
|
|
11
11
|
# has been downcast - use the type it figured out
|
|
12
12
|
# @sg-ignore flow sensitive typing should support ivars
|
|
@@ -16,15 +16,15 @@ module Solargraph
|
|
|
16
16
|
super
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def combine_with
|
|
19
|
+
def combine_with other, attrs = {}
|
|
20
20
|
# keep this as a parameter
|
|
21
|
-
return other.combine_with(self, attrs) if other.is_a?(Parameter) && !
|
|
21
|
+
return other.combine_with(self, attrs) if other.is_a?(Parameter) && !is_a?(Parameter)
|
|
22
22
|
|
|
23
23
|
super
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def to_rbs
|
|
27
|
-
|
|
27
|
+
"#{name || '(anon)'} #{return_type&.to_rbs || 'untyped'}"
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|