solargraph 0.44.2 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rspec.yml +41 -0
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.travis.yml +19 -19
- data/CHANGELOG.md +1115 -1088
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +128 -120
- data/Rakefile +0 -0
- data/SPONSORS.md +18 -15
- data/bin/solargraph +0 -0
- data/lib/solargraph/api_map/bundler_methods.rb +22 -22
- data/lib/solargraph/api_map/cache.rb +70 -70
- data/lib/solargraph/api_map/source_to_yard.rb +81 -81
- data/lib/solargraph/api_map/store.rb +256 -256
- data/lib/solargraph/api_map.rb +686 -681
- data/lib/solargraph/bench.rb +27 -27
- data/lib/solargraph/compat.rb +37 -37
- data/lib/solargraph/complex_type/type_methods.rb +130 -130
- data/lib/solargraph/complex_type/unique_type.rb +75 -75
- data/lib/solargraph/complex_type.rb +221 -221
- data/lib/solargraph/convention/base.rb +33 -33
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +22 -22
- data/lib/solargraph/convention/rspec.rb +30 -21
- data/lib/solargraph/convention.rb +47 -47
- data/lib/solargraph/converters/dd.rb +12 -12
- data/lib/solargraph/converters/dl.rb +12 -12
- data/lib/solargraph/converters/dt.rb +12 -12
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/base.rb +29 -29
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
- data/lib/solargraph/diagnostics/severities.rb +15 -15
- data/lib/solargraph/diagnostics/type_check.rb +54 -54
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/documentor.rb +76 -76
- data/lib/solargraph/environ.rb +45 -45
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/cataloger.rb +56 -56
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +111 -111
- data/lib/solargraph/language_server/host/message_worker.rb +59 -59
- data/lib/solargraph/language_server/host/sources.rb +156 -156
- data/lib/solargraph/language_server/host.rb +865 -865
- data/lib/solargraph/language_server/message/base.rb +89 -89
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/client.rb +11 -11
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
- data/lib/solargraph/language_server/message/completion_item.rb +11 -11
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
- data/lib/solargraph/language_server/message/extended/document.rb +20 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/extended.rb +21 -21
- data/lib/solargraph/language_server/message/initialize.rb +162 -162
- data/lib/solargraph/language_server/message/initialized.rb +27 -27
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
- data/lib/solargraph/language_server/message/shutdown.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/workspace.rb +14 -14
- data/lib/solargraph/language_server/message.rb +93 -93
- data/lib/solargraph/language_server/message_types.rb +14 -14
- data/lib/solargraph/language_server/request.rb +24 -24
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
- data/lib/solargraph/language_server/transport/adapter.rb +53 -53
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
- data/lib/solargraph/language_server/transport.rb +13 -13
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/language_server.rb +19 -19
- data/lib/solargraph/library.rb +546 -546
- data/lib/solargraph/location.rb +37 -37
- data/lib/solargraph/logging.rb +27 -27
- data/lib/solargraph/page.rb +83 -83
- data/lib/solargraph/parser/comment_ripper.rb +52 -52
- data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
- data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
- data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
- data/lib/solargraph/parser/legacy.rb +12 -12
- data/lib/solargraph/parser/node_methods.rb +43 -43
- data/lib/solargraph/parser/node_processor/base.rb +77 -77
- data/lib/solargraph/parser/node_processor.rb +43 -43
- data/lib/solargraph/parser/region.rb +66 -66
- data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
- data/lib/solargraph/parser/rubyvm.rb +40 -40
- data/lib/solargraph/parser/snippet.rb +13 -13
- data/lib/solargraph/parser.rb +26 -26
- data/lib/solargraph/pin/base.rb +296 -296
- data/lib/solargraph/pin/base_variable.rb +84 -84
- data/lib/solargraph/pin/block.rb +72 -72
- data/lib/solargraph/pin/class_variable.rb +8 -8
- data/lib/solargraph/pin/closure.rb +37 -37
- data/lib/solargraph/pin/common.rb +70 -70
- data/lib/solargraph/pin/constant.rb +43 -43
- data/lib/solargraph/pin/conversions.rb +96 -96
- data/lib/solargraph/pin/documenting.rb +105 -105
- data/lib/solargraph/pin/duck_method.rb +16 -16
- data/lib/solargraph/pin/global_variable.rb +8 -8
- data/lib/solargraph/pin/instance_variable.rb +30 -30
- data/lib/solargraph/pin/keyword.rb +15 -15
- data/lib/solargraph/pin/keyword_param.rb +8 -8
- data/lib/solargraph/pin/local_variable.rb +55 -55
- data/lib/solargraph/pin/method.rb +245 -245
- data/lib/solargraph/pin/method_alias.rb +31 -31
- data/lib/solargraph/pin/namespace.rb +91 -91
- data/lib/solargraph/pin/parameter.rb +201 -206
- data/lib/solargraph/pin/proxy_type.rb +29 -29
- data/lib/solargraph/pin/reference/extend.rb +10 -10
- data/lib/solargraph/pin/reference/include.rb +10 -10
- data/lib/solargraph/pin/reference/override.rb +29 -29
- data/lib/solargraph/pin/reference/prepend.rb +10 -10
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +10 -10
- data/lib/solargraph/pin/reference.rb +14 -14
- data/lib/solargraph/pin/search.rb +56 -0
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +37 -36
- data/lib/solargraph/position.rb +100 -100
- data/lib/solargraph/range.rb +95 -95
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +226 -226
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +204 -204
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +75 -75
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +28 -28
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +71 -71
- data/lib/solargraph/source/chain/literal.rb +23 -23
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +164 -164
- data/lib/solargraph/source/change.rb +79 -79
- data/lib/solargraph/source/cursor.rb +164 -164
- data/lib/solargraph/source/source_chainer.rb +191 -191
- data/lib/solargraph/source/updater.rb +54 -54
- data/lib/solargraph/source.rb +522 -522
- data/lib/solargraph/source_map/clip.rb +224 -224
- data/lib/solargraph/source_map/completion.rb +23 -23
- data/lib/solargraph/source_map/mapper.rb +212 -212
- data/lib/solargraph/source_map.rb +180 -189
- data/lib/solargraph/type_checker/checks.rb +99 -99
- data/lib/solargraph/type_checker/param_def.rb +35 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +57 -57
- data/lib/solargraph/type_checker.rb +543 -510
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/environment.erb +58 -58
- data/lib/solargraph/workspace/config.rb +231 -231
- data/lib/solargraph/workspace.rb +215 -214
- data/lib/solargraph/yard_map/cache.rb +19 -19
- data/lib/solargraph/yard_map/core_docs.rb +170 -170
- data/lib/solargraph/yard_map/core_fills.rb +208 -203
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/solargraph/yard_map/helpers.rb +16 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
- data/lib/solargraph/yard_map/mapper.rb +77 -77
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
- data/lib/solargraph/yard_map/to_method.rb +79 -79
- data/lib/solargraph/yard_map.rb +460 -443
- data/lib/solargraph.rb +69 -69
- data/lib/yard-solargraph.rb +33 -33
- data/solargraph.gemspec +0 -0
- metadata +14 -12
data/lib/solargraph/bench.rb
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'set'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
# A container of source maps and workspace data to be cataloged in an ApiMap.
|
|
7
|
-
#
|
|
8
|
-
class Bench
|
|
9
|
-
# @return [Set<SourceMap>]
|
|
10
|
-
attr_reader :source_maps
|
|
11
|
-
|
|
12
|
-
# @return [Workspace]
|
|
13
|
-
attr_reader :workspace
|
|
14
|
-
|
|
15
|
-
# @return [Set<String>]
|
|
16
|
-
attr_reader :external_requires
|
|
17
|
-
|
|
18
|
-
# @param source_maps [Array<SourceMap>, Set<SourceMap>]
|
|
19
|
-
# @param workspace [Workspace]
|
|
20
|
-
# @param external_requires [Array<String>, Set<String>]
|
|
21
|
-
def initialize source_maps: [], workspace: Workspace.new, external_requires: []
|
|
22
|
-
@source_maps = source_maps.to_set
|
|
23
|
-
@workspace = workspace
|
|
24
|
-
@external_requires = external_requires.to_set
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
# A container of source maps and workspace data to be cataloged in an ApiMap.
|
|
7
|
+
#
|
|
8
|
+
class Bench
|
|
9
|
+
# @return [Set<SourceMap>]
|
|
10
|
+
attr_reader :source_maps
|
|
11
|
+
|
|
12
|
+
# @return [Workspace]
|
|
13
|
+
attr_reader :workspace
|
|
14
|
+
|
|
15
|
+
# @return [Set<String>]
|
|
16
|
+
attr_reader :external_requires
|
|
17
|
+
|
|
18
|
+
# @param source_maps [Array<SourceMap>, Set<SourceMap>]
|
|
19
|
+
# @param workspace [Workspace]
|
|
20
|
+
# @param external_requires [Array<String>, Set<String>]
|
|
21
|
+
def initialize source_maps: [], workspace: Workspace.new, external_requires: []
|
|
22
|
+
@source_maps = source_maps.to_set
|
|
23
|
+
@workspace = workspace
|
|
24
|
+
@external_requires = external_requires.to_set
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/solargraph/compat.rb
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
unless Hash.method_defined?(:transform_keys)
|
|
2
|
-
class Hash
|
|
3
|
-
def transform_keys &block
|
|
4
|
-
result = {}
|
|
5
|
-
each_pair do |k, v|
|
|
6
|
-
result[block.call(k)] = v
|
|
7
|
-
end
|
|
8
|
-
result
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
unless Hash.method_defined?(:transform_values)
|
|
14
|
-
class Hash
|
|
15
|
-
def transform_values &block
|
|
16
|
-
result = {}
|
|
17
|
-
each_pair do |k, v|
|
|
18
|
-
result[k] = block.call(v)
|
|
19
|
-
end
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
unless Array.method_defined?(:sum)
|
|
26
|
-
class Array
|
|
27
|
-
def sum &block
|
|
28
|
-
inject(0) do |s, x|
|
|
29
|
-
if block
|
|
30
|
-
s + block.call(x)
|
|
31
|
-
else
|
|
32
|
-
s + x
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
1
|
+
unless Hash.method_defined?(:transform_keys)
|
|
2
|
+
class Hash
|
|
3
|
+
def transform_keys &block
|
|
4
|
+
result = {}
|
|
5
|
+
each_pair do |k, v|
|
|
6
|
+
result[block.call(k)] = v
|
|
7
|
+
end
|
|
8
|
+
result
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
unless Hash.method_defined?(:transform_values)
|
|
14
|
+
class Hash
|
|
15
|
+
def transform_values &block
|
|
16
|
+
result = {}
|
|
17
|
+
each_pair do |k, v|
|
|
18
|
+
result[k] = block.call(v)
|
|
19
|
+
end
|
|
20
|
+
result
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
unless Array.method_defined?(:sum)
|
|
26
|
+
class Array
|
|
27
|
+
def sum &block
|
|
28
|
+
inject(0) do |s, x|
|
|
29
|
+
if block
|
|
30
|
+
s + block.call(x)
|
|
31
|
+
else
|
|
32
|
+
s + x
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class ComplexType
|
|
5
|
-
# Methods for accessing type data.
|
|
6
|
-
#
|
|
7
|
-
module TypeMethods
|
|
8
|
-
# @return [String]
|
|
9
|
-
attr_reader :name
|
|
10
|
-
|
|
11
|
-
# @return [String]
|
|
12
|
-
attr_reader :substring
|
|
13
|
-
|
|
14
|
-
# @return [String]
|
|
15
|
-
attr_reader :tag
|
|
16
|
-
|
|
17
|
-
# @return [Array<ComplexType>]
|
|
18
|
-
attr_reader :subtypes
|
|
19
|
-
|
|
20
|
-
# @return [Boolean]
|
|
21
|
-
def duck_type?
|
|
22
|
-
@duck_type ||= name.start_with?('#')
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @return [Boolean]
|
|
26
|
-
def nil_type?
|
|
27
|
-
@nil_type = (name.casecmp('nil') == 0) if @nil_type.nil?
|
|
28
|
-
@nil_type
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @return [Boolean]
|
|
32
|
-
def parameters?
|
|
33
|
-
!substring.empty?
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def void?
|
|
37
|
-
name == 'void'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def defined?
|
|
41
|
-
!undefined?
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def undefined?
|
|
45
|
-
name == 'undefined'
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# @return [Boolean]
|
|
49
|
-
def list_parameters?
|
|
50
|
-
substring.start_with?('<')
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# @return [Boolean]
|
|
54
|
-
def fixed_parameters?
|
|
55
|
-
substring.start_with?('(')
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# @return [Boolean]
|
|
59
|
-
def hash_parameters?
|
|
60
|
-
substring.start_with?('{')
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# @return [Array<ComplexType>]
|
|
64
|
-
def value_types
|
|
65
|
-
@subtypes
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @return [Array<ComplexType>]
|
|
69
|
-
def key_types
|
|
70
|
-
@key_types
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# @return [String]
|
|
74
|
-
def namespace
|
|
75
|
-
# if priority higher than ||=, old implements cause unnecessary check
|
|
76
|
-
@namespace ||= lambda do
|
|
77
|
-
return 'Object' if duck_type?
|
|
78
|
-
return 'NilClass' if nil_type?
|
|
79
|
-
return (name == 'Class' || name == 'Module') && !subtypes.empty? ? subtypes.first.name : name
|
|
80
|
-
end.call
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# @return [Symbol] :class or :instance
|
|
84
|
-
def scope
|
|
85
|
-
@scope ||= :instance if duck_type? || nil_type?
|
|
86
|
-
@scope ||= (name == 'Class' || name == 'Module') && !subtypes.empty? ? :class : :instance
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def == other
|
|
90
|
-
return false unless self.class == other.class
|
|
91
|
-
tag == other.tag
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def rooted?
|
|
95
|
-
@rooted
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Generate a ComplexType that fully qualifies this type's namespaces.
|
|
99
|
-
#
|
|
100
|
-
# @param api_map [ApiMap] The ApiMap that performs qualification
|
|
101
|
-
# @param context [String] The namespace from which to resolve names
|
|
102
|
-
# @return [ComplexType] The generated ComplexType
|
|
103
|
-
def qualify api_map, context = ''
|
|
104
|
-
return ComplexType.new([self]) if duck_type? || void? || undefined?
|
|
105
|
-
recon = (rooted? ? '' : context)
|
|
106
|
-
fqns = api_map.qualify(name, recon)
|
|
107
|
-
if fqns.nil?
|
|
108
|
-
return UniqueType::BOOLEAN if tag == 'Boolean'
|
|
109
|
-
return UniqueType::UNDEFINED
|
|
110
|
-
end
|
|
111
|
-
fqns = "::#{fqns}" # Ensure the resulting complex type is rooted
|
|
112
|
-
ltypes = key_types.map do |t|
|
|
113
|
-
t.qualify api_map, context
|
|
114
|
-
end
|
|
115
|
-
rtypes = value_types.map do |t|
|
|
116
|
-
t.qualify api_map, context
|
|
117
|
-
end
|
|
118
|
-
if list_parameters?
|
|
119
|
-
Solargraph::ComplexType.parse("#{fqns}<#{rtypes.map(&:tag).join(', ')}>")
|
|
120
|
-
elsif fixed_parameters?
|
|
121
|
-
Solargraph::ComplexType.parse("#{fqns}(#{rtypes.map(&:tag).join(', ')})")
|
|
122
|
-
elsif hash_parameters?
|
|
123
|
-
Solargraph::ComplexType.parse("#{fqns}{#{ltypes.map(&:tag).join(', ')} => #{rtypes.map(&:tag).join(', ')}}")
|
|
124
|
-
else
|
|
125
|
-
Solargraph::ComplexType.parse(fqns)
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class ComplexType
|
|
5
|
+
# Methods for accessing type data.
|
|
6
|
+
#
|
|
7
|
+
module TypeMethods
|
|
8
|
+
# @return [String]
|
|
9
|
+
attr_reader :name
|
|
10
|
+
|
|
11
|
+
# @return [String]
|
|
12
|
+
attr_reader :substring
|
|
13
|
+
|
|
14
|
+
# @return [String]
|
|
15
|
+
attr_reader :tag
|
|
16
|
+
|
|
17
|
+
# @return [Array<ComplexType>]
|
|
18
|
+
attr_reader :subtypes
|
|
19
|
+
|
|
20
|
+
# @return [Boolean]
|
|
21
|
+
def duck_type?
|
|
22
|
+
@duck_type ||= name.start_with?('#')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [Boolean]
|
|
26
|
+
def nil_type?
|
|
27
|
+
@nil_type = (name.casecmp('nil') == 0) if @nil_type.nil?
|
|
28
|
+
@nil_type
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @return [Boolean]
|
|
32
|
+
def parameters?
|
|
33
|
+
!substring.empty?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def void?
|
|
37
|
+
name == 'void'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def defined?
|
|
41
|
+
!undefined?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def undefined?
|
|
45
|
+
name == 'undefined'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @return [Boolean]
|
|
49
|
+
def list_parameters?
|
|
50
|
+
substring.start_with?('<')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @return [Boolean]
|
|
54
|
+
def fixed_parameters?
|
|
55
|
+
substring.start_with?('(')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @return [Boolean]
|
|
59
|
+
def hash_parameters?
|
|
60
|
+
substring.start_with?('{')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @return [Array<ComplexType>]
|
|
64
|
+
def value_types
|
|
65
|
+
@subtypes
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @return [Array<ComplexType>]
|
|
69
|
+
def key_types
|
|
70
|
+
@key_types
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @return [String]
|
|
74
|
+
def namespace
|
|
75
|
+
# if priority higher than ||=, old implements cause unnecessary check
|
|
76
|
+
@namespace ||= lambda do
|
|
77
|
+
return 'Object' if duck_type?
|
|
78
|
+
return 'NilClass' if nil_type?
|
|
79
|
+
return (name == 'Class' || name == 'Module') && !subtypes.empty? ? subtypes.first.name : name
|
|
80
|
+
end.call
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @return [Symbol] :class or :instance
|
|
84
|
+
def scope
|
|
85
|
+
@scope ||= :instance if duck_type? || nil_type?
|
|
86
|
+
@scope ||= (name == 'Class' || name == 'Module') && !subtypes.empty? ? :class : :instance
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def == other
|
|
90
|
+
return false unless self.class == other.class
|
|
91
|
+
tag == other.tag
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def rooted?
|
|
95
|
+
@rooted
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Generate a ComplexType that fully qualifies this type's namespaces.
|
|
99
|
+
#
|
|
100
|
+
# @param api_map [ApiMap] The ApiMap that performs qualification
|
|
101
|
+
# @param context [String] The namespace from which to resolve names
|
|
102
|
+
# @return [ComplexType] The generated ComplexType
|
|
103
|
+
def qualify api_map, context = ''
|
|
104
|
+
return ComplexType.new([self]) if duck_type? || void? || undefined?
|
|
105
|
+
recon = (rooted? ? '' : context)
|
|
106
|
+
fqns = api_map.qualify(name, recon)
|
|
107
|
+
if fqns.nil?
|
|
108
|
+
return UniqueType::BOOLEAN if tag == 'Boolean'
|
|
109
|
+
return UniqueType::UNDEFINED
|
|
110
|
+
end
|
|
111
|
+
fqns = "::#{fqns}" # Ensure the resulting complex type is rooted
|
|
112
|
+
ltypes = key_types.map do |t|
|
|
113
|
+
t.qualify api_map, context
|
|
114
|
+
end
|
|
115
|
+
rtypes = value_types.map do |t|
|
|
116
|
+
t.qualify api_map, context
|
|
117
|
+
end
|
|
118
|
+
if list_parameters?
|
|
119
|
+
Solargraph::ComplexType.parse("#{fqns}<#{rtypes.map(&:tag).join(', ')}>")
|
|
120
|
+
elsif fixed_parameters?
|
|
121
|
+
Solargraph::ComplexType.parse("#{fqns}(#{rtypes.map(&:tag).join(', ')})")
|
|
122
|
+
elsif hash_parameters?
|
|
123
|
+
Solargraph::ComplexType.parse("#{fqns}{#{ltypes.map(&:tag).join(', ')} => #{rtypes.map(&:tag).join(', ')}}")
|
|
124
|
+
else
|
|
125
|
+
Solargraph::ComplexType.parse(fqns)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class ComplexType
|
|
5
|
-
# An individual type signature. A complex type can consist of multiple
|
|
6
|
-
# unique types.
|
|
7
|
-
#
|
|
8
|
-
class UniqueType
|
|
9
|
-
include TypeMethods
|
|
10
|
-
|
|
11
|
-
# Create a UniqueType with the specified name and an optional substring.
|
|
12
|
-
# The substring is the parameter section of a parametrized type, e.g.,
|
|
13
|
-
# for the type `Array<String>`, the name is `Array` and the substring is
|
|
14
|
-
# `<String>`.
|
|
15
|
-
#
|
|
16
|
-
# @param name [String] The name of the type
|
|
17
|
-
# @param substring [String] The substring of the type
|
|
18
|
-
def initialize name, substring = ''
|
|
19
|
-
if name.start_with?('::')
|
|
20
|
-
@name = name[2..-1]
|
|
21
|
-
@rooted = true
|
|
22
|
-
else
|
|
23
|
-
@name = name
|
|
24
|
-
@rooted = false
|
|
25
|
-
end
|
|
26
|
-
@substring = substring
|
|
27
|
-
@tag = @name + substring
|
|
28
|
-
@key_types = []
|
|
29
|
-
@subtypes = []
|
|
30
|
-
return unless parameters?
|
|
31
|
-
if @substring.start_with?('<(') && @substring.end_with?(')>')
|
|
32
|
-
subs = ComplexType.parse(substring[2..-3], partial: true)
|
|
33
|
-
else
|
|
34
|
-
subs = ComplexType.parse(substring[1..-2], partial: true)
|
|
35
|
-
end
|
|
36
|
-
if hash_parameters?
|
|
37
|
-
raise ComplexTypeError, "Bad hash type" unless !subs.is_a?(ComplexType) and subs.length == 2 and !subs[0].is_a?(UniqueType) and !subs[1].is_a?(UniqueType)
|
|
38
|
-
@key_types.concat subs[0].map { |u| ComplexType.new([u]) }
|
|
39
|
-
@subtypes.concat subs[1].map { |u| ComplexType.new([u]) }
|
|
40
|
-
else
|
|
41
|
-
@subtypes.concat subs
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def to_s
|
|
46
|
-
tag
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def self_to dst
|
|
50
|
-
return self unless selfy?
|
|
51
|
-
new_name = (@name == 'self' ? dst : @name)
|
|
52
|
-
new_key_types = @key_types.map { |t| t.self_to dst }
|
|
53
|
-
new_subtypes = @subtypes.map { |t| t.self_to dst }
|
|
54
|
-
if hash_parameters?
|
|
55
|
-
UniqueType.new(new_name, "{#{new_key_types.join(', ')} => #{new_subtypes.join(', ')}}")
|
|
56
|
-
elsif parameters?
|
|
57
|
-
if @substring.start_with?'<('
|
|
58
|
-
UniqueType.new(new_name, "<(#{new_subtypes.join(', ')})>")
|
|
59
|
-
else
|
|
60
|
-
UniqueType.new(new_name, "<#{new_subtypes.join(', ')}>")
|
|
61
|
-
end
|
|
62
|
-
else
|
|
63
|
-
UniqueType.new(new_name)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def selfy?
|
|
68
|
-
@name == 'self' || @key_types.any?(&:selfy?) || @subtypes.any?(&:selfy?)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
UNDEFINED = UniqueType.new('undefined')
|
|
72
|
-
BOOLEAN = UniqueType.new('Boolean')
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class ComplexType
|
|
5
|
+
# An individual type signature. A complex type can consist of multiple
|
|
6
|
+
# unique types.
|
|
7
|
+
#
|
|
8
|
+
class UniqueType
|
|
9
|
+
include TypeMethods
|
|
10
|
+
|
|
11
|
+
# Create a UniqueType with the specified name and an optional substring.
|
|
12
|
+
# The substring is the parameter section of a parametrized type, e.g.,
|
|
13
|
+
# for the type `Array<String>`, the name is `Array` and the substring is
|
|
14
|
+
# `<String>`.
|
|
15
|
+
#
|
|
16
|
+
# @param name [String] The name of the type
|
|
17
|
+
# @param substring [String] The substring of the type
|
|
18
|
+
def initialize name, substring = ''
|
|
19
|
+
if name.start_with?('::')
|
|
20
|
+
@name = name[2..-1]
|
|
21
|
+
@rooted = true
|
|
22
|
+
else
|
|
23
|
+
@name = name
|
|
24
|
+
@rooted = false
|
|
25
|
+
end
|
|
26
|
+
@substring = substring
|
|
27
|
+
@tag = @name + substring
|
|
28
|
+
@key_types = []
|
|
29
|
+
@subtypes = []
|
|
30
|
+
return unless parameters?
|
|
31
|
+
if @substring.start_with?('<(') && @substring.end_with?(')>')
|
|
32
|
+
subs = ComplexType.parse(substring[2..-3], partial: true)
|
|
33
|
+
else
|
|
34
|
+
subs = ComplexType.parse(substring[1..-2], partial: true)
|
|
35
|
+
end
|
|
36
|
+
if hash_parameters?
|
|
37
|
+
raise ComplexTypeError, "Bad hash type" unless !subs.is_a?(ComplexType) and subs.length == 2 and !subs[0].is_a?(UniqueType) and !subs[1].is_a?(UniqueType)
|
|
38
|
+
@key_types.concat subs[0].map { |u| ComplexType.new([u]) }
|
|
39
|
+
@subtypes.concat subs[1].map { |u| ComplexType.new([u]) }
|
|
40
|
+
else
|
|
41
|
+
@subtypes.concat subs
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_s
|
|
46
|
+
tag
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self_to dst
|
|
50
|
+
return self unless selfy?
|
|
51
|
+
new_name = (@name == 'self' ? dst : @name)
|
|
52
|
+
new_key_types = @key_types.map { |t| t.self_to dst }
|
|
53
|
+
new_subtypes = @subtypes.map { |t| t.self_to dst }
|
|
54
|
+
if hash_parameters?
|
|
55
|
+
UniqueType.new(new_name, "{#{new_key_types.join(', ')} => #{new_subtypes.join(', ')}}")
|
|
56
|
+
elsif parameters?
|
|
57
|
+
if @substring.start_with?'<('
|
|
58
|
+
UniqueType.new(new_name, "<(#{new_subtypes.join(', ')})>")
|
|
59
|
+
else
|
|
60
|
+
UniqueType.new(new_name, "<#{new_subtypes.join(', ')}>")
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
UniqueType.new(new_name)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def selfy?
|
|
68
|
+
@name == 'self' || @key_types.any?(&:selfy?) || @subtypes.any?(&:selfy?)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
UNDEFINED = UniqueType.new('undefined')
|
|
72
|
+
BOOLEAN = UniqueType.new('Boolean')
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|