solargraph 0.47.2 → 0.54.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/FUNDING.yml +1 -0
- data/.github/workflows/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +4 -8
- data/.github/workflows/typecheck.yml +34 -0
- data/.yardopts +2 -2
- data/CHANGELOG.md +166 -3
- data/LICENSE +1 -1
- data/README.md +19 -16
- data/SPONSORS.md +2 -9
- data/lib/solargraph/api_map/cache.rb +50 -20
- data/lib/solargraph/api_map/source_to_yard.rb +17 -10
- data/lib/solargraph/api_map/store.rb +68 -15
- data/lib/solargraph/api_map.rb +238 -112
- data/lib/solargraph/bench.rb +3 -2
- data/lib/solargraph/cache.rb +77 -0
- data/lib/solargraph/complex_type/type_methods.rb +116 -35
- data/lib/solargraph/complex_type/unique_type.rb +261 -33
- data/lib/solargraph/complex_type.rb +149 -30
- data/lib/solargraph/convention/rakefile.rb +17 -0
- data/lib/solargraph/convention.rb +2 -3
- data/lib/solargraph/converters/dd.rb +5 -0
- data/lib/solargraph/converters/dl.rb +3 -0
- data/lib/solargraph/converters/dt.rb +3 -0
- data/lib/solargraph/diagnostics/rubocop.rb +23 -8
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +4 -1
- data/lib/solargraph/diagnostics/type_check.rb +1 -0
- data/lib/solargraph/diagnostics.rb +2 -2
- data/lib/solargraph/doc_map.rb +187 -0
- data/lib/solargraph/gem_pins.rb +72 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +2 -2
- data/lib/solargraph/language_server/host/dispatch.rb +22 -5
- data/lib/solargraph/language_server/host/message_worker.rb +4 -0
- data/lib/solargraph/language_server/host/sources.rb +8 -65
- data/lib/solargraph/language_server/host.rb +88 -93
- data/lib/solargraph/language_server/message/base.rb +1 -1
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +13 -1
- data/lib/solargraph/language_server/message/extended/download_core.rb +1 -5
- data/lib/solargraph/language_server/message/initialize.rb +27 -0
- data/lib/solargraph/language_server/message/initialized.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +4 -1
- data/lib/solargraph/language_server/message/text_document/formatting.rb +5 -4
- data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +1 -6
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +1 -1
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +10 -3
- data/lib/solargraph/language_server/message.rb +1 -0
- data/lib/solargraph/language_server/progress.rb +118 -0
- data/lib/solargraph/language_server/transport/adapter.rb +16 -1
- data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
- data/lib/solargraph/language_server.rb +1 -0
- data/lib/solargraph/library.rb +231 -104
- data/lib/solargraph/location.rb +1 -0
- data/lib/solargraph/page.rb +6 -0
- data/lib/solargraph/parser/comment_ripper.rb +4 -0
- data/lib/solargraph/parser/node_methods.rb +47 -7
- data/lib/solargraph/parser/node_processor/base.rb +11 -1
- data/lib/solargraph/parser/node_processor.rb +1 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +31 -9
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +3 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +57 -41
- data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +53 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +3 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +14 -4
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/cvasgn_node.rb +1 -1
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/def_node.rb +7 -20
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +2 -2
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +47 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +2 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +3 -3
- 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 +7 -5
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sym_node.rb +1 -1
- 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 +1 -1
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +9 -10
- data/lib/solargraph/pin/base.rb +69 -11
- data/lib/solargraph/pin/base_variable.rb +40 -7
- data/lib/solargraph/pin/block.rb +81 -33
- data/lib/solargraph/pin/closure.rb +17 -2
- data/lib/solargraph/pin/common.rb +7 -3
- data/lib/solargraph/pin/conversions.rb +34 -8
- data/lib/solargraph/pin/delegated_method.rb +101 -0
- data/lib/solargraph/pin/documenting.rb +25 -32
- data/lib/solargraph/pin/instance_variable.rb +4 -0
- data/lib/solargraph/pin/local_variable.rb +13 -1
- data/lib/solargraph/pin/method.rb +273 -17
- data/lib/solargraph/pin/namespace.rb +17 -1
- data/lib/solargraph/pin/parameter.rb +40 -28
- data/lib/solargraph/pin/reference/override.rb +2 -2
- data/lib/solargraph/pin/reference.rb +8 -0
- data/lib/solargraph/pin/search.rb +4 -4
- data/lib/solargraph/pin/signature.rb +143 -0
- data/lib/solargraph/pin.rb +2 -1
- data/lib/solargraph/range.rb +4 -6
- data/lib/solargraph/rbs_map/conversions.rb +607 -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 +92 -0
- data/lib/solargraph/shell.rb +85 -59
- data/lib/solargraph/source/chain/array.rb +32 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +125 -61
- data/lib/solargraph/source/chain/constant.rb +15 -1
- data/lib/solargraph/source/chain/if.rb +23 -0
- data/lib/solargraph/source/chain/link.rb +8 -2
- data/lib/solargraph/source/chain/or.rb +1 -1
- data/lib/solargraph/source/chain/z_super.rb +3 -3
- data/lib/solargraph/source/chain.rb +64 -14
- data/lib/solargraph/source/change.rb +3 -0
- data/lib/solargraph/source/cursor.rb +2 -0
- data/lib/solargraph/source/source_chainer.rb +8 -5
- data/lib/solargraph/source/updater.rb +1 -0
- data/lib/solargraph/source.rb +18 -63
- data/lib/solargraph/source_map/clip.rb +31 -23
- data/lib/solargraph/source_map/mapper.rb +23 -7
- data/lib/solargraph/source_map.rb +36 -11
- data/lib/solargraph/type_checker/checks.rb +10 -2
- data/lib/solargraph/type_checker.rb +229 -100
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/environment.erb +2 -2
- data/lib/solargraph/workspace/config.rb +15 -11
- data/lib/solargraph/workspace.rb +41 -17
- data/lib/solargraph/yard_map/cache.rb +6 -0
- data/lib/solargraph/yard_map/helpers.rb +1 -1
- data/lib/solargraph/yard_map/mapper/to_method.rb +23 -7
- data/lib/solargraph/yard_map/mapper.rb +1 -1
- data/lib/solargraph/yard_map/to_method.rb +11 -4
- data/lib/solargraph/yard_map.rb +1 -443
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +8 -6
- data/solargraph.gemspec +19 -8
- metadata +164 -99
- 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/cvasgn_node.rb +0 -23
- 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/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
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
module Solargraph
|
4
4
|
module Parser
|
5
|
-
module
|
5
|
+
module ParserGem
|
6
6
|
module NodeProcessors
|
7
7
|
class IvasgnNode < Parser::NodeProcessor::Base
|
8
|
-
include
|
8
|
+
include ParserGem::NodeMethods
|
9
9
|
|
10
10
|
def process
|
11
11
|
loc = get_node_location(node)
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
module Solargraph
|
4
4
|
module Parser
|
5
|
-
module
|
5
|
+
module ParserGem
|
6
6
|
module NodeProcessors
|
7
7
|
class LvasgnNode < Parser::NodeProcessor::Base
|
8
|
-
include
|
8
|
+
include ParserGem::NodeMethods
|
9
9
|
|
10
10
|
def process
|
11
11
|
here = get_node_start_position(node)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
module ParserGem
|
6
|
+
module NodeProcessors
|
7
|
+
class MasgnNode < Parser::NodeProcessor::Base
|
8
|
+
include ParserGem::NodeMethods
|
9
|
+
|
10
|
+
def process
|
11
|
+
# Example:
|
12
|
+
#
|
13
|
+
# s(:masgn,
|
14
|
+
# s(:mlhs,
|
15
|
+
# s(:send,
|
16
|
+
# s(:send, nil, :a), :b=),
|
17
|
+
# s(:lvasgn, :b),
|
18
|
+
# s(:ivasgn, :@c)),
|
19
|
+
# s(:array,
|
20
|
+
# s(:int, 1),
|
21
|
+
# s(:int, 2),
|
22
|
+
# s(:int, 3)))
|
23
|
+
masgn = node
|
24
|
+
mlhs = masgn.children.fetch(0)
|
25
|
+
lhs_arr = mlhs.children
|
26
|
+
mass_rhs = node.children.fetch(1)
|
27
|
+
|
28
|
+
# Get pins created for the mlhs node
|
29
|
+
process_children
|
30
|
+
|
31
|
+
lhs_arr.each_with_index do |lhs, i|
|
32
|
+
location = get_node_location(lhs)
|
33
|
+
# @todo in line below, nothing in typechecking alerts
|
34
|
+
# when a non-existant method is called on 'l'
|
35
|
+
pin = locals.find { |l| l.location == location }
|
36
|
+
if pin.nil?
|
37
|
+
Solargraph.logger.debug "Could not find pin in location #{location}"
|
38
|
+
next
|
39
|
+
end
|
40
|
+
pin.mass_assignment = [mass_rhs, i]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
module Solargraph
|
4
4
|
module Parser
|
5
|
-
module
|
5
|
+
module ParserGem
|
6
6
|
module NodeProcessors
|
7
7
|
class ResbodyNode < Parser::NodeProcessor::Base
|
8
|
-
include
|
8
|
+
include ParserGem::NodeMethods
|
9
9
|
|
10
10
|
def process
|
11
|
-
if node.children[1]
|
11
|
+
if node.children[1] # Exception local variable name
|
12
12
|
here = get_node_start_position(node.children[1])
|
13
13
|
presence = Range.new(here, region.closure.location.range.ending)
|
14
14
|
loc = get_node_location(node.children[1])
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
module ParserGem
|
6
|
+
module NodeProcessors
|
7
|
+
class SclassNode < Parser::NodeProcessor::Base
|
8
|
+
def process
|
9
|
+
sclass = node.children[0]
|
10
|
+
if sclass.is_a?(AST::Node) && sclass.type == :self
|
11
|
+
closure = region.closure
|
12
|
+
elsif sclass.is_a?(AST::Node) && sclass.type == :casgn
|
13
|
+
names = [region.closure.namespace, region.closure.name]
|
14
|
+
if sclass.children[0].nil? && names.last != sclass.children[1].to_s
|
15
|
+
names << sclass.children[1].to_s
|
16
|
+
else
|
17
|
+
names.concat [NodeMethods.unpack_name(sclass.children[0]), sclass.children[1].to_s]
|
18
|
+
end
|
19
|
+
name = names.reject(&:empty?).join('::')
|
20
|
+
closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location)
|
21
|
+
elsif sclass.is_a?(AST::Node) && sclass.type == :const
|
22
|
+
names = [region.closure.namespace, region.closure.name]
|
23
|
+
also = NodeMethods.unpack_name(sclass)
|
24
|
+
if also != region.closure.name
|
25
|
+
names << also
|
26
|
+
end
|
27
|
+
name = names.reject(&:empty?).join('::')
|
28
|
+
closure = Solargraph::Pin::Namespace.new(name: name, location: region.closure.location)
|
29
|
+
else
|
30
|
+
return
|
31
|
+
end
|
32
|
+
pins.push Solargraph::Pin::Singleton.new(
|
33
|
+
location: get_node_location(node),
|
34
|
+
closure: closure
|
35
|
+
)
|
36
|
+
process_children region.update(visibility: :public, scope: :class, closure: pins.last)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
module Solargraph
|
4
4
|
module Parser
|
5
|
-
module
|
5
|
+
module ParserGem
|
6
6
|
module NodeProcessors
|
7
7
|
class SendNode < Parser::NodeProcessor::Base
|
8
|
-
include
|
8
|
+
include ParserGem::NodeMethods
|
9
9
|
|
10
10
|
def process
|
11
11
|
if node.children[0].nil?
|
@@ -80,7 +80,7 @@ module Solargraph
|
|
80
80
|
)
|
81
81
|
end
|
82
82
|
if node.children[1] == :attr_writer || node.children[1] == :attr_accessor
|
83
|
-
|
83
|
+
method_pin = Solargraph::Pin::Method.new(
|
84
84
|
location: loc,
|
85
85
|
closure: clos,
|
86
86
|
name: "#{a.children[0]}=",
|
@@ -89,8 +89,9 @@ module Solargraph
|
|
89
89
|
visibility: region.visibility,
|
90
90
|
attribute: true
|
91
91
|
)
|
92
|
-
pins.
|
93
|
-
|
92
|
+
pins.push method_pin
|
93
|
+
method_pin.parameters.push Pin::Parameter.new(name: 'value', decl: :arg, closure: pins.last)
|
94
|
+
if method_pin.return_type.defined?
|
94
95
|
pins.last.docstring.add_tag YARD::Tags::Tag.new(:param, '', pins.last.return_type.to_s.split(', '), 'value')
|
95
96
|
end
|
96
97
|
end
|
@@ -112,6 +113,7 @@ module Solargraph
|
|
112
113
|
end
|
113
114
|
end
|
114
115
|
|
116
|
+
# @return [void]
|
115
117
|
def process_prepend
|
116
118
|
if node.children[2].is_a?(AST::Node) && node.children[2].type == :const
|
117
119
|
cp = region.closure
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'solargraph/parser/node_processor'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
module Parser
|
7
|
+
module ParserGem
|
8
|
+
module NodeProcessors
|
9
|
+
autoload :BeginNode, 'solargraph/parser/parser_gem/node_processors/begin_node'
|
10
|
+
autoload :DefNode, 'solargraph/parser/parser_gem/node_processors/def_node'
|
11
|
+
autoload :DefsNode, 'solargraph/parser/parser_gem/node_processors/defs_node'
|
12
|
+
autoload :SendNode, 'solargraph/parser/parser_gem/node_processors/send_node'
|
13
|
+
autoload :NamespaceNode, 'solargraph/parser/parser_gem/node_processors/namespace_node'
|
14
|
+
autoload :SclassNode, 'solargraph/parser/parser_gem/node_processors/sclass_node'
|
15
|
+
autoload :IvasgnNode, 'solargraph/parser/parser_gem/node_processors/ivasgn_node'
|
16
|
+
autoload :CvasgnNode, 'solargraph/parser/parser_gem/node_processors/cvasgn_node'
|
17
|
+
autoload :LvasgnNode, 'solargraph/parser/parser_gem/node_processors/lvasgn_node'
|
18
|
+
autoload :GvasgnNode, 'solargraph/parser/parser_gem/node_processors/gvasgn_node'
|
19
|
+
autoload :CasgnNode, 'solargraph/parser/parser_gem/node_processors/casgn_node'
|
20
|
+
autoload :MasgnNode, 'solargraph/parser/parser_gem/node_processors/masgn_node'
|
21
|
+
autoload :AliasNode, 'solargraph/parser/parser_gem/node_processors/alias_node'
|
22
|
+
autoload :ArgsNode, 'solargraph/parser/parser_gem/node_processors/args_node'
|
23
|
+
autoload :BlockNode, 'solargraph/parser/parser_gem/node_processors/block_node'
|
24
|
+
autoload :OrasgnNode, 'solargraph/parser/parser_gem/node_processors/orasgn_node'
|
25
|
+
autoload :SymNode, 'solargraph/parser/parser_gem/node_processors/sym_node'
|
26
|
+
autoload :ResbodyNode, 'solargraph/parser/parser_gem/node_processors/resbody_node'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module NodeProcessor
|
31
|
+
register :source, ParserGem::NodeProcessors::BeginNode
|
32
|
+
register :begin, ParserGem::NodeProcessors::BeginNode
|
33
|
+
register :kwbegin, ParserGem::NodeProcessors::BeginNode
|
34
|
+
register :rescue, ParserGem::NodeProcessors::BeginNode
|
35
|
+
register :resbody, ParserGem::NodeProcessors::ResbodyNode
|
36
|
+
register :def, ParserGem::NodeProcessors::DefNode
|
37
|
+
register :defs, ParserGem::NodeProcessors::DefsNode
|
38
|
+
register :send, ParserGem::NodeProcessors::SendNode
|
39
|
+
register :class, ParserGem::NodeProcessors::NamespaceNode
|
40
|
+
register :module, ParserGem::NodeProcessors::NamespaceNode
|
41
|
+
register :sclass, ParserGem::NodeProcessors::SclassNode
|
42
|
+
register :ivasgn, ParserGem::NodeProcessors::IvasgnNode
|
43
|
+
register :cvasgn, ParserGem::NodeProcessors::CvasgnNode
|
44
|
+
register :lvasgn, ParserGem::NodeProcessors::LvasgnNode
|
45
|
+
register :gvasgn, ParserGem::NodeProcessors::GvasgnNode
|
46
|
+
register :casgn, ParserGem::NodeProcessors::CasgnNode
|
47
|
+
register :masgn, ParserGem::NodeProcessors::MasgnNode
|
48
|
+
register :alias, ParserGem::NodeProcessors::AliasNode
|
49
|
+
register :args, ParserGem::NodeProcessors::ArgsNode
|
50
|
+
register :forward_args, ParserGem::NodeProcessors::ArgsNode
|
51
|
+
register :block, ParserGem::NodeProcessors::BlockNode
|
52
|
+
register :or_asgn, ParserGem::NodeProcessors::OrasgnNode
|
53
|
+
register :sym, ParserGem::NodeProcessors::SymNode
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Solargraph
|
2
|
+
module Parser
|
3
|
+
module ParserGem
|
4
|
+
autoload :FlawedBuilder, 'solargraph/parser/parser_gem/flawed_builder'
|
5
|
+
autoload :ClassMethods, 'solargraph/parser/parser_gem/class_methods'
|
6
|
+
autoload :NodeMethods, 'solargraph/parser/parser_gem/node_methods'
|
7
|
+
autoload :NodeChainer, 'solargraph/parser/parser_gem/node_chainer'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'solargraph/parser/parser_gem/node_processors'
|
@@ -23,7 +23,7 @@ module Solargraph
|
|
23
23
|
|
24
24
|
# @param source [Source]
|
25
25
|
# @param namespace [String]
|
26
|
-
# @param scope [Symbol]
|
26
|
+
# @param scope [Symbol, nil]
|
27
27
|
# @param visibility [Symbol]
|
28
28
|
def initialize source: Solargraph::Source.load_string(''), closure: nil,
|
29
29
|
scope: nil, visibility: :public, lvars: []
|
data/lib/solargraph/parser.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
module Solargraph
|
2
2
|
module Parser
|
3
3
|
autoload :CommentRipper, 'solargraph/parser/comment_ripper'
|
4
|
-
autoload :
|
5
|
-
autoload :Rubyvm, 'solargraph/parser/rubyvm'
|
4
|
+
autoload :ParserGem, 'solargraph/parser/parser_gem'
|
6
5
|
autoload :Region, 'solargraph/parser/region'
|
7
6
|
autoload :NodeProcessor, 'solargraph/parser/node_processor'
|
8
7
|
autoload :Snippet, 'solargraph/parser/snippet'
|
@@ -10,17 +9,17 @@ module Solargraph
|
|
10
9
|
class SyntaxError < StandardError
|
11
10
|
end
|
12
11
|
|
13
|
-
# True if the parser can use RubyVM.
|
14
|
-
#
|
15
12
|
def self.rubyvm?
|
16
|
-
|
17
|
-
# false
|
13
|
+
false
|
18
14
|
end
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
extend selected::ClassMethods
|
16
|
+
# @deprecated
|
17
|
+
Legacy = ParserGem
|
23
18
|
|
24
|
-
|
19
|
+
ClassMethods = ParserGem::ClassMethods
|
20
|
+
|
21
|
+
extend ParserGem::ClassMethods
|
22
|
+
|
23
|
+
NodeMethods = ParserGem::NodeMethods
|
25
24
|
end
|
26
25
|
end
|
data/lib/solargraph/pin/base.rb
CHANGED
@@ -21,9 +21,11 @@ module Solargraph
|
|
21
21
|
# @return [String]
|
22
22
|
attr_reader :path
|
23
23
|
|
24
|
-
# @
|
25
|
-
|
26
|
-
|
24
|
+
# @return [::Symbol]
|
25
|
+
attr_accessor :source
|
26
|
+
|
27
|
+
# @param location [Solargraph::Location, nil]
|
28
|
+
# @param closure [Solargraph::Pin::Closure, nil]
|
27
29
|
# @param name [String]
|
28
30
|
# @param comments [String]
|
29
31
|
def initialize location: nil, closure: nil, name: '', comments: ''
|
@@ -38,6 +40,43 @@ module Solargraph
|
|
38
40
|
@comments ||= ''
|
39
41
|
end
|
40
42
|
|
43
|
+
# @param generics_to_resolve [Enumerable<String>]
|
44
|
+
# @param return_type_context [ComplexType, nil]
|
45
|
+
# @param context [ComplexType]
|
46
|
+
# @param resolved_generic_values [Hash{String => ComplexType}]
|
47
|
+
# @return [self]
|
48
|
+
def resolve_generics_from_context(generics_to_resolve, return_type_context = nil, resolved_generic_values: {})
|
49
|
+
proxy return_type.resolve_generics_from_context(generics_to_resolve,
|
50
|
+
return_type_context,
|
51
|
+
resolved_generic_values: resolved_generic_values)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @yieldparam [ComplexType]
|
55
|
+
# @yieldreturn [ComplexType]
|
56
|
+
# @return [self]
|
57
|
+
def transform_types(&transform)
|
58
|
+
proxy return_type.transform(&transform)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Determine the concrete type for each of the generic type
|
62
|
+
# parameters used in this method based on the parameters passed
|
63
|
+
# into the its class and return a new method pin.
|
64
|
+
#
|
65
|
+
# @param definitions [Pin::Namespace] The module/class which uses generic types
|
66
|
+
# @param context_type [ComplexType] The receiver type
|
67
|
+
# @return [self]
|
68
|
+
def resolve_generics definitions, context_type
|
69
|
+
transformed = transform_types { |t| t.resolve_generics(definitions, context_type) if t }
|
70
|
+
transformed.erase_generics(definitions.generics)
|
71
|
+
end
|
72
|
+
|
73
|
+
# @param generics_to_erase [Enumerable<String>]
|
74
|
+
# @return [self]
|
75
|
+
def erase_generics(generics_to_erase)
|
76
|
+
return self if generics_to_erase.empty?
|
77
|
+
transform_types { |t| t.erase_generics(generics_to_erase) }
|
78
|
+
end
|
79
|
+
|
41
80
|
# @return [String, nil]
|
42
81
|
def filename
|
43
82
|
return nil if location.nil?
|
@@ -55,7 +94,7 @@ module Solargraph
|
|
55
94
|
end
|
56
95
|
|
57
96
|
def to_s
|
58
|
-
|
97
|
+
to_rbs
|
59
98
|
end
|
60
99
|
|
61
100
|
# @return [Boolean]
|
@@ -100,13 +139,13 @@ module Solargraph
|
|
100
139
|
@docstring ||= Solargraph::Source.parse_docstring('').to_docstring
|
101
140
|
end
|
102
141
|
|
103
|
-
# @return [Array<YARD::Tags::Directive>]
|
142
|
+
# @return [::Array<YARD::Tags::Directive>]
|
104
143
|
def directives
|
105
144
|
parse_comments unless defined?(@directives)
|
106
145
|
@directives
|
107
146
|
end
|
108
147
|
|
109
|
-
# @return [Array<YARD::Tags::MacroDirective>]
|
148
|
+
# @return [::Array<YARD::Tags::MacroDirective>]
|
110
149
|
def macros
|
111
150
|
@macros ||= collect_macros
|
112
151
|
end
|
@@ -213,12 +252,31 @@ module Solargraph
|
|
213
252
|
result
|
214
253
|
end
|
215
254
|
|
255
|
+
# @return [String]
|
216
256
|
def identity
|
217
|
-
@identity ||= "#{closure.
|
257
|
+
@identity ||= "#{closure.path}|#{name}"
|
258
|
+
end
|
259
|
+
|
260
|
+
# @return [String, nil]
|
261
|
+
def to_rbs
|
262
|
+
return_type.to_rbs
|
263
|
+
end
|
264
|
+
|
265
|
+
# @return [String, nil]
|
266
|
+
def desc
|
267
|
+
if path
|
268
|
+
if to_rbs
|
269
|
+
path + ' ' + to_rbs
|
270
|
+
else
|
271
|
+
path
|
272
|
+
end
|
273
|
+
else
|
274
|
+
to_rbs
|
275
|
+
end
|
218
276
|
end
|
219
277
|
|
220
278
|
def inspect
|
221
|
-
"#<#{self.class} `#{self.
|
279
|
+
"#<#{self.class} `#{self.desc}` at #{self.location.inspect}>"
|
222
280
|
end
|
223
281
|
|
224
282
|
protected
|
@@ -263,8 +321,8 @@ module Solargraph
|
|
263
321
|
true
|
264
322
|
end
|
265
323
|
|
266
|
-
# @param dir1 [Array<YARD::Tags::Directive>]
|
267
|
-
# @param dir2 [Array<YARD::Tags::Directive>]
|
324
|
+
# @param dir1 [::Array<YARD::Tags::Directive>]
|
325
|
+
# @param dir2 [::Array<YARD::Tags::Directive>]
|
268
326
|
# @return [Boolean]
|
269
327
|
def compare_directives dir1, dir2
|
270
328
|
return false if dir1.length != dir2.length
|
@@ -285,7 +343,7 @@ module Solargraph
|
|
285
343
|
tag1.types == tag2.types
|
286
344
|
end
|
287
345
|
|
288
|
-
# @return [Array<YARD::Tags::Handlers::Directive>]
|
346
|
+
# @return [::Array<YARD::Tags::Handlers::Directive>]
|
289
347
|
def collect_macros
|
290
348
|
return [] unless maybe_directives?
|
291
349
|
parse = Solargraph::Source.parse_docstring(comments)
|
@@ -9,10 +9,14 @@ module Solargraph
|
|
9
9
|
# @return [Parser::AST::Node, nil]
|
10
10
|
attr_reader :assignment
|
11
11
|
|
12
|
+
attr_accessor :mass_assignment
|
13
|
+
|
12
14
|
# @param assignment [Parser::AST::Node, nil]
|
13
15
|
def initialize assignment: nil, **splat
|
14
16
|
super(**splat)
|
15
17
|
@assignment = assignment
|
18
|
+
# @type [nil, ::Array(Parser::AST::Node, Integer)]
|
19
|
+
@mass_assignment = nil
|
16
20
|
end
|
17
21
|
|
18
22
|
def completion_item_kind
|
@@ -36,10 +40,12 @@ module Solargraph
|
|
36
40
|
true
|
37
41
|
end
|
38
42
|
|
39
|
-
|
40
|
-
|
43
|
+
# @param parent_node [Parser::AST::Node]
|
44
|
+
# @param api_map [ApiMap]
|
45
|
+
# @return [::Array<ComplexType>]
|
46
|
+
def return_types_from_node(parent_node, api_map)
|
41
47
|
types = []
|
42
|
-
|
48
|
+
value_position_nodes_only(parent_node).each do |node|
|
43
49
|
# Nil nodes may not have a location
|
44
50
|
if node.nil? || node.type == :NIL || node.type == :nil
|
45
51
|
types.push ComplexType::NIL
|
@@ -50,13 +56,36 @@ module Solargraph
|
|
50
56
|
clip = api_map.clip_at(location.filename, pos)
|
51
57
|
# Use the return node for inference. The clip might infer from the
|
52
58
|
# first node in a method call instead of the entire call.
|
53
|
-
chain = Parser.chain(node, nil,
|
54
|
-
result = chain.infer(api_map, closure, clip.locals)
|
59
|
+
chain = Parser.chain(node, nil, nil)
|
60
|
+
result = chain.infer(api_map, closure, clip.locals).self_to(closure.context.tag)
|
55
61
|
types.push result unless result.undefined?
|
56
62
|
end
|
57
63
|
end
|
58
|
-
|
59
|
-
|
64
|
+
types
|
65
|
+
end
|
66
|
+
|
67
|
+
# @param api_map [ApiMap]
|
68
|
+
# @return [ComplexType]
|
69
|
+
def probe api_map
|
70
|
+
unless @assignment.nil?
|
71
|
+
types = return_types_from_node(@assignment, api_map)
|
72
|
+
return ComplexType.new(types.uniq) unless types.empty?
|
73
|
+
end
|
74
|
+
|
75
|
+
unless @mass_assignment.nil?
|
76
|
+
mass_node, index = @mass_assignment
|
77
|
+
types = return_types_from_node(mass_node, api_map)
|
78
|
+
types.map! do |type|
|
79
|
+
if type.tuple?
|
80
|
+
type.all_params[index]
|
81
|
+
elsif ['::Array', '::Set', '::Enumerable'].include?(type.rooted_name)
|
82
|
+
type.all_params.first
|
83
|
+
end
|
84
|
+
end.compact!
|
85
|
+
return ComplexType.new(types.uniq) unless types.empty?
|
86
|
+
end
|
87
|
+
|
88
|
+
ComplexType::UNDEFINED
|
60
89
|
end
|
61
90
|
|
62
91
|
def == other
|
@@ -71,6 +100,10 @@ module Solargraph
|
|
71
100
|
true
|
72
101
|
end
|
73
102
|
|
103
|
+
def desc
|
104
|
+
"#{to_rbs} = #{assignment&.type.inspect}"
|
105
|
+
end
|
106
|
+
|
74
107
|
private
|
75
108
|
|
76
109
|
# @return [ComplexType]
|