solargraph 0.58.0 → 0.59.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/.envrc +3 -0
- data/.gitattributes +2 -0
- data/.github/workflows/linting.yml +6 -5
- data/.github/workflows/plugins.yml +48 -35
- data/.github/workflows/rspec.yml +15 -28
- data/.github/workflows/typecheck.yml +3 -2
- data/.gitignore +1 -0
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +53 -966
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/README.md +3 -3
- data/Rakefile +26 -23
- data/bin/solargraph +9 -8
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +288 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +110 -97
- data/lib/solargraph/api_map/store.rb +395 -384
- data/lib/solargraph/api_map.rb +1029 -945
- data/lib/solargraph/bench.rb +44 -45
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +240 -228
- data/lib/solargraph/complex_type/unique_type.rb +641 -482
- data/lib/solargraph/complex_type.rb +557 -444
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +19 -17
- data/lib/solargraph/converters/dl.rb +17 -15
- data/lib/solargraph/converters/dt.rb +17 -15
- data/lib/solargraph/converters/misc.rb +3 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/diagnostics/update_errors.rb +37 -41
- data/lib/solargraph/doc_map.rb +438 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- 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 +130 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +886 -878
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +108 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +197 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +49 -40
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +36 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +33 -25
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +33 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +29 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +702 -683
- data/lib/solargraph/location.rb +85 -82
- data/lib/solargraph/logging.rb +55 -37
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +84 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +471 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +165 -149
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +507 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +45 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +42 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +51 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +302 -291
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/parser_gem.rb +14 -12
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +19 -17
- data/lib/solargraph/parser.rb +25 -23
- data/lib/solargraph/pin/base.rb +773 -729
- data/lib/solargraph/pin/base_variable.rb +375 -126
- data/lib/solargraph/pin/block.rb +127 -104
- data/lib/solargraph/pin/breakable.rb +15 -9
- data/lib/solargraph/pin/callable.rb +275 -231
- data/lib/solargraph/pin/closure.rb +69 -72
- data/lib/solargraph/pin/common.rb +97 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +43 -45
- data/lib/solargraph/pin/conversions.rb +129 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +116 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +724 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +122 -115
- data/lib/solargraph/pin/parameter.rb +339 -275
- data/lib/solargraph/pin/proxy_type.rb +42 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +59 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +64 -61
- data/lib/solargraph/pin/symbol.rb +54 -53
- data/lib/solargraph/pin/until.rb +16 -18
- data/lib/solargraph/pin/while.rb +16 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +248 -245
- data/lib/solargraph/position.rb +139 -119
- data/lib/solargraph/range.rb +113 -112
- data/lib/solargraph/rbs_map/conversions.rb +952 -823
- data/lib/solargraph/rbs_map/core_fills.rb +91 -84
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +71 -43
- data/lib/solargraph/rbs_map.rb +207 -163
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +555 -352
- data/lib/solargraph/source/chain/array.rb +39 -37
- data/lib/solargraph/source/chain/call.rb +377 -337
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +30 -26
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +37 -34
- data/lib/solargraph/source/chain/if.rb +30 -28
- data/lib/solargraph/source/chain/instance_variable.rb +36 -13
- data/lib/solargraph/source/chain/link.rb +99 -109
- data/lib/solargraph/source/chain/literal.rb +51 -48
- data/lib/solargraph/source/chain/or.rb +29 -23
- data/lib/solargraph/source/chain/q_call.rb +13 -11
- data/lib/solargraph/source/chain/variable.rb +15 -13
- data/lib/solargraph/source/chain/z_super.rb +28 -30
- data/lib/solargraph/source/chain.rb +304 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/encoding_fixes.rb +22 -23
- data/lib/solargraph/source/source_chainer.rb +218 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +522 -498
- data/lib/solargraph/source_map/clip.rb +245 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +286 -259
- data/lib/solargraph/source_map.rb +224 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +888 -814
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/workspace/config.rb +258 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +242 -220
- data/lib/solargraph/yard_map/helpers.rb +49 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +136 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +90 -87
- data/lib/solargraph.rb +128 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +37 -35
- metadata +52 -51
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,39 +1,42 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class ProxyType < Base
|
|
6
|
-
# @param return_type [ComplexType]
|
|
7
|
-
# @param gates [Array<String>, nil] Namespaces to try while resolving non-rooted types
|
|
8
|
-
# @param binder [ComplexType, ComplexType::UniqueType, nil]
|
|
9
|
-
# @param gates [Array<String>, nil]
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@
|
|
14
|
-
@
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# @param
|
|
23
|
-
# @param
|
|
24
|
-
# @
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class ProxyType < Base
|
|
6
|
+
# @param return_type [ComplexType, ComplexType::UniqueType]
|
|
7
|
+
# @param gates [Array<String>, nil] Namespaces to try while resolving non-rooted types
|
|
8
|
+
# @param binder [ComplexType, ComplexType::UniqueType, nil]
|
|
9
|
+
# @param gates [Array<String>, nil]
|
|
10
|
+
# @param [Hash{Symbol => Object}] splat
|
|
11
|
+
def initialize return_type: ComplexType::UNDEFINED, binder: nil, gates: nil, **splat
|
|
12
|
+
super(**splat)
|
|
13
|
+
@gates = gates
|
|
14
|
+
@return_type = return_type
|
|
15
|
+
@binder = binder if binder
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def context
|
|
19
|
+
@return_type
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @param context [ComplexType, ComplexType::UniqueType] Used as context for this pin
|
|
23
|
+
# @param closure [Pin::Namespace, nil] Used as the closure for this pin
|
|
24
|
+
# @param binder [ComplexType, ComplexType::UniqueType, nil]
|
|
25
|
+
# @return [ProxyType]
|
|
26
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
27
|
+
def self.anonymous context, closure: nil, binder: nil, **kwargs
|
|
28
|
+
unless closure
|
|
29
|
+
parts = context.namespace.split('::')
|
|
30
|
+
# @sg-ignore Need to add nil check here
|
|
31
|
+
namespace = parts[0..-2].join('::').to_s
|
|
32
|
+
closure = Solargraph::Pin::Namespace.new(name: namespace, source: :proxy_type)
|
|
33
|
+
end
|
|
34
|
+
# name = parts.last.to_s
|
|
35
|
+
# ProxyType.new(nil, namespace, name, return_type)
|
|
36
|
+
ProxyType.new(
|
|
37
|
+
closure: closure, return_type: context, binder: binder || context, **kwargs
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Reference
|
|
6
|
-
class Override < Reference
|
|
7
|
-
# @return [::Array<YARD::Tags::Tag>]
|
|
8
|
-
attr_reader :tags
|
|
9
|
-
|
|
10
|
-
# @return [::Array
|
|
11
|
-
attr_reader :delete
|
|
12
|
-
|
|
13
|
-
def closure
|
|
14
|
-
nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# @param location [Location, nil]
|
|
18
|
-
# @param name [String]
|
|
19
|
-
# @param tags [::Array<YARD::Tags::Tag>]
|
|
20
|
-
# @param delete [::Array<Symbol>]
|
|
21
|
-
# @param splat [Hash]
|
|
22
|
-
def initialize location, name, tags, delete = [], **splat
|
|
23
|
-
super(location: location, name: name, **splat)
|
|
24
|
-
@tags = tags
|
|
25
|
-
@delete = delete
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# @param name [String]
|
|
29
|
-
# @param tags [::Array<String>]
|
|
30
|
-
# @param delete [::Array<Symbol>]
|
|
31
|
-
# @param splat [Hash]
|
|
32
|
-
# @return [Solargraph::Pin::Reference::Override]
|
|
33
|
-
def self.method_return name, *tags, delete: [], **splat
|
|
34
|
-
new(nil, name, [YARD::Tags::Tag.new('return', '', tags)], delete, **splat)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @param name [String]
|
|
38
|
-
# @param comment [String]
|
|
39
|
-
# @param splat [Hash]
|
|
40
|
-
# @return [Solargraph::Pin::Reference::Override]
|
|
41
|
-
def self.from_comment name, comment, **splat
|
|
42
|
-
new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags, **splat)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Reference
|
|
6
|
+
class Override < Reference
|
|
7
|
+
# @return [::Array<YARD::Tags::Tag>]
|
|
8
|
+
attr_reader :tags
|
|
9
|
+
|
|
10
|
+
# @return [::Array<::Symbol>]
|
|
11
|
+
attr_reader :delete
|
|
12
|
+
|
|
13
|
+
def closure
|
|
14
|
+
nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param location [Location, nil]
|
|
18
|
+
# @param name [String]
|
|
19
|
+
# @param tags [::Array<YARD::Tags::Tag>]
|
|
20
|
+
# @param delete [::Array<Symbol>]
|
|
21
|
+
# @param splat [Hash]
|
|
22
|
+
def initialize location, name, tags, delete = [], **splat
|
|
23
|
+
super(location: location, name: name, **splat)
|
|
24
|
+
@tags = tags
|
|
25
|
+
@delete = delete
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @param name [String]
|
|
29
|
+
# @param tags [::Array<String>]
|
|
30
|
+
# @param delete [::Array<Symbol>]
|
|
31
|
+
# @param splat [Hash]
|
|
32
|
+
# @return [Solargraph::Pin::Reference::Override]
|
|
33
|
+
def self.method_return name, *tags, delete: [], **splat
|
|
34
|
+
new(nil, name, [YARD::Tags::Tag.new('return', '', tags)], delete, **splat)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @param name [String]
|
|
38
|
+
# @param comment [String]
|
|
39
|
+
# @param splat [Hash]
|
|
40
|
+
# @return [Solargraph::Pin::Reference::Override]
|
|
41
|
+
def self.from_comment name, comment, **splat
|
|
42
|
+
new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags, **splat)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Reference
|
|
6
|
-
# A Superclass reference pin.
|
|
7
|
-
#
|
|
8
|
-
class Superclass < Reference
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Reference
|
|
6
|
+
# A Superclass reference pin.
|
|
7
|
+
#
|
|
8
|
+
class Superclass < Reference
|
|
9
|
+
# @sg-ignore Need to add nil check here
|
|
10
|
+
def reference_gates
|
|
11
|
+
# @sg-ignore Need to add nil check here
|
|
12
|
+
@reference_gates ||= closure.gates - [closure.path]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Reference
|
|
6
|
+
class TypeAlias < Reference
|
|
7
|
+
# @param return_type [ComplexType]
|
|
8
|
+
# @param [Hash{Symbol => Object}] splat
|
|
9
|
+
def initialize return_type:, **splat
|
|
10
|
+
super(**splat)
|
|
11
|
+
@return_type = return_type
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,39 +1,59 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Reference < Base
|
|
6
|
-
autoload :Require, 'solargraph/pin/reference/require'
|
|
7
|
-
autoload :Superclass, 'solargraph/pin/reference/superclass'
|
|
8
|
-
autoload :Include, 'solargraph/pin/reference/include'
|
|
9
|
-
autoload :Prepend, 'solargraph/pin/reference/prepend'
|
|
10
|
-
autoload :Extend, 'solargraph/pin/reference/extend'
|
|
11
|
-
autoload :Override, 'solargraph/pin/reference/override'
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# @
|
|
34
|
-
def
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Reference < Base
|
|
6
|
+
autoload :Require, 'solargraph/pin/reference/require'
|
|
7
|
+
autoload :Superclass, 'solargraph/pin/reference/superclass'
|
|
8
|
+
autoload :Include, 'solargraph/pin/reference/include'
|
|
9
|
+
autoload :Prepend, 'solargraph/pin/reference/prepend'
|
|
10
|
+
autoload :Extend, 'solargraph/pin/reference/extend'
|
|
11
|
+
autoload :Override, 'solargraph/pin/reference/override'
|
|
12
|
+
autoload :TypeAlias, 'solargraph/pin/reference/type_alias'
|
|
13
|
+
|
|
14
|
+
attr_reader :generic_values
|
|
15
|
+
|
|
16
|
+
# A Reference is a pin that associates a type with another type.
|
|
17
|
+
# The existing type is marked as the closure. The name of the
|
|
18
|
+
# type we're associating with it is the 'name' field, and
|
|
19
|
+
# subtypes are in the 'generic_values' field.
|
|
20
|
+
#
|
|
21
|
+
# These pins are a little different - the name is a rooted name,
|
|
22
|
+
# which may be relative or absolute, preceded with ::, not a
|
|
23
|
+
# fully qualified namespace, which is implicitly in the root
|
|
24
|
+
# namespace and is never preceded by ::.
|
|
25
|
+
#
|
|
26
|
+
# @todo can the above be represented in a less subtle way?
|
|
27
|
+
# @todo consider refactoring so that we can replicate more
|
|
28
|
+
# complex types like Hash{String => Integer} and has both key
|
|
29
|
+
# types and subtypes.
|
|
30
|
+
#
|
|
31
|
+
# @param name [String] rooted name of the referenced type
|
|
32
|
+
# @param generic_values [Array<String>]
|
|
33
|
+
# @param [Hash{Symbol => Object}] splat
|
|
34
|
+
def initialize generic_values: [], **splat
|
|
35
|
+
super(**splat)
|
|
36
|
+
@generic_values = generic_values
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [ComplexType]
|
|
40
|
+
def type
|
|
41
|
+
@type ||= ComplexType.try_parse(
|
|
42
|
+
name +
|
|
43
|
+
if generic_values&.length&.> 0
|
|
44
|
+
"<#{generic_values.join(', ')}>"
|
|
45
|
+
else
|
|
46
|
+
''
|
|
47
|
+
end
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @sg-ignore Need to add nil check here
|
|
52
|
+
# @return [Array<String>]
|
|
53
|
+
def reference_gates
|
|
54
|
+
# @sg-ignore Need to add nil check here
|
|
55
|
+
closure.gates
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -1,61 +1,62 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'jaro_winkler'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Pin
|
|
7
|
-
class Search
|
|
8
|
-
class Result
|
|
9
|
-
# @return [Float]
|
|
10
|
-
attr_reader :match
|
|
11
|
-
|
|
12
|
-
# @return [Pin::Base]
|
|
13
|
-
attr_reader :pin
|
|
14
|
-
|
|
15
|
-
# @param match [Float] The match score for the pin
|
|
16
|
-
# @param pin [Pin::Base]
|
|
17
|
-
def initialize match, pin
|
|
18
|
-
@match = match
|
|
19
|
-
@pin = pin
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @param pins [::Array<Pin::Base>]
|
|
24
|
-
# @param query [String]
|
|
25
|
-
def initialize pins, query
|
|
26
|
-
@pins = pins
|
|
27
|
-
@query = query
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# @return [::Array<Pin::Base>]
|
|
31
|
-
def results
|
|
32
|
-
@results ||= do_query
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
# @return [::Array<Pin::Base>]
|
|
38
|
-
def do_query
|
|
39
|
-
return @pins if @query.nil? || @query.empty?
|
|
40
|
-
@pins.map do |pin|
|
|
41
|
-
match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
|
|
42
|
-
Result.new(match, pin) if match > 0.7
|
|
43
|
-
end
|
|
44
|
-
.compact
|
|
45
|
-
# @param a [self]
|
|
46
|
-
# @param b [self]
|
|
47
|
-
# @sg-ignore https://github.com/castwide/solargraph/pull/1050
|
|
48
|
-
.sort { |a, b| b.match <=> a.match }
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# @param str1 [String]
|
|
53
|
-
# @param str2 [String]
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'jaro_winkler'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module Pin
|
|
7
|
+
class Search
|
|
8
|
+
class Result
|
|
9
|
+
# @return [Float]
|
|
10
|
+
attr_reader :match
|
|
11
|
+
|
|
12
|
+
# @return [Pin::Base]
|
|
13
|
+
attr_reader :pin
|
|
14
|
+
|
|
15
|
+
# @param match [Float] The match score for the pin
|
|
16
|
+
# @param pin [Pin::Base]
|
|
17
|
+
def initialize match, pin
|
|
18
|
+
@match = match
|
|
19
|
+
@pin = pin
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @param pins [::Array<Pin::Base>]
|
|
24
|
+
# @param query [String]
|
|
25
|
+
def initialize pins, query
|
|
26
|
+
@pins = pins
|
|
27
|
+
@query = query
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @return [::Array<Pin::Base>]
|
|
31
|
+
def results
|
|
32
|
+
@results ||= do_query
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# @return [::Array<Pin::Base>]
|
|
38
|
+
def do_query
|
|
39
|
+
return @pins if @query.nil? || @query.empty?
|
|
40
|
+
@pins.map do |pin|
|
|
41
|
+
match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
|
|
42
|
+
Result.new(match, pin) if match > 0.7
|
|
43
|
+
end
|
|
44
|
+
.compact
|
|
45
|
+
# @param a [self]
|
|
46
|
+
# @param b [self]
|
|
47
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1050
|
|
48
|
+
.sort { |a, b| b.match <=> a.match }
|
|
49
|
+
.map(&:pin)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @param str1 [String]
|
|
53
|
+
# @param str2 [String]
|
|
54
|
+
#
|
|
55
|
+
# @return [Float]
|
|
56
|
+
def fuzzy_string_match str1, str2
|
|
57
|
+
return 1.0 + (str2.length.to_f / str1.length) if str1.downcase.include?(str2.downcase)
|
|
58
|
+
JaroWinkler.similarity(str1, str2, ignore_case: true)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -1,61 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
36
|
-
qualified = return_type.qualify(api_map, closure.namespace)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return ComplexType::UNDEFINED
|
|
42
|
-
|
|
43
|
-
# @
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
unless sig
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Signature < Callable
|
|
6
|
+
# allow signature to be created before method pin, then set this
|
|
7
|
+
# to the method pin
|
|
8
|
+
attr_writer :closure
|
|
9
|
+
|
|
10
|
+
def generics
|
|
11
|
+
# @type [Array<::String, nil>]
|
|
12
|
+
@generics ||= [].freeze
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def identity
|
|
16
|
+
@identity ||= "signature#{object_id}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @ sg-ignore need boolish support for ? methods
|
|
20
|
+
def dodgy_return_type_source?
|
|
21
|
+
super || closure&.dodgy_return_type_source?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def type_location
|
|
25
|
+
super || closure&.type_location
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def location
|
|
29
|
+
super || closure&.location
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def typify api_map
|
|
33
|
+
# @sg-ignore Need to add nil check here
|
|
34
|
+
if return_type.defined?
|
|
35
|
+
# @sg-ignore Need to add nil check here
|
|
36
|
+
qualified = return_type.qualify(api_map, closure.namespace)
|
|
37
|
+
# @sg-ignore Need to add nil check here
|
|
38
|
+
logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
|
|
39
|
+
return qualified
|
|
40
|
+
end
|
|
41
|
+
return ComplexType::UNDEFINED if closure.nil?
|
|
42
|
+
return ComplexType::UNDEFINED unless closure.is_a?(Pin::Method)
|
|
43
|
+
# @sg-ignore need is_a? support
|
|
44
|
+
# @type [Array<Pin::Method>]
|
|
45
|
+
method_stack = closure.rest_of_stack api_map
|
|
46
|
+
logger.debug { "Signature#typify(self=#{self}) - method_stack: #{method_stack}" }
|
|
47
|
+
method_stack.each do |pin|
|
|
48
|
+
sig = pin.signatures.find { |s| s.arity == arity }
|
|
49
|
+
next unless sig
|
|
50
|
+
# @sg-ignore Need to add nil check here
|
|
51
|
+
next if sig.return_type.undefined?
|
|
52
|
+
# @sg-ignore Need to add nil check here
|
|
53
|
+
qualified = sig.return_type.qualify(api_map, closure.namespace)
|
|
54
|
+
# @sg-ignore Need to add nil check here
|
|
55
|
+
logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
|
|
56
|
+
return qualified
|
|
57
|
+
end
|
|
58
|
+
out = super
|
|
59
|
+
logger.debug { "Signature#typify(self=#{self}) => #{out}" }
|
|
60
|
+
out
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|