solargraph 0.46.0 → 0.54.5
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/FUNDING.yml +1 -0
- data/.github/workflows/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +37 -41
- data/.github/workflows/typecheck.yml +34 -0
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.yardopts +2 -2
- data/CHANGELOG.md +1338 -1115
- data/Gemfile +0 -0
- data/LICENSE +1 -1
- data/README.md +131 -128
- data/Rakefile +0 -0
- data/SPONSORS.md +10 -18
- data/bin/solargraph +0 -0
- data/lib/solargraph/api_map/cache.rb +109 -70
- data/lib/solargraph/api_map/index.rb +167 -0
- data/lib/solargraph/api_map/source_to_yard.rb +88 -81
- data/lib/solargraph/api_map/store.rb +260 -256
- data/lib/solargraph/api_map.rb +870 -686
- data/lib/solargraph/bench.rb +44 -27
- data/lib/solargraph/cache.rb +77 -0
- data/lib/solargraph/complex_type/type_methods.rb +217 -130
- data/lib/solargraph/complex_type/unique_type.rb +386 -75
- data/lib/solargraph/complex_type.rb +394 -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/rakefile.rb +17 -0
- data/lib/solargraph/convention.rb +47 -47
- data/lib/solargraph/converters/dd.rb +17 -12
- data/lib/solargraph/converters/dl.rb +15 -12
- data/lib/solargraph/converters/dt.rb +15 -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 +113 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +66 -63
- data/lib/solargraph/diagnostics/severities.rb +15 -15
- data/lib/solargraph/diagnostics/type_check.rb +55 -54
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/doc_map.rb +188 -0
- data/lib/solargraph/environ.rb +45 -45
- data/lib/solargraph/equality.rb +33 -0
- data/lib/solargraph/gem_pins.rb +72 -0
- 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/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +128 -111
- data/lib/solargraph/language_server/host/message_worker.rb +106 -59
- data/lib/solargraph/language_server/host/sources.rb +99 -156
- data/lib/solargraph/language_server/host.rb +861 -865
- data/lib/solargraph/language_server/message/base.rb +96 -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 +60 -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 +112 -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 +19 -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 +191 -162
- data/lib/solargraph/language_server/message/initialized.rb +28 -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 +56 -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 +26 -23
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +131 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -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 +24 -29
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -30
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -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 +94 -93
- data/lib/solargraph/language_server/message_types.rb +14 -14
- data/lib/solargraph/language_server/progress.rb +135 -0
- 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 +68 -53
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -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 +20 -19
- data/lib/solargraph/library.rb +663 -546
- data/lib/solargraph/location.rb +58 -37
- data/lib/solargraph/logging.rb +27 -27
- data/lib/solargraph/page.rb +89 -83
- data/lib/solargraph/parser/comment_ripper.rb +56 -52
- data/lib/solargraph/parser/node_methods.rb +83 -43
- data/lib/solargraph/parser/node_processor/base.rb +87 -77
- data/lib/solargraph/parser/node_processor.rb +45 -43
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +153 -135
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +18 -16
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +164 -148
- data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +43 -42
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +35 -25
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/def_node.rb +50 -63
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +36 -36
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +28 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +16 -16
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +36 -36
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +42 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +259 -257
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -0
- data/lib/solargraph/parser/region.rb +66 -66
- data/lib/solargraph/parser/snippet.rb +15 -13
- data/lib/solargraph/parser.rb +22 -26
- data/lib/solargraph/pin/base.rb +378 -296
- data/lib/solargraph/pin/base_variable.rb +118 -84
- data/lib/solargraph/pin/block.rb +101 -72
- data/lib/solargraph/pin/callable.rb +147 -0
- data/lib/solargraph/pin/class_variable.rb +8 -8
- data/lib/solargraph/pin/closure.rb +57 -37
- data/lib/solargraph/pin/common.rb +70 -70
- data/lib/solargraph/pin/constant.rb +43 -43
- data/lib/solargraph/pin/conversions.rb +123 -96
- data/lib/solargraph/pin/delegated_method.rb +101 -0
- data/lib/solargraph/pin/documenting.rb +98 -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 +34 -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 +67 -55
- data/lib/solargraph/pin/method.rb +527 -245
- data/lib/solargraph/pin/method_alias.rb +31 -31
- data/lib/solargraph/pin/namespace.rb +107 -91
- data/lib/solargraph/pin/parameter.rb +212 -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 +22 -14
- data/lib/solargraph/pin/search.rb +56 -56
- data/lib/solargraph/pin/signature.rb +17 -0
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +41 -37
- data/lib/solargraph/position.rb +107 -100
- data/lib/solargraph/range.rb +98 -95
- data/lib/solargraph/rbs_map/conversions.rb +646 -0
- data/lib/solargraph/rbs_map/core_fills.rb +50 -0
- data/lib/solargraph/rbs_map/core_map.rb +28 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -0
- data/lib/solargraph/rbs_map.rb +93 -0
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +269 -226
- data/lib/solargraph/source/chain/array.rb +33 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +303 -204
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +89 -75
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +33 -28
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/if.rb +28 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +98 -71
- data/lib/solargraph/source/chain/literal.rb +28 -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 +252 -164
- data/lib/solargraph/source/change.rb +82 -79
- data/lib/solargraph/source/cursor.rb +167 -164
- data/lib/solargraph/source/source_chainer.rb +194 -191
- data/lib/solargraph/source/updater.rb +55 -54
- data/lib/solargraph/source.rb +495 -522
- data/lib/solargraph/source_map/clip.rb +232 -224
- data/lib/solargraph/source_map/completion.rb +23 -23
- data/lib/solargraph/source_map/data.rb +30 -0
- data/lib/solargraph/source_map/mapper.rb +255 -212
- data/lib/solargraph/source_map.rb +217 -180
- data/lib/solargraph/type_checker/checks.rb +120 -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 +62 -57
- data/lib/solargraph/type_checker.rb +672 -543
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/environment.erb +56 -58
- data/lib/solargraph/workspace/config.rb +239 -231
- data/lib/solargraph/workspace.rb +239 -215
- data/lib/solargraph/yard_map/cache.rb +25 -19
- data/lib/solargraph/yard_map/helpers.rb +16 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +26 -25
- data/lib/solargraph/yard_map/mapper/to_method.rb +94 -78
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +28 -27
- data/lib/solargraph/yard_map/mapper.rb +78 -77
- data/lib/solargraph/yard_map/to_method.rb +86 -79
- data/lib/solargraph/yard_map.rb +18 -460
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +72 -69
- data/solargraph.gemspec +21 -10
- metadata +184 -115
- data/.travis.yml +0 -19
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/compat.rb +0 -37
- data/lib/solargraph/convention/rspec.rb +0 -30
- data/lib/solargraph/documentor.rb +0 -76
- data/lib/solargraph/language_server/host/cataloger.rb +0 -56
- data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +0 -63
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
- data/lib/solargraph/parser/legacy.rb +0 -12
- data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -144
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -22
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -57
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +0 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
- data/lib/solargraph/parser/rubyvm.rb +0 -40
- data/lib/solargraph/yard_map/core_docs.rb +0 -170
- data/lib/solargraph/yard_map/core_fills.rb +0 -208
- data/lib/solargraph/yard_map/core_gen.rb +0 -76
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +0 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +0 -43
- data/lib/yard-solargraph.rb +0 -33
- data/yardoc/2.2.2.tar.gz +0 -0
@@ -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::
|
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
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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::Closure, 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
|
+
protected
|
50
|
+
|
51
|
+
attr_writer :context
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# @return [ComplexType]
|
56
|
+
def find_context
|
57
|
+
here = closure
|
58
|
+
until here.nil?
|
59
|
+
if here.is_a?(Pin::Namespace)
|
60
|
+
return here.return_type
|
61
|
+
elsif here.is_a?(Pin::Method)
|
62
|
+
return here.context
|
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
|
@@ -1,96 +1,123 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'cgi'
|
4
|
-
|
5
|
-
module Solargraph
|
6
|
-
module Pin
|
7
|
-
# @todo Move this stuff. It should be the responsibility of the language server.
|
8
|
-
|
9
|
-
|
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
|
-
end
|
36
|
-
|
37
|
-
# @return [Hash]
|
38
|
-
def
|
39
|
-
@
|
40
|
-
label: name
|
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
|
-
end
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
# @
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cgi'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
module Pin
|
7
|
+
# @todo Move this stuff. It should be the responsibility of the language server.
|
8
|
+
# @todo abstract methods below should be verified to be overridden
|
9
|
+
# by type checker when mixin included by non-abstract class
|
10
|
+
module Conversions
|
11
|
+
# @!parse
|
12
|
+
# include Documenting
|
13
|
+
# include Common
|
14
|
+
|
15
|
+
# @return [Integer]
|
16
|
+
# @abstract
|
17
|
+
def completion_item_kind
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
20
|
+
|
21
|
+
# @abstract
|
22
|
+
# @return [Boolean]
|
23
|
+
def deprecated?
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
# @abstract
|
28
|
+
def probed?
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
|
32
|
+
# @abstract
|
33
|
+
def proxied?
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Hash]
|
38
|
+
def completion_item
|
39
|
+
@completion_item ||= {
|
40
|
+
label: name,
|
41
|
+
kind: completion_item_kind,
|
42
|
+
detail: detail,
|
43
|
+
data: {
|
44
|
+
path: path,
|
45
|
+
return_type: return_type.tag,
|
46
|
+
location: (location ? location.to_hash : nil),
|
47
|
+
deprecated: deprecated?
|
48
|
+
}
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Hash]
|
53
|
+
def resolve_completion_item
|
54
|
+
@resolve_completion_item ||= begin
|
55
|
+
extra = {}
|
56
|
+
alldoc = ''
|
57
|
+
# alldoc += link_documentation unless link_documentation.nil?
|
58
|
+
# alldoc += "\n\n" unless alldoc.empty?
|
59
|
+
alldoc += documentation unless documentation.nil?
|
60
|
+
extra[:documentation] = alldoc unless alldoc.empty?
|
61
|
+
completion_item.merge(extra)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [::Array<Hash>]
|
66
|
+
def signature_help
|
67
|
+
[]
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [String, nil]
|
71
|
+
def detail
|
72
|
+
# This property is not cached in an instance variable because it can
|
73
|
+
# change when pins get proxied.
|
74
|
+
detail = String.new
|
75
|
+
detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
|
76
|
+
detail.strip!
|
77
|
+
return nil if detail.empty?
|
78
|
+
detail
|
79
|
+
end
|
80
|
+
|
81
|
+
# Get a markdown-flavored link to a documentation page.
|
82
|
+
#
|
83
|
+
# @return [String]
|
84
|
+
def link_documentation
|
85
|
+
@link_documentation ||= generate_link
|
86
|
+
end
|
87
|
+
|
88
|
+
# @return [String, nil]
|
89
|
+
def text_documentation
|
90
|
+
this_path = path || name || return_type.tag
|
91
|
+
return nil if this_path == 'undefined'
|
92
|
+
escape_brackets this_path
|
93
|
+
end
|
94
|
+
|
95
|
+
# @return [void]
|
96
|
+
def reset_conversions
|
97
|
+
@completion_item = nil
|
98
|
+
@resolve_completion_item = nil
|
99
|
+
@signature_help = nil
|
100
|
+
@detail = nil
|
101
|
+
@link_documentation = nil
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
# @return [String, nil]
|
107
|
+
def generate_link
|
108
|
+
this_path = path || name || return_type.tag
|
109
|
+
return nil if this_path == 'undefined'
|
110
|
+
return nil if this_path.nil? || this_path == 'undefined'
|
111
|
+
return this_path if path.nil?
|
112
|
+
"[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param text [String]
|
116
|
+
# @return [String]
|
117
|
+
def escape_brackets text
|
118
|
+
# text.gsub(/(\<|\>)/, "\\#{$1}")
|
119
|
+
text.gsub("<", '\<').gsub(">", '\>')
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
# A DelegatedMethod is a more complicated version of a MethodAlias that
|
6
|
+
# allows aliasing a method from a different closure (class/module etc).
|
7
|
+
class DelegatedMethod < Pin::Method
|
8
|
+
# A DelegatedMethod can be constructed with either a :resolved_method
|
9
|
+
# pin, or a :receiver_chain. When a :receiver_chain is supplied, it
|
10
|
+
# will be used to *dynamically* resolve a receiver type within the
|
11
|
+
# given closure/scope, and the delegated method will then be resolved
|
12
|
+
# to a method pin on that type.
|
13
|
+
#
|
14
|
+
# @param method [Method, nil] an already resolved method pin.
|
15
|
+
# @param receiver [Source::Chain, nil] the source code used to resolve the receiver for this delegated method.
|
16
|
+
# @param name [String]
|
17
|
+
# @param receiver_method_name [String] the method name that will be called on the receiver (defaults to :name).
|
18
|
+
def initialize(method: nil, receiver: nil, name: method&.name, receiver_method_name: name, **splat)
|
19
|
+
raise ArgumentError, 'either :method or :receiver is required' if (method && receiver) || (!method && !receiver)
|
20
|
+
super(name: name, **splat)
|
21
|
+
|
22
|
+
@receiver_chain = receiver
|
23
|
+
@resolved_method = method
|
24
|
+
@receiver_method_name = receiver_method_name
|
25
|
+
end
|
26
|
+
|
27
|
+
%i[comments parameters return_type location].each do |method|
|
28
|
+
define_method(method) do
|
29
|
+
@resolved_method ? @resolved_method.send(method) : super()
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
%i[typify realize infer probe].each do |method|
|
34
|
+
# @param api_map [ApiMap]
|
35
|
+
define_method(method) do |api_map|
|
36
|
+
resolve_method(api_map)
|
37
|
+
@resolved_method ? @resolved_method.send(method, api_map) : super(api_map)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param api_map [ApiMap]
|
42
|
+
def resolvable?(api_map)
|
43
|
+
resolve_method(api_map)
|
44
|
+
!!@resolved_method
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Resolves the receiver chain and method name to a method pin, resetting any previously resolution.
|
50
|
+
#
|
51
|
+
# @param api_map [ApiMap]
|
52
|
+
# @return [Pin::Method, nil]
|
53
|
+
def resolve_method api_map
|
54
|
+
return if @resolved_method
|
55
|
+
|
56
|
+
resolver = @receiver_chain.define(api_map, self, []).first
|
57
|
+
|
58
|
+
unless resolver
|
59
|
+
Solargraph.logger.warn \
|
60
|
+
"Delegated receiver for #{path} was resolved to nil from `#{print_chain(@receiver_chain)}'"
|
61
|
+
return
|
62
|
+
end
|
63
|
+
|
64
|
+
receiver_type = resolver.return_type
|
65
|
+
|
66
|
+
return if receiver_type.undefined?
|
67
|
+
|
68
|
+
receiver_path, method_scope =
|
69
|
+
if @receiver_chain.constant?
|
70
|
+
# HACK: the `return_type` of a constant is Class<Whatever>, but looking up a method expects
|
71
|
+
# the arguments `"Whatever"` and `scope: :class`.
|
72
|
+
[receiver_type.to_s.sub(/^Class<(.+)>$/, '\1'), :class]
|
73
|
+
else
|
74
|
+
[receiver_type.to_s, :instance]
|
75
|
+
end
|
76
|
+
|
77
|
+
method_stack = api_map.get_method_stack(receiver_path, @receiver_method_name, scope: method_scope)
|
78
|
+
@resolved_method = method_stack.first
|
79
|
+
end
|
80
|
+
|
81
|
+
# helper to print a source chain as code, probably not 100% correct.
|
82
|
+
#
|
83
|
+
# @param chain [Source::Chain]
|
84
|
+
# @return [String]
|
85
|
+
def print_chain(chain)
|
86
|
+
out = +''
|
87
|
+
chain.links.each_with_index do |link, index|
|
88
|
+
if index > 0
|
89
|
+
if Source::Chain::Constant
|
90
|
+
out << '::' unless link.word.start_with?('::')
|
91
|
+
else
|
92
|
+
out << '.'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
out << link.word
|
96
|
+
end
|
97
|
+
out
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|