solargraph 0.54.0 → 0.54.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -0
- data/lib/solargraph/api_map/cache.rb +10 -1
- data/lib/solargraph/api_map/index.rb +167 -0
- data/lib/solargraph/api_map/store.rb +72 -121
- data/lib/solargraph/api_map.rb +94 -36
- data/lib/solargraph/bench.rb +17 -1
- data/lib/solargraph/complex_type/type_methods.rb +17 -11
- data/lib/solargraph/complex_type/unique_type.rb +93 -10
- data/lib/solargraph/complex_type.rb +68 -18
- data/lib/solargraph/convention.rb +1 -0
- data/lib/solargraph/doc_map.rb +1 -0
- data/lib/solargraph/equality.rb +33 -0
- data/lib/solargraph/language_server/host/message_worker.rb +48 -5
- data/lib/solargraph/language_server/host.rb +12 -11
- data/lib/solargraph/language_server/message/base.rb +19 -12
- data/lib/solargraph/language_server/message/initialize.rb +3 -1
- data/lib/solargraph/language_server/message/text_document/completion.rb +0 -3
- data/lib/solargraph/language_server/message/text_document/definition.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/formatting.rb +4 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +3 -3
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -2
- data/lib/solargraph/language_server/progress.rb +19 -2
- data/lib/solargraph/library.rb +31 -41
- data/lib/solargraph/location.rb +21 -1
- data/lib/solargraph/parser/node_methods.rb +1 -1
- data/lib/solargraph/parser/node_processor.rb +1 -0
- data/lib/solargraph/parser/parser_gem/class_methods.rb +2 -6
- data/lib/solargraph/parser/parser_gem/node_methods.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +23 -19
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +8 -2
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +1 -1
- data/lib/solargraph/parser.rb +2 -5
- data/lib/solargraph/pin/base.rb +41 -17
- data/lib/solargraph/pin/base_variable.rb +4 -3
- data/lib/solargraph/pin/block.rb +6 -26
- data/lib/solargraph/pin/callable.rb +147 -0
- data/lib/solargraph/pin/closure.rb +8 -3
- data/lib/solargraph/pin/common.rb +2 -6
- data/lib/solargraph/pin/conversions.rb +3 -2
- data/lib/solargraph/pin/instance_variable.rb +2 -2
- data/lib/solargraph/pin/method.rb +57 -31
- data/lib/solargraph/pin/namespace.rb +5 -5
- data/lib/solargraph/pin/parameter.rb +11 -12
- data/lib/solargraph/pin/proxy_type.rb +1 -1
- data/lib/solargraph/pin/signature.rb +3 -129
- data/lib/solargraph/pin.rb +4 -1
- data/lib/solargraph/position.rb +7 -0
- data/lib/solargraph/range.rb +9 -4
- data/lib/solargraph/rbs_map/conversions.rb +77 -38
- data/lib/solargraph/rbs_map/core_fills.rb +6 -6
- data/lib/solargraph/rbs_map.rb +1 -0
- data/lib/solargraph/shell.rb +19 -2
- data/lib/solargraph/source/chain/array.rb +7 -6
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +90 -55
- data/lib/solargraph/source/chain/hash.rb +5 -0
- data/lib/solargraph/source/chain/if.rb +5 -0
- data/lib/solargraph/source/chain/link.rb +26 -5
- data/lib/solargraph/source/chain/literal.rb +5 -0
- data/lib/solargraph/source/chain/or.rb +1 -1
- data/lib/solargraph/source/chain.rb +68 -30
- data/lib/solargraph/source/cursor.rb +3 -2
- data/lib/solargraph/source.rb +104 -86
- data/lib/solargraph/source_map/clip.rb +5 -5
- data/lib/solargraph/source_map/data.rb +30 -0
- data/lib/solargraph/source_map.rb +28 -16
- data/lib/solargraph/type_checker/rules.rb +6 -1
- data/lib/solargraph/type_checker.rb +15 -15
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/environment.erb +3 -5
- data/lib/solargraph/workspace/config.rb +7 -3
- data/lib/solargraph/workspace.rb +1 -1
- data/lib/solargraph/yard_map/mapper/to_constant.rb +1 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -0
- data/lib/solargraph/yard_map/mapper.rb +1 -0
- data/lib/solargraph/yardoc.rb +1 -1
- data/lib/solargraph.rb +1 -0
- data/solargraph.gemspec +5 -5
- metadata +29 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 155e6f0e4fc44166c0d4b3c1ba6691ff1d1629d229adf8d37f6d3fe4b5fc0c77
|
4
|
+
data.tar.gz: c33c4dab114c6a70b3c0dfbee6a5ccdc379cf284af3d34dae8a30473dbcdc517
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 267350435fa9592fc49dc2c5b05f9f9157b576025ea4ed9abe3ebc58e4344d7412805ace58920585105fbb81eaa2bad246416c5456ce66656f22c8639054002d
|
7
|
+
data.tar.gz: 7a3860337657dc869e7a96f8b95509867ece49db13e89523e09c1567490b427ed41f5fc57c87e5d8477bfe3857cbe97512bd811598adbb53f4a2f617e724c44c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,48 @@
|
|
1
|
+
## 0.54.5 - May 17, 2025
|
2
|
+
- Repair unknown encoding errors (#936, #935)
|
3
|
+
- Index arbitrary pinsets (#937)
|
4
|
+
- Separate YARD cache from doc map cache (#938)
|
5
|
+
|
6
|
+
## 0.54.4 - May 14, 2025
|
7
|
+
- Delete files from Library hash (#932)
|
8
|
+
- Clip#define returns variable pins (#934, #933)
|
9
|
+
|
10
|
+
## 0.54.3 - May 13, 2025
|
11
|
+
- Improve inspect()/desc()/to_s() methods for better debugging output (#913)
|
12
|
+
- Fix generic resolution in Hash types (#906)
|
13
|
+
- Stop parsing RBS type parameter constraints as the type name (#918)
|
14
|
+
- Fix pin inference stack (#922)
|
15
|
+
- Refactor pin equality for performance (#925)
|
16
|
+
- Improve ApiMap catalog speed by preserving static pin indexes (#930)
|
17
|
+
- Update jaro_winkler dependency (#931)
|
18
|
+
|
19
|
+
## 0.54.2 - April 28, 2025
|
20
|
+
- Resolve generics correctly on mixin inclusion (#898)
|
21
|
+
- Pick correct String#split overload (#905)
|
22
|
+
- Fix type sent into YARD method (#912)
|
23
|
+
- Early CancelRequest handling (#914)
|
24
|
+
- Destructure partial yield types (#915)
|
25
|
+
- Dependency versions (#916)
|
26
|
+
|
27
|
+
## 0.54.1 - April 26, 2025
|
28
|
+
- Retire more RubyVM-specific code (#797)
|
29
|
+
- Add additional docs for key classes, modules and methods (#802)
|
30
|
+
- Populate location information from RBS files (#768)
|
31
|
+
- Consolidate parameter handling into Pin::Callable (#844)
|
32
|
+
- Adjust local variable presence to start after assignment, not before (#864)
|
33
|
+
- Resolve params from ref tags (#872)
|
34
|
+
- Reduce use of ComplexType.parse() to preserve rooted? information (#870)
|
35
|
+
- Ensure yield return types are qualified (#886)
|
36
|
+
- Understand type of 'def foo; @foo ||= bar; end' reader methods (#888)
|
37
|
+
- Improvements to #inspect output on pins and chains (#895)
|
38
|
+
- Block method resolution improvements (#885)
|
39
|
+
- Understand mass assignment into instance variables (#893)
|
40
|
+
- Library sync and cache invalidation (#903)
|
41
|
+
- Handle super and yield scenarios from blocks (#891)
|
42
|
+
- Allow core and stdlib documentation to be uncached (#899)
|
43
|
+
- Surface variable names in LSP, e.g., textDocument/hover (#910)
|
44
|
+
- Keep idle progress notifications alive (#911)
|
45
|
+
|
1
46
|
## 0.54.0 - April 14, 2025
|
2
47
|
- Add support for simple block argument destructuring (#821)
|
3
48
|
- Benchmark the typecheck command (#852)
|
@@ -8,7 +8,7 @@ module Solargraph
|
|
8
8
|
@methods = {}
|
9
9
|
# @type [Hash{(String, Array<String>) => Array<Pin::Base>}]
|
10
10
|
@constants = {}
|
11
|
-
# @type [Hash{
|
11
|
+
# @type [Hash{String => String}]
|
12
12
|
@qualified_namespaces = {}
|
13
13
|
# @type [Hash{String => Pin::Method}]
|
14
14
|
@receiver_definitions = {}
|
@@ -16,6 +16,15 @@ module Solargraph
|
|
16
16
|
@clips = {}
|
17
17
|
end
|
18
18
|
|
19
|
+
def to_s
|
20
|
+
self.class.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
# avoid enormous dump
|
24
|
+
def inspect
|
25
|
+
to_s
|
26
|
+
end
|
27
|
+
|
19
28
|
# @param fqns [String]
|
20
29
|
# @param scope [Symbol]
|
21
30
|
# @param visibility [Array<Symbol>]
|
@@ -0,0 +1,167 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
class ApiMap
|
5
|
+
class Index
|
6
|
+
# @param pins [Array<Pin::Base>]
|
7
|
+
def initialize pins = []
|
8
|
+
catalog pins
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Array<Pin::Base>]
|
12
|
+
def pins
|
13
|
+
@pins ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Hash{String => Array<Pin::Namespace>}]
|
17
|
+
def namespace_hash
|
18
|
+
@namespace_hash ||= Hash.new { |h, k| h[k] = [] }
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Hash{String => Array<Pin::Base>}]
|
22
|
+
def pin_class_hash
|
23
|
+
@pin_class_hash ||= Hash.new { |h, k| h[k] = [] }
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Hash{String => Array<Pin::Base>}]
|
27
|
+
def path_pin_hash
|
28
|
+
@path_pin_hash ||= Hash.new { |h, k| h[k] = [] }
|
29
|
+
end
|
30
|
+
|
31
|
+
# @generic T
|
32
|
+
# @param klass [Class<generic<T>>]
|
33
|
+
# @return [Set<generic<T>>]
|
34
|
+
def pins_by_class klass
|
35
|
+
# @type [Set<Solargraph::Pin::Base>]
|
36
|
+
s = Set.new
|
37
|
+
@pin_select_cache[klass] ||= pin_class_hash.each_with_object(s) { |(key, o), n| n.merge(o) if key <= klass }
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Hash{String => Array<Pin::Reference::Include>}]
|
41
|
+
def include_references
|
42
|
+
@include_references ||= Hash.new { |h, k| h[k] = [] }
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Hash{String => Array<Pin::Reference::Extend>}]
|
46
|
+
def extend_references
|
47
|
+
@extend_references ||= Hash.new { |h, k| h[k] = [] }
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Hash{String => Array<Pin::Reference::Prepend>}]
|
51
|
+
def prepend_references
|
52
|
+
@prepend_references ||= Hash.new { |h, k| h[k] = [] }
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Hash{String => Array<Pin::Reference::Superclass>}]
|
56
|
+
def superclass_references
|
57
|
+
@superclass_references ||= Hash.new { |h, k| h[k] = [] }
|
58
|
+
end
|
59
|
+
|
60
|
+
# @param pins [Array<Pin::Base>]
|
61
|
+
def merge pins
|
62
|
+
deep_clone.catalog pins
|
63
|
+
end
|
64
|
+
|
65
|
+
protected
|
66
|
+
|
67
|
+
attr_writer :pins, :pin_select_cache, :namespace_hash, :pin_class_hash, :path_pin_hash, :include_references,
|
68
|
+
:extend_references, :prepend_references, :superclass_references
|
69
|
+
|
70
|
+
def deep_clone
|
71
|
+
Index.allocate.tap do |copy|
|
72
|
+
copy.pin_select_cache = {}
|
73
|
+
copy.pins = pins.clone
|
74
|
+
%i[
|
75
|
+
namespace_hash pin_class_hash path_pin_hash include_references extend_references prepend_references
|
76
|
+
superclass_references
|
77
|
+
].each do |sym|
|
78
|
+
copy.send("#{sym}=", send(sym).clone)
|
79
|
+
copy.send(sym)&.transform_values!(&:clone)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @param new_pins [Array<Pin::Base>]
|
85
|
+
def catalog new_pins
|
86
|
+
@pin_select_cache = {}
|
87
|
+
pins.concat new_pins
|
88
|
+
set = new_pins.to_set
|
89
|
+
set.classify(&:class)
|
90
|
+
.map { |k, v| pin_class_hash[k].concat v.to_a }
|
91
|
+
set.classify(&:namespace)
|
92
|
+
.map { |k, v| namespace_hash[k].concat v.to_a }
|
93
|
+
set.classify(&:path)
|
94
|
+
.map { |k, v| path_pin_hash[k].concat v.to_a }
|
95
|
+
@namespaces = path_pin_hash.keys.compact.to_set
|
96
|
+
map_references Pin::Reference::Include, include_references
|
97
|
+
map_references Pin::Reference::Prepend, prepend_references
|
98
|
+
map_references Pin::Reference::Extend, extend_references
|
99
|
+
map_references Pin::Reference::Superclass, superclass_references
|
100
|
+
map_overrides
|
101
|
+
self
|
102
|
+
end
|
103
|
+
|
104
|
+
# @param klass [Class<Pin::Reference>]
|
105
|
+
# @param hash [Hash{String => Array<Pin::Reference>}]
|
106
|
+
# @return [void]
|
107
|
+
def map_references klass, hash
|
108
|
+
pins_by_class(klass).each do |pin|
|
109
|
+
store_parametric_reference(hash, pin)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Add references to a map
|
114
|
+
#
|
115
|
+
# @param hash [Hash{String => Array<Pin::Reference>}]
|
116
|
+
# @param reference_pin [Pin::Reference]
|
117
|
+
#
|
118
|
+
# @return [void]
|
119
|
+
def store_parametric_reference(hash, reference_pin)
|
120
|
+
referenced_ns = reference_pin.name
|
121
|
+
referenced_tag_params = reference_pin.generic_values
|
122
|
+
referenced_tag = referenced_ns +
|
123
|
+
if referenced_tag_params && referenced_tag_params.length > 0
|
124
|
+
"<" + referenced_tag_params.join(', ') + ">"
|
125
|
+
else
|
126
|
+
''
|
127
|
+
end
|
128
|
+
referencing_ns = reference_pin.namespace
|
129
|
+
hash[referencing_ns].push referenced_tag
|
130
|
+
end
|
131
|
+
|
132
|
+
# @return [void]
|
133
|
+
def map_overrides
|
134
|
+
pins_by_class(Pin::Reference::Override).each do |ovr|
|
135
|
+
pin = path_pin_hash[ovr.name].first
|
136
|
+
next if pin.nil?
|
137
|
+
new_pin = if pin.path.end_with?('#initialize')
|
138
|
+
path_pin_hash[pin.path.sub(/#initialize/, '.new')].first
|
139
|
+
end
|
140
|
+
(ovr.tags.map(&:tag_name) + ovr.delete).uniq.each do |tag|
|
141
|
+
pin.docstring.delete_tags tag
|
142
|
+
new_pin.docstring.delete_tags tag if new_pin
|
143
|
+
end
|
144
|
+
ovr.tags.each do |tag|
|
145
|
+
pin.docstring.add_tag(tag)
|
146
|
+
redefine_return_type pin, tag
|
147
|
+
if new_pin
|
148
|
+
new_pin.docstring.add_tag(tag)
|
149
|
+
redefine_return_type new_pin, tag
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# @param pin [Pin::Method]
|
156
|
+
# @param tag [YARD::Tags::Tag]
|
157
|
+
# @return [void]
|
158
|
+
def redefine_return_type pin, tag
|
159
|
+
return unless pin && tag.tag_name == 'return'
|
160
|
+
pin.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
161
|
+
pin.signatures.each do |sig|
|
162
|
+
sig.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -1,16 +1,50 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
3
|
module Solargraph
|
5
4
|
class ApiMap
|
5
|
+
# Queryable collection of Pins representing a Workspace, gems and the Ruby
|
6
|
+
# core.
|
7
|
+
#
|
6
8
|
class Store
|
9
|
+
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
10
|
+
def initialize *pinsets
|
11
|
+
catalog pinsets
|
12
|
+
end
|
13
|
+
|
7
14
|
# @return [Array<Solargraph::Pin::Base>]
|
8
|
-
|
15
|
+
def pins
|
16
|
+
index.pins
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
20
|
+
# @return [Boolean] True if the index was updated
|
21
|
+
def update *pinsets
|
22
|
+
return catalog(pinsets) if pinsets.length != @pinsets.length
|
23
|
+
|
24
|
+
changed = pinsets.find_index.with_index { |pinset, idx| @pinsets[idx] != pinset }
|
25
|
+
return false unless changed
|
26
|
+
|
27
|
+
# @todo Fix this map
|
28
|
+
@fqns_pins_map = nil
|
29
|
+
return catalog(pinsets) if changed == 0
|
30
|
+
|
31
|
+
pinsets[changed..].each_with_index do |pins, idx|
|
32
|
+
@pinsets[changed + idx] = pins
|
33
|
+
@indexes[changed + idx] = if pins.empty?
|
34
|
+
@indexes[changed + idx - 1]
|
35
|
+
else
|
36
|
+
@indexes[changed + idx - 1].merge(pins)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
true
|
40
|
+
end
|
9
41
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
42
|
+
def to_s
|
43
|
+
self.class.to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
def inspect
|
47
|
+
to_s
|
14
48
|
end
|
15
49
|
|
16
50
|
# @param fqns [String]
|
@@ -35,6 +69,7 @@ module Solargraph
|
|
35
69
|
# @param fqns [String]
|
36
70
|
# @return [String, nil]
|
37
71
|
def get_superclass fqns
|
72
|
+
raise "Do not prefix fully qualified namespaces with '::' - #{fqns.inspect}" if fqns.start_with?('::')
|
38
73
|
return superclass_references[fqns].first if superclass_references.key?(fqns)
|
39
74
|
return 'Object' if fqns != 'BasicObject' && namespace_exists?(fqns)
|
40
75
|
return 'Object' if fqns == 'Boolean'
|
@@ -62,11 +97,7 @@ module Solargraph
|
|
62
97
|
# @param path [String]
|
63
98
|
# @return [Array<Solargraph::Pin::Base>]
|
64
99
|
def get_path_pins path
|
65
|
-
path_pin_hash[path]
|
66
|
-
end
|
67
|
-
|
68
|
-
def cacheable_pins
|
69
|
-
@cacheable_pins ||= pins_by_class(Pin::Namespace) + pins_by_class(Pin::Constant) + pins_by_class(Pin::Method) + pins_by_class(Pin::Reference)
|
100
|
+
index.path_pin_hash[path]
|
70
101
|
end
|
71
102
|
|
72
103
|
# @param fqns [String]
|
@@ -97,10 +128,10 @@ module Solargraph
|
|
97
128
|
|
98
129
|
# @return [Set<String>]
|
99
130
|
def namespaces
|
100
|
-
|
131
|
+
index.namespaces
|
101
132
|
end
|
102
133
|
|
103
|
-
# @return [
|
134
|
+
# @return [Enumerable<Solargraph::Pin::Namespace>]
|
104
135
|
def namespace_pins
|
105
136
|
pins_by_class(Solargraph::Pin::Namespace)
|
106
137
|
end
|
@@ -139,18 +170,11 @@ module Solargraph
|
|
139
170
|
pins_by_class(Pin::Block)
|
140
171
|
end
|
141
172
|
|
142
|
-
def inspect
|
143
|
-
# Avoid insane dumps in specs
|
144
|
-
to_s
|
145
|
-
end
|
146
|
-
|
147
173
|
# @generic T
|
148
|
-
# @param klass [Class<T
|
149
|
-
# @return [
|
174
|
+
# @param klass [Class<generic<T>>]
|
175
|
+
# @return [Set<generic<T>>]
|
150
176
|
def pins_by_class klass
|
151
|
-
|
152
|
-
s = Set.new
|
153
|
-
@pin_select_cache[klass] ||= @pin_class_hash.each_with_object(s) { |(key, o), n| n.merge(o) if key <= klass }
|
177
|
+
index.pins_by_class klass
|
154
178
|
end
|
155
179
|
|
156
180
|
# @param fqns [String]
|
@@ -170,6 +194,23 @@ module Solargraph
|
|
170
194
|
|
171
195
|
private
|
172
196
|
|
197
|
+
def index
|
198
|
+
@indexes.last
|
199
|
+
end
|
200
|
+
|
201
|
+
def catalog pinsets
|
202
|
+
@pinsets = pinsets
|
203
|
+
@indexes = []
|
204
|
+
pinsets.each do |pins|
|
205
|
+
if @indexes.last && pins.empty?
|
206
|
+
@indexes.push @indexes.last
|
207
|
+
else
|
208
|
+
@indexes.push(@indexes.last&.merge(pins) || Solargraph::ApiMap::Index.new(pins))
|
209
|
+
end
|
210
|
+
end
|
211
|
+
true
|
212
|
+
end
|
213
|
+
|
173
214
|
# @return [Hash{::Array(String, String) => ::Array<Pin::Namespace>}]
|
174
215
|
def fqns_pins_map
|
175
216
|
@fqns_pins_map ||= Hash.new do |h, (base, name)|
|
@@ -180,129 +221,39 @@ module Solargraph
|
|
180
221
|
|
181
222
|
# @return [Enumerable<Solargraph::Pin::Symbol>]
|
182
223
|
def symbols
|
183
|
-
pins_by_class(Pin::Symbol)
|
224
|
+
index.pins_by_class(Pin::Symbol)
|
184
225
|
end
|
185
226
|
|
186
227
|
# @return [Hash{String => Array<String>}]
|
187
228
|
def superclass_references
|
188
|
-
|
229
|
+
index.superclass_references
|
189
230
|
end
|
190
231
|
|
191
232
|
# @return [Hash{String => Array<String>}]
|
192
233
|
def include_references
|
193
|
-
|
234
|
+
index.include_references
|
194
235
|
end
|
195
236
|
|
196
237
|
# @return [Hash{String => Array<String>}]
|
197
238
|
def prepend_references
|
198
|
-
|
239
|
+
index.prepend_references
|
199
240
|
end
|
200
241
|
|
201
242
|
# @return [Hash{String => Array<String>}]
|
202
243
|
def extend_references
|
203
|
-
|
244
|
+
index.extend_references
|
204
245
|
end
|
205
246
|
|
206
247
|
# @param name [String]
|
207
248
|
# @return [Enumerable<Solargraph::Pin::Base>]
|
208
249
|
def namespace_children name
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
# @return [Hash{String => Enumerable<Pin::Base>}
|
213
|
-
def namespace_map
|
214
|
-
@namespace_map ||= {}
|
250
|
+
return [] unless index.namespace_hash.key?(name)
|
251
|
+
index.namespace_hash[name]
|
215
252
|
end
|
216
253
|
|
217
254
|
# @return [Enumerable<Pin::InstanceVariable>]
|
218
255
|
def all_instance_variables
|
219
|
-
pins_by_class(Pin::InstanceVariable)
|
220
|
-
end
|
221
|
-
|
222
|
-
# @return [Hash{String => Array<Pin::Base>}]
|
223
|
-
def path_pin_hash
|
224
|
-
@path_pin_hash ||= {}
|
225
|
-
end
|
226
|
-
|
227
|
-
# Add references to a map
|
228
|
-
#
|
229
|
-
# @param h [Hash{String => Pin:Base}]
|
230
|
-
# @param reference_pin [Pin::Reference]
|
231
|
-
#
|
232
|
-
# @return [void]
|
233
|
-
def store_parametric_reference(h, reference_pin)
|
234
|
-
referenced_ns = reference_pin.name
|
235
|
-
referenced_tag_params = reference_pin.generic_values
|
236
|
-
referenced_tag = referenced_ns +
|
237
|
-
if referenced_tag_params && referenced_tag_params.length > 0
|
238
|
-
"<" + referenced_tag_params.join(', ') + ">"
|
239
|
-
else
|
240
|
-
''
|
241
|
-
end
|
242
|
-
referencing_ns = reference_pin.namespace
|
243
|
-
h[referencing_ns] ||= []
|
244
|
-
h[referencing_ns].push referenced_tag
|
245
|
-
end
|
246
|
-
|
247
|
-
# @return [void]
|
248
|
-
def index
|
249
|
-
set = pins.to_set
|
250
|
-
@pin_class_hash = set.classify(&:class).transform_values(&:to_a)
|
251
|
-
# @type [Hash{Class => ::Array<Solargraph::Pin::Base>}]
|
252
|
-
@pin_select_cache = {}
|
253
|
-
@namespace_map = set.classify(&:namespace)
|
254
|
-
@path_pin_hash = set.classify(&:path)
|
255
|
-
@namespaces = @path_pin_hash.keys.compact.to_set
|
256
|
-
pins_by_class(Pin::Reference::Include).each do |pin|
|
257
|
-
store_parametric_reference(include_references, pin)
|
258
|
-
end
|
259
|
-
# @todo move the rest of these reference pins over to use
|
260
|
-
# generic types, adding rbs_map/conversions.rb code to
|
261
|
-
# populate type parameters and adding related specs ensuring
|
262
|
-
# the generics get resolved, along with any api_map.rb
|
263
|
-
# changes needed in
|
264
|
-
pins_by_class(Pin::Reference::Prepend).each do |pin|
|
265
|
-
prepend_references[pin.namespace] ||= []
|
266
|
-
prepend_references[pin.namespace].push pin.name
|
267
|
-
end
|
268
|
-
pins_by_class(Pin::Reference::Extend).each do |pin|
|
269
|
-
extend_references[pin.namespace] ||= []
|
270
|
-
extend_references[pin.namespace].push pin.name
|
271
|
-
end
|
272
|
-
pins_by_class(Pin::Reference::Superclass).each do |pin|
|
273
|
-
superclass_references[pin.namespace] ||= []
|
274
|
-
superclass_references[pin.namespace].push pin.name
|
275
|
-
end
|
276
|
-
pins_by_class(Pin::Reference::Override).each do |ovr|
|
277
|
-
pin = get_path_pins(ovr.name).first
|
278
|
-
next if pin.nil?
|
279
|
-
new_pin = if pin.path.end_with?('#initialize')
|
280
|
-
get_path_pins(pin.path.sub(/#initialize/, '.new')).first
|
281
|
-
end
|
282
|
-
(ovr.tags.map(&:tag_name) + ovr.delete).uniq.each do |tag|
|
283
|
-
pin.docstring.delete_tags tag.to_sym
|
284
|
-
new_pin.docstring.delete_tags tag.to_sym if new_pin
|
285
|
-
end
|
286
|
-
ovr.tags.each do |tag|
|
287
|
-
pin.docstring.add_tag(tag)
|
288
|
-
redefine_return_type pin, tag
|
289
|
-
if new_pin
|
290
|
-
new_pin.docstring.add_tag(tag)
|
291
|
-
redefine_return_type new_pin, tag
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
end
|
296
|
-
|
297
|
-
# @param pin [Pin::Base]
|
298
|
-
# @param tag [String]
|
299
|
-
# @return [void]
|
300
|
-
def redefine_return_type pin, tag
|
301
|
-
return unless pin && tag.tag_name == 'return'
|
302
|
-
pin.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
303
|
-
pin.signatures.each do |sig|
|
304
|
-
sig.instance_variable_set(:@return_type, ComplexType.try_parse(tag.type))
|
305
|
-
end
|
256
|
+
index.pins_by_class(Pin::InstanceVariable)
|
306
257
|
end
|
307
258
|
end
|
308
259
|
end
|