solargraph 0.58.1 → 0.59.0.dev.1
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/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- 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/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/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/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -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 +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -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 +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -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 +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -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 +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- 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/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -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 +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -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 +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -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 +2 -1
- metadata +22 -17
- 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,34 +1,42 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
# Use this class to track method aliases for later remapping. Common
|
|
6
|
-
# examples that defer mapping are aliases for superclass methods or
|
|
7
|
-
# methods from included modules.
|
|
8
|
-
#
|
|
9
|
-
class MethodAlias < Method
|
|
10
|
-
# @return [::Symbol]
|
|
11
|
-
attr_reader :scope
|
|
12
|
-
|
|
13
|
-
# @return [String]
|
|
14
|
-
attr_reader :original
|
|
15
|
-
|
|
16
|
-
# @param scope [::Symbol]
|
|
17
|
-
# @param original [String, nil] The name of the original method
|
|
18
|
-
# @param splat [Hash] Additional options supported by superclasses
|
|
19
|
-
def initialize scope: :instance, original: nil, **splat
|
|
20
|
-
super(**splat)
|
|
21
|
-
@scope = scope
|
|
22
|
-
@original = original
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def visibility
|
|
26
|
-
:public
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
# Use this class to track method aliases for later remapping. Common
|
|
6
|
+
# examples that defer mapping are aliases for superclass methods or
|
|
7
|
+
# methods from included modules.
|
|
8
|
+
#
|
|
9
|
+
class MethodAlias < Method
|
|
10
|
+
# @return [::Symbol]
|
|
11
|
+
attr_reader :scope
|
|
12
|
+
|
|
13
|
+
# @return [String]
|
|
14
|
+
attr_reader :original
|
|
15
|
+
|
|
16
|
+
# @param scope [::Symbol]
|
|
17
|
+
# @param original [String, nil] The name of the original method
|
|
18
|
+
# @param splat [Hash] Additional options supported by superclasses
|
|
19
|
+
def initialize scope: :instance, original: nil, **splat
|
|
20
|
+
super(**splat)
|
|
21
|
+
@scope = scope
|
|
22
|
+
@original = original
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def visibility
|
|
26
|
+
:public
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def to_rbs
|
|
30
|
+
if scope == :class
|
|
31
|
+
"alias self.#{name} self.#{original}"
|
|
32
|
+
else
|
|
33
|
+
"alias #{name} #{original}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def path
|
|
38
|
+
@path ||= namespace + (scope == :instance ? '#' : '.') + name
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -1,115 +1,121 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'solargraph/yard_tags'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Pin
|
|
7
|
-
class Namespace < Closure
|
|
8
|
-
# @return [::Symbol] :public or :private
|
|
9
|
-
attr_reader :visibility
|
|
10
|
-
|
|
11
|
-
# @return [::Symbol] :class or :module
|
|
12
|
-
attr_reader :type
|
|
13
|
-
|
|
14
|
-
# does not assert like super, as a namespace without a closure
|
|
15
|
-
# may be the root level namespace, or it may not yet be
|
|
16
|
-
# qualified
|
|
17
|
-
attr_reader :closure
|
|
18
|
-
|
|
19
|
-
# @param type [::Symbol] :class or :module
|
|
20
|
-
# @param visibility [::Symbol] :public or :private
|
|
21
|
-
# @param gates [::Array<String>]
|
|
22
|
-
# @param name [String]
|
|
23
|
-
def initialize type: :class, visibility: :public, gates: [''], name: '', **splat
|
|
24
|
-
# super(location, namespace, name, comments)
|
|
25
|
-
super(**splat, name: name)
|
|
26
|
-
@type = type
|
|
27
|
-
@visibility = visibility
|
|
28
|
-
if name.start_with?('::')
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
#
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
closure.full_context.namespace + '::'
|
|
43
|
-
end
|
|
44
|
-
closure_name += parts.join('::')
|
|
45
|
-
@closure = Pin::Namespace.new(name: closure_name, gates: [parts.join('::')], source: :namespace)
|
|
46
|
-
@context = nil
|
|
47
|
-
end
|
|
48
|
-
@name = name
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'solargraph/yard_tags'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module Pin
|
|
7
|
+
class Namespace < Closure
|
|
8
|
+
# @return [::Symbol] :public or :private
|
|
9
|
+
attr_reader :visibility
|
|
10
|
+
|
|
11
|
+
# @return [::Symbol] :class or :module
|
|
12
|
+
attr_reader :type
|
|
13
|
+
|
|
14
|
+
# does not assert like super, as a namespace without a closure
|
|
15
|
+
# may be the root level namespace, or it may not yet be
|
|
16
|
+
# qualified
|
|
17
|
+
attr_reader :closure
|
|
18
|
+
|
|
19
|
+
# @param type [::Symbol] :class or :module
|
|
20
|
+
# @param visibility [::Symbol] :public or :private
|
|
21
|
+
# @param gates [::Array<String>]
|
|
22
|
+
# @param name [String]
|
|
23
|
+
def initialize type: :class, visibility: :public, gates: [''], name: '', **splat
|
|
24
|
+
# super(location, namespace, name, comments)
|
|
25
|
+
super(**splat, name: name)
|
|
26
|
+
@type = type
|
|
27
|
+
@visibility = visibility
|
|
28
|
+
if name.start_with?('::')
|
|
29
|
+
name = name[2..-1] || ''
|
|
30
|
+
@closure = Solargraph::Pin::ROOT_PIN
|
|
31
|
+
end
|
|
32
|
+
@open_gates = gates
|
|
33
|
+
if name.include?('::')
|
|
34
|
+
# In this case, a chained namespace was opened (e.g., Foo::Bar)
|
|
35
|
+
# but Foo does not exist.
|
|
36
|
+
parts = name.split('::')
|
|
37
|
+
name = parts.pop
|
|
38
|
+
closure_name = if [Solargraph::Pin::ROOT_PIN, nil].include?(closure)
|
|
39
|
+
''
|
|
40
|
+
else
|
|
41
|
+
# @sg-ignore Need to add nil check here
|
|
42
|
+
closure.full_context.namespace + '::'
|
|
43
|
+
end
|
|
44
|
+
closure_name += parts.join('::')
|
|
45
|
+
@closure = Pin::Namespace.new(name: closure_name, gates: [parts.join('::')], source: :namespace)
|
|
46
|
+
@context = nil
|
|
47
|
+
end
|
|
48
|
+
@name = name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def reset_generated!
|
|
52
|
+
@return_type = nil
|
|
53
|
+
@full_context = nil
|
|
54
|
+
@path = nil
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def to_rbs
|
|
58
|
+
"#{@type.to_s} #{return_type.all_params.first.to_rbs}#{rbs_generics}".strip
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def inner_desc
|
|
62
|
+
if name.nil? || name.empty?
|
|
63
|
+
'(top-level)'
|
|
64
|
+
else
|
|
65
|
+
super
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def namespace
|
|
70
|
+
context.namespace
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def full_context
|
|
74
|
+
@full_context ||= ComplexType.try_parse("::#{type.to_s.capitalize}<#{path}>")
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def binder
|
|
78
|
+
full_context
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def scope
|
|
82
|
+
context.scope
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def completion_item_kind
|
|
86
|
+
(type == :class ? LanguageServer::CompletionItemKinds::CLASS : LanguageServer::CompletionItemKinds::MODULE)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @return [Integer]
|
|
90
|
+
def symbol_kind
|
|
91
|
+
(type == :class ? LanguageServer::SymbolKinds::CLASS : LanguageServer::SymbolKinds::MODULE)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# @return [String]
|
|
95
|
+
def path
|
|
96
|
+
@path ||= (namespace.empty? ? '' : "#{namespace}::") + name
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def return_type
|
|
100
|
+
@return_type ||= ComplexType.try_parse( (type == :class ? '::Class' : '::Module') + "<::#{path}>")
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @return [Array<String>]
|
|
104
|
+
def domains
|
|
105
|
+
@domains ||= []
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def typify api_map
|
|
109
|
+
return_type
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def gates
|
|
113
|
+
@gates ||= if path.empty?
|
|
114
|
+
@open_gates
|
|
115
|
+
else
|
|
116
|
+
[path] + @open_gates
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|