solargraph 0.46.0 → 0.47.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/rspec.yml +41 -41
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.travis.yml +19 -19
- data/CHANGELOG.md +1130 -1115
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +128 -128
- data/Rakefile +0 -0
- data/SPONSORS.md +17 -18
- 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 -686
- 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 +225 -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 -30
- 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 -53
- 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 +56 -54
- 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 -135
- 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 -144
- 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 -63
- 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 -63
- 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 +73 -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 -201
- 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 -56
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +37 -37
- 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 +239 -212
- data/lib/solargraph/source_map.rb +180 -180
- data/lib/solargraph/type_checker/checks.rb +112 -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 -543
- 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 -215
- 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 -208
- 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 -460
- data/lib/solargraph.rb +69 -69
- data/lib/yard-solargraph.rb +33 -33
- data/solargraph.gemspec +0 -0
- metadata +12 -12
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class BaseVariable < Base
|
|
6
|
-
include Solargraph::Parser::NodeMethods
|
|
7
|
-
# include Solargraph::Source::NodeMethods
|
|
8
|
-
|
|
9
|
-
# @return [Parser::AST::Node, nil]
|
|
10
|
-
attr_reader :assignment
|
|
11
|
-
|
|
12
|
-
# @param assignment [Parser::AST::Node, nil]
|
|
13
|
-
def initialize assignment: nil, **splat
|
|
14
|
-
super(**splat)
|
|
15
|
-
@assignment = assignment
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def completion_item_kind
|
|
19
|
-
Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# @return [Integer]
|
|
23
|
-
def symbol_kind
|
|
24
|
-
Solargraph::LanguageServer::SymbolKinds::VARIABLE
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def return_type
|
|
28
|
-
@return_type ||= generate_complex_type
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def nil_assignment?
|
|
32
|
-
return_type.nil?
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def variable?
|
|
36
|
-
true
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def probe api_map
|
|
40
|
-
return ComplexType::UNDEFINED if @assignment.nil?
|
|
41
|
-
types = []
|
|
42
|
-
returns_from(@assignment).each do |node|
|
|
43
|
-
# Nil nodes may not have a location
|
|
44
|
-
if node.nil? || node.type == :NIL || node.type == :nil
|
|
45
|
-
types.push ComplexType::NIL
|
|
46
|
-
else
|
|
47
|
-
rng = Range.from_node(node)
|
|
48
|
-
next if rng.nil?
|
|
49
|
-
pos = rng.ending
|
|
50
|
-
clip = api_map.clip_at(location.filename, pos)
|
|
51
|
-
# Use the return node for inference. The clip might infer from the
|
|
52
|
-
# first node in a method call instead of the entire call.
|
|
53
|
-
chain = Parser.chain(node, nil, clip.in_block?)
|
|
54
|
-
result = chain.infer(api_map, closure, clip.locals)
|
|
55
|
-
types.push result unless result.undefined?
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
return ComplexType::UNDEFINED if types.empty?
|
|
59
|
-
ComplexType.try_parse(*types.map(&:tag))
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def == other
|
|
63
|
-
return false unless super
|
|
64
|
-
assignment == other.assignment
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def try_merge! pin
|
|
68
|
-
return false unless super
|
|
69
|
-
@assignment = pin.assignment
|
|
70
|
-
@return_type = pin.return_type
|
|
71
|
-
true
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
private
|
|
75
|
-
|
|
76
|
-
# @return [ComplexType]
|
|
77
|
-
def generate_complex_type
|
|
78
|
-
tag = docstring.tag(:type)
|
|
79
|
-
return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
|
|
80
|
-
ComplexType.new
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class BaseVariable < Base
|
|
6
|
+
include Solargraph::Parser::NodeMethods
|
|
7
|
+
# include Solargraph::Source::NodeMethods
|
|
8
|
+
|
|
9
|
+
# @return [Parser::AST::Node, nil]
|
|
10
|
+
attr_reader :assignment
|
|
11
|
+
|
|
12
|
+
# @param assignment [Parser::AST::Node, nil]
|
|
13
|
+
def initialize assignment: nil, **splat
|
|
14
|
+
super(**splat)
|
|
15
|
+
@assignment = assignment
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def completion_item_kind
|
|
19
|
+
Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [Integer]
|
|
23
|
+
def symbol_kind
|
|
24
|
+
Solargraph::LanguageServer::SymbolKinds::VARIABLE
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def return_type
|
|
28
|
+
@return_type ||= generate_complex_type
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def nil_assignment?
|
|
32
|
+
return_type.nil?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def variable?
|
|
36
|
+
true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def probe api_map
|
|
40
|
+
return ComplexType::UNDEFINED if @assignment.nil?
|
|
41
|
+
types = []
|
|
42
|
+
returns_from(@assignment).each do |node|
|
|
43
|
+
# Nil nodes may not have a location
|
|
44
|
+
if node.nil? || node.type == :NIL || node.type == :nil
|
|
45
|
+
types.push ComplexType::NIL
|
|
46
|
+
else
|
|
47
|
+
rng = Range.from_node(node)
|
|
48
|
+
next if rng.nil?
|
|
49
|
+
pos = rng.ending
|
|
50
|
+
clip = api_map.clip_at(location.filename, pos)
|
|
51
|
+
# Use the return node for inference. The clip might infer from the
|
|
52
|
+
# first node in a method call instead of the entire call.
|
|
53
|
+
chain = Parser.chain(node, nil, clip.in_block?)
|
|
54
|
+
result = chain.infer(api_map, closure, clip.locals)
|
|
55
|
+
types.push result unless result.undefined?
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
return ComplexType::UNDEFINED if types.empty?
|
|
59
|
+
ComplexType.try_parse(*types.map(&:tag))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def == other
|
|
63
|
+
return false unless super
|
|
64
|
+
assignment == other.assignment
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def try_merge! pin
|
|
68
|
+
return false unless super
|
|
69
|
+
@assignment = pin.assignment
|
|
70
|
+
@return_type = pin.return_type
|
|
71
|
+
true
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
# @return [ComplexType]
|
|
77
|
+
def generate_complex_type
|
|
78
|
+
tag = docstring.tag(:type)
|
|
79
|
+
return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
|
|
80
|
+
ComplexType.new
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
data/lib/solargraph/pin/block.rb
CHANGED
|
@@ -1,72 +1,73 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Block < Closure
|
|
6
|
-
# The signature of the method that receives this block.
|
|
7
|
-
#
|
|
8
|
-
# @return [Parser::AST::Node]
|
|
9
|
-
attr_reader :receiver
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
15
|
-
@
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# @
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# @
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Block < Closure
|
|
6
|
+
# The signature of the method that receives this block.
|
|
7
|
+
#
|
|
8
|
+
# @return [Parser::AST::Node]
|
|
9
|
+
attr_reader :receiver
|
|
10
|
+
|
|
11
|
+
# @param args [Array<Parameter>]
|
|
12
|
+
def initialize receiver: nil, args: [], context: nil, **splat
|
|
13
|
+
super(**splat)
|
|
14
|
+
@receiver = receiver
|
|
15
|
+
@context = context
|
|
16
|
+
@parameters = args
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @param api_map [ApiMap]
|
|
20
|
+
# @return [void]
|
|
21
|
+
def rebind api_map
|
|
22
|
+
@binder ||= binder_or_nil(api_map)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def binder
|
|
26
|
+
@binder || closure.binder
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [Array<Parameter>]
|
|
30
|
+
def parameters
|
|
31
|
+
@parameters ||= []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @return [Array<String>]
|
|
35
|
+
def parameter_names
|
|
36
|
+
@parameter_names ||= parameters.map(&:name)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# @param api_map [ApiMap]
|
|
42
|
+
# @return [ComplexType, nil]
|
|
43
|
+
def binder_or_nil api_map
|
|
44
|
+
return nil unless receiver
|
|
45
|
+
word = receiver.children.find { |c| c.is_a?(::Symbol) }.to_s
|
|
46
|
+
return nil unless api_map.rebindable_method_names.include?(word)
|
|
47
|
+
chain = Parser.chain(receiver, location.filename)
|
|
48
|
+
locals = api_map.source_map(location.filename).locals_at(location)
|
|
49
|
+
links_last_word = chain.links.last.word
|
|
50
|
+
if %w[instance_eval instance_exec class_eval class_exec module_eval module_exec].include?(links_last_word)
|
|
51
|
+
return chain.base.infer(api_map, self, locals)
|
|
52
|
+
end
|
|
53
|
+
if 'define_method' == links_last_word and chain.define(api_map, self, locals).first&.path == 'Module#define_method' # change class type to instance type
|
|
54
|
+
if chain.links.size > 1 # Class.define_method
|
|
55
|
+
ty = chain.base.infer(api_map, self, locals)
|
|
56
|
+
return Solargraph::ComplexType.parse(ty.namespace)
|
|
57
|
+
else # define_method without self
|
|
58
|
+
return Solargraph::ComplexType.parse(closure.binder.namespace)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
# other case without early return, read block yieldself tags
|
|
62
|
+
receiver_pin = chain.define(api_map, self, locals).first
|
|
63
|
+
if receiver_pin && receiver_pin.docstring
|
|
64
|
+
ys = receiver_pin.docstring.tag(:yieldself)
|
|
65
|
+
if ys && ys.types && !ys.types.empty?
|
|
66
|
+
return ComplexType.try_parse(*ys.types).qualify(api_map, receiver_pin.context.namespace)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class ClassVariable < BaseVariable
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class ClassVariable < BaseVariable
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Closure < Base
|
|
6
|
-
# @return [::Symbol] :class or :instance
|
|
7
|
-
attr_reader :scope
|
|
8
|
-
|
|
9
|
-
def initialize scope: :class, **splat
|
|
10
|
-
super(**splat)
|
|
11
|
-
@scope = scope
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def context
|
|
15
|
-
@context ||= begin
|
|
16
|
-
result = super
|
|
17
|
-
if scope == :instance
|
|
18
|
-
Solargraph::ComplexType.parse(result.namespace)
|
|
19
|
-
else
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def binder
|
|
26
|
-
@binder || context
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# @return [Array<String>]
|
|
30
|
-
def gates
|
|
31
|
-
# @todo This check might not be necessary. There should always be a
|
|
32
|
-
# root pin
|
|
33
|
-
closure ? closure.gates : ['']
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Closure < Base
|
|
6
|
+
# @return [::Symbol] :class or :instance
|
|
7
|
+
attr_reader :scope
|
|
8
|
+
|
|
9
|
+
def initialize scope: :class, **splat
|
|
10
|
+
super(**splat)
|
|
11
|
+
@scope = scope
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def context
|
|
15
|
+
@context ||= begin
|
|
16
|
+
result = super
|
|
17
|
+
if scope == :instance
|
|
18
|
+
Solargraph::ComplexType.parse(result.namespace)
|
|
19
|
+
else
|
|
20
|
+
result
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def binder
|
|
26
|
+
@binder || context
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [Array<String>]
|
|
30
|
+
def gates
|
|
31
|
+
# @todo This check might not be necessary. There should always be a
|
|
32
|
+
# root pin
|
|
33
|
+
closure ? closure.gates : ['']
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
module Common
|
|
6
|
-
# @return [Location]
|
|
7
|
-
attr_reader :location
|
|
8
|
-
|
|
9
|
-
# @return [Pin::Base, nil]
|
|
10
|
-
attr_reader :closure
|
|
11
|
-
|
|
12
|
-
# @return [String]
|
|
13
|
-
def name
|
|
14
|
-
@name ||= ''
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# @return [ComplexType]
|
|
18
|
-
def return_type
|
|
19
|
-
@return_type ||= ComplexType::UNDEFINED
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# @return [ComplexType]
|
|
23
|
-
def context
|
|
24
|
-
# Get the static context from the nearest namespace
|
|
25
|
-
@context ||= find_context
|
|
26
|
-
end
|
|
27
|
-
alias full_context context
|
|
28
|
-
|
|
29
|
-
# @return [String]
|
|
30
|
-
def namespace
|
|
31
|
-
context.namespace.to_s
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# @return [ComplexType]
|
|
35
|
-
def binder
|
|
36
|
-
@binder || context
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# @return [String]
|
|
40
|
-
def comments
|
|
41
|
-
@comments ||= ''
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# @return [String]
|
|
45
|
-
def path
|
|
46
|
-
@path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
# @return [ComplexType]
|
|
52
|
-
def find_context
|
|
53
|
-
here = closure
|
|
54
|
-
until here.nil?
|
|
55
|
-
if here.is_a?(Pin::Namespace)
|
|
56
|
-
return here.return_type
|
|
57
|
-
elsif here.is_a?(Pin::Method)
|
|
58
|
-
if here.scope == :instance
|
|
59
|
-
return ComplexType.try_parse(here.context.namespace)
|
|
60
|
-
else
|
|
61
|
-
return here.context
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
here = here.closure
|
|
65
|
-
end
|
|
66
|
-
ComplexType::ROOT
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
module Common
|
|
6
|
+
# @return [Location]
|
|
7
|
+
attr_reader :location
|
|
8
|
+
|
|
9
|
+
# @return [Pin::Base, nil]
|
|
10
|
+
attr_reader :closure
|
|
11
|
+
|
|
12
|
+
# @return [String]
|
|
13
|
+
def name
|
|
14
|
+
@name ||= ''
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @return [ComplexType]
|
|
18
|
+
def return_type
|
|
19
|
+
@return_type ||= ComplexType::UNDEFINED
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [ComplexType]
|
|
23
|
+
def context
|
|
24
|
+
# Get the static context from the nearest namespace
|
|
25
|
+
@context ||= find_context
|
|
26
|
+
end
|
|
27
|
+
alias full_context context
|
|
28
|
+
|
|
29
|
+
# @return [String]
|
|
30
|
+
def namespace
|
|
31
|
+
context.namespace.to_s
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @return [ComplexType]
|
|
35
|
+
def binder
|
|
36
|
+
@binder || context
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [String]
|
|
40
|
+
def comments
|
|
41
|
+
@comments ||= ''
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @return [String]
|
|
45
|
+
def path
|
|
46
|
+
@path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
# @return [ComplexType]
|
|
52
|
+
def find_context
|
|
53
|
+
here = closure
|
|
54
|
+
until here.nil?
|
|
55
|
+
if here.is_a?(Pin::Namespace)
|
|
56
|
+
return here.return_type
|
|
57
|
+
elsif here.is_a?(Pin::Method)
|
|
58
|
+
if here.scope == :instance
|
|
59
|
+
return ComplexType.try_parse(here.context.namespace)
|
|
60
|
+
else
|
|
61
|
+
return here.context
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
here = here.closure
|
|
65
|
+
end
|
|
66
|
+
ComplexType::ROOT
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Constant < BaseVariable
|
|
6
|
-
attr_reader :visibility
|
|
7
|
-
|
|
8
|
-
def initialize visibility: :public, **splat
|
|
9
|
-
super(**splat)
|
|
10
|
-
@visibility = visibility
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def return_type
|
|
14
|
-
@return_type ||= generate_complex_type
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def completion_item_kind
|
|
18
|
-
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @return [Integer]
|
|
22
|
-
def symbol_kind
|
|
23
|
-
LanguageServer::SymbolKinds::CONSTANT
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def path
|
|
27
|
-
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
# @return [ComplexType]
|
|
33
|
-
def generate_complex_type
|
|
34
|
-
tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
|
|
35
|
-
if tags.empty?
|
|
36
|
-
tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
|
|
37
|
-
end
|
|
38
|
-
return ComplexType::UNDEFINED if tags.empty?
|
|
39
|
-
ComplexType.try_parse *tags
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Constant < BaseVariable
|
|
6
|
+
attr_reader :visibility
|
|
7
|
+
|
|
8
|
+
def initialize visibility: :public, **splat
|
|
9
|
+
super(**splat)
|
|
10
|
+
@visibility = visibility
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def return_type
|
|
14
|
+
@return_type ||= generate_complex_type
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def completion_item_kind
|
|
18
|
+
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [Integer]
|
|
22
|
+
def symbol_kind
|
|
23
|
+
LanguageServer::SymbolKinds::CONSTANT
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def path
|
|
27
|
+
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# @return [ComplexType]
|
|
33
|
+
def generate_complex_type
|
|
34
|
+
tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
|
|
35
|
+
if tags.empty?
|
|
36
|
+
tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
|
|
37
|
+
end
|
|
38
|
+
return ComplexType::UNDEFINED if tags.empty?
|
|
39
|
+
ComplexType.try_parse *tags
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|