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,212 +1,220 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'yard'
|
|
4
|
-
require 'solargraph/yard_tags'
|
|
5
|
-
|
|
6
|
-
module Solargraph
|
|
7
|
-
# An index of Pins and other ApiMap-related data for a single Source
|
|
8
|
-
# that can be queried.
|
|
9
|
-
#
|
|
10
|
-
class SourceMap
|
|
11
|
-
autoload :Mapper, 'solargraph/source_map/mapper'
|
|
12
|
-
autoload :Clip, 'solargraph/source_map/clip'
|
|
13
|
-
autoload :Completion, 'solargraph/source_map/completion'
|
|
14
|
-
autoload :Data, 'solargraph/source_map/data'
|
|
15
|
-
|
|
16
|
-
# @return [Source]
|
|
17
|
-
attr_reader :source
|
|
18
|
-
|
|
19
|
-
# @return [Array<Pin::Base>]
|
|
20
|
-
def pins
|
|
21
|
-
data.pins
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# @return [Array<Pin::Base>]
|
|
25
|
-
def all_pins
|
|
26
|
-
pins + convention_pins
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# @return [Array<Pin::LocalVariable>]
|
|
30
|
-
def locals
|
|
31
|
-
data.locals
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# @param source [Source]
|
|
35
|
-
def initialize source
|
|
36
|
-
@source = source
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# @
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
# @
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
# @return [
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yard'
|
|
4
|
+
require 'solargraph/yard_tags'
|
|
5
|
+
|
|
6
|
+
module Solargraph
|
|
7
|
+
# An index of Pins and other ApiMap-related data for a single Source
|
|
8
|
+
# that can be queried.
|
|
9
|
+
#
|
|
10
|
+
class SourceMap
|
|
11
|
+
autoload :Mapper, 'solargraph/source_map/mapper'
|
|
12
|
+
autoload :Clip, 'solargraph/source_map/clip'
|
|
13
|
+
autoload :Completion, 'solargraph/source_map/completion'
|
|
14
|
+
autoload :Data, 'solargraph/source_map/data'
|
|
15
|
+
|
|
16
|
+
# @return [Source]
|
|
17
|
+
attr_reader :source
|
|
18
|
+
|
|
19
|
+
# @return [Array<Pin::Base>]
|
|
20
|
+
def pins
|
|
21
|
+
data.pins
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @return [Array<Pin::Base>]
|
|
25
|
+
def all_pins
|
|
26
|
+
pins + convention_pins
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [Array<Pin::LocalVariable>]
|
|
30
|
+
def locals
|
|
31
|
+
data.locals
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @param source [Source]
|
|
35
|
+
def initialize source
|
|
36
|
+
@source = source
|
|
37
|
+
# @type [Array<Pin::Base>, nil]
|
|
38
|
+
@convention_pins = nil
|
|
39
|
+
|
|
40
|
+
conventions_environ.merge Convention.for_local(self) unless filename.nil?
|
|
41
|
+
# FIXME: unmemoizing the document_symbols in case it was called and memoized from any of conventions above
|
|
42
|
+
# this is to ensure that the convention_pins from all conventions are used in the document_symbols.
|
|
43
|
+
# solargraph-rails is known to use this method to get the document symbols. It should probably be removed.
|
|
44
|
+
@document_symbols = nil
|
|
45
|
+
self.convention_pins = conventions_environ.pins
|
|
46
|
+
# @type [Hash{Class<Pin::Base> => Array<Pin::Base>}]
|
|
47
|
+
@pin_select_cache = {}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @generic T
|
|
51
|
+
# @param klass [Class<generic<T>>]
|
|
52
|
+
#
|
|
53
|
+
# @return [Array<generic<T>>]
|
|
54
|
+
def pins_by_class klass
|
|
55
|
+
@pin_select_cache[klass] ||= pin_class_hash.select { |key, _| key <= klass }.values.flatten
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# A hash representing the state of the source map's API.
|
|
59
|
+
#
|
|
60
|
+
# ApiMap#catalog uses this value to determine whether it needs to clear its
|
|
61
|
+
# cache.
|
|
62
|
+
#
|
|
63
|
+
# @return [Integer]
|
|
64
|
+
def api_hash
|
|
65
|
+
@api_hash ||= (pins_by_class(Pin::Constant) + pins_by_class(Pin::Namespace).select { |pin| pin.namespace.to_s > '' } + pins_by_class(Pin::Reference) + pins_by_class(Pin::Method).map(&:node) + locals).hash
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @return [String, nil]
|
|
69
|
+
def filename
|
|
70
|
+
source.filename
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @return [String]
|
|
74
|
+
def code
|
|
75
|
+
source.code
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# @return [Array<Pin::Reference::Require>]
|
|
79
|
+
def requires
|
|
80
|
+
pins_by_class(Pin::Reference::Require)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @return [Environ]
|
|
84
|
+
def conventions_environ
|
|
85
|
+
@conventions_environ ||= Environ.new
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# all pins except Solargraph::Pin::Reference::Reference
|
|
89
|
+
#
|
|
90
|
+
# @return [Array<Pin::Base>]
|
|
91
|
+
def document_symbols
|
|
92
|
+
@document_symbols ||= (pins + convention_pins).select do |pin|
|
|
93
|
+
pin.path && !pin.path.empty?
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# @param query [String]
|
|
98
|
+
# @return [Array<Pin::Base>]
|
|
99
|
+
def query_symbols query
|
|
100
|
+
Pin::Search.new(document_symbols, query).results
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @param position [Position, Array(Integer, Integer)]
|
|
104
|
+
# @return [Source::Cursor]
|
|
105
|
+
def cursor_at position
|
|
106
|
+
Source::Cursor.new(source, position)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @param path [String]
|
|
110
|
+
# @return [Pin::Base]
|
|
111
|
+
def first_pin path
|
|
112
|
+
pins.select { |p| p.path == path }.first
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# @param location [Solargraph::Location]
|
|
116
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
117
|
+
def locate_pins location
|
|
118
|
+
# return nil unless location.start_with?("#{filename}:")
|
|
119
|
+
(pins + locals).select { |pin| pin.location == location }
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @param line [Integer]
|
|
123
|
+
# @param character [Integer]
|
|
124
|
+
# @return [Pin::Method,Pin::Namespace]
|
|
125
|
+
def locate_named_path_pin line, character
|
|
126
|
+
_locate_pin line, character, Pin::Namespace, Pin::Method
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @param line [Integer]
|
|
130
|
+
# @param character [Integer]
|
|
131
|
+
# @return [Pin::Closure]
|
|
132
|
+
def locate_closure_pin line, character
|
|
133
|
+
_locate_pin line, character, Pin::Closure
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# @deprecated Please use locate_closure_pin instead
|
|
137
|
+
alias locate_block_pin locate_closure_pin
|
|
138
|
+
|
|
139
|
+
# @param name [String]
|
|
140
|
+
# @return [Array<Location>]
|
|
141
|
+
def references name
|
|
142
|
+
source.references name
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @param location [Location]
|
|
146
|
+
# @return [Array<Pin::LocalVariable>]
|
|
147
|
+
def locals_at(location)
|
|
148
|
+
return [] if location.filename != filename
|
|
149
|
+
closure = locate_closure_pin(location.range.start.line, location.range.start.character)
|
|
150
|
+
locals.select { |pin| pin.visible_at?(closure, location) }
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
class << self
|
|
154
|
+
# @param filename [String]
|
|
155
|
+
# @return [SourceMap]
|
|
156
|
+
def load filename
|
|
157
|
+
source = Solargraph::Source.load(filename)
|
|
158
|
+
SourceMap.map(source)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# @param code [String]
|
|
162
|
+
# @param filename [String, nil]
|
|
163
|
+
# @return [SourceMap]
|
|
164
|
+
def load_string code, filename = nil
|
|
165
|
+
source = Solargraph::Source.load_string(code, filename)
|
|
166
|
+
SourceMap.map(source)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @deprecated
|
|
170
|
+
# @param source [Source]
|
|
171
|
+
# @return [SourceMap]
|
|
172
|
+
def map source
|
|
173
|
+
new(source)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
private
|
|
178
|
+
|
|
179
|
+
# @return [Array<Pin::Base>]
|
|
180
|
+
attr_writer :convention_pins
|
|
181
|
+
|
|
182
|
+
# @return [Hash{Class<Pin::Base> => Array<Pin::Base>}]
|
|
183
|
+
def pin_class_hash
|
|
184
|
+
# @todo Need to support generic resolution in classify and transform_values
|
|
185
|
+
@pin_class_hash ||= pins.to_set.classify(&:class).transform_values(&:to_a)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# @return [Data]
|
|
189
|
+
def data
|
|
190
|
+
@data ||= Data.new(source)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# @return [Array<Pin::Base>]
|
|
194
|
+
def convention_pins
|
|
195
|
+
@convention_pins || []
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# @generic T
|
|
199
|
+
# @param line [Integer]
|
|
200
|
+
# @param character [Integer]
|
|
201
|
+
# @param klasses [Array<Class<generic<T>>>]
|
|
202
|
+
# @return [generic<T>, nil]
|
|
203
|
+
# @sg-ignore Need better generic inference here
|
|
204
|
+
def _locate_pin line, character, *klasses
|
|
205
|
+
position = Position.new(line, character)
|
|
206
|
+
found = nil
|
|
207
|
+
pins.each do |pin|
|
|
208
|
+
# @todo Attribute pins should not be treated like closures, but
|
|
209
|
+
# there's probably a better way to handle it
|
|
210
|
+
next if pin.is_a?(Pin::Method) && pin.attribute?
|
|
211
|
+
# @sg-ignore Need to add nil check here
|
|
212
|
+
found = pin if (klasses.empty? || klasses.any? { |kls| pin.is_a?(kls) } ) && pin.location.range.contain?(position)
|
|
213
|
+
# @sg-ignore Need to add nil check here
|
|
214
|
+
break if pin.location.range.start.line > line
|
|
215
|
+
end
|
|
216
|
+
# Assuming the root pin is always valid
|
|
217
|
+
found || pins.first
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
@@ -1,32 +1,34 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class TypeChecker
|
|
5
|
-
# A problem reported by TypeChecker.
|
|
6
|
-
#
|
|
7
|
-
class Problem
|
|
8
|
-
# @
|
|
9
|
-
|
|
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
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class TypeChecker
|
|
5
|
+
# A problem reported by TypeChecker.
|
|
6
|
+
#
|
|
7
|
+
class Problem
|
|
8
|
+
# @todo Missed nil violation
|
|
9
|
+
# @return [Solargraph::Location]
|
|
10
|
+
attr_reader :location
|
|
11
|
+
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_reader :message
|
|
14
|
+
|
|
15
|
+
# @todo Missed nil violation
|
|
16
|
+
# @return [Pin::Base]
|
|
17
|
+
attr_reader :pin
|
|
18
|
+
|
|
19
|
+
# @return [String, nil]
|
|
20
|
+
attr_reader :suggestion
|
|
21
|
+
|
|
22
|
+
# @param location [Solargraph::Location, nil]
|
|
23
|
+
# @param message [String]
|
|
24
|
+
# @param pin [Solargraph::Pin::Base, nil]
|
|
25
|
+
# @param suggestion [String, nil]
|
|
26
|
+
def initialize location, message, pin: nil, suggestion: nil
|
|
27
|
+
@location = location
|
|
28
|
+
@message = message
|
|
29
|
+
@pin = pin
|
|
30
|
+
@suggestion = suggestion
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|