solargraph 0.29.4 → 0.29.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/lib/solargraph/api_map.rb +5 -2
- data/lib/solargraph/api_map/source_to_yard.rb +32 -29
- data/lib/solargraph/api_map/store.rb +4 -6
- data/lib/solargraph/complex_type/type_methods.rb +5 -1
- data/lib/solargraph/diagnostics/type_not_defined.rb +1 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +64 -32
- data/lib/solargraph/library.rb +28 -28
- data/lib/solargraph/pin.rb +1 -0
- data/lib/solargraph/pin/attribute.rb +1 -31
- data/lib/solargraph/pin/base.rb +38 -17
- data/lib/solargraph/pin/base_method.rb +64 -0
- data/lib/solargraph/pin/base_variable.rb +2 -4
- data/lib/solargraph/pin/block.rb +1 -3
- data/lib/solargraph/pin/block_parameter.rb +4 -3
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/localized.rb +2 -1
- data/lib/solargraph/pin/method.rb +24 -59
- data/lib/solargraph/pin/namespace.rb +1 -2
- data/lib/solargraph/range.rb +4 -2
- data/lib/solargraph/source.rb +18 -0
- data/lib/solargraph/source/chain.rb +5 -2
- data/lib/solargraph/source/chain/call.rb +3 -1
- data/lib/solargraph/source/change.rb +2 -2
- data/lib/solargraph/source/node_chainer.rb +2 -0
- data/lib/solargraph/source/node_methods.rb +15 -0
- data/lib/solargraph/source/source_chainer.rb +0 -22
- data/lib/solargraph/source_map.rb +11 -3
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace.rb +3 -3
- metadata +10 -9
@@ -66,9 +66,10 @@ module Solargraph
|
|
66
66
|
type = ComplexType::UNDEFINED
|
67
67
|
pins = define(api_map, name_pin, locals)
|
68
68
|
pins.each do |pin|
|
69
|
-
type = pin.
|
69
|
+
type = pin.typify(api_map)
|
70
70
|
break unless type.undefined?
|
71
71
|
end
|
72
|
+
type = pins.first.probe(api_map) unless type.defined? || pins.empty?
|
72
73
|
@@inference_stack.pop
|
73
74
|
type
|
74
75
|
end
|
@@ -107,9 +108,11 @@ module Solargraph
|
|
107
108
|
def infer_first_defined pins, api_map
|
108
109
|
type = ComplexType::UNDEFINED
|
109
110
|
pins.each do |pin|
|
110
|
-
type = pin.infer(api_map)
|
111
|
+
# type = pin.infer(api_map)
|
112
|
+
type = pin.typify(api_map)
|
111
113
|
break unless type.undefined?
|
112
114
|
end
|
115
|
+
type = pins.first.probe(api_map) unless type.defined? || pins.empty?
|
113
116
|
type
|
114
117
|
end
|
115
118
|
end
|
@@ -55,7 +55,9 @@ module Solargraph
|
|
55
55
|
next result unless result.return_type.undefined?
|
56
56
|
end
|
57
57
|
next p if p.kind == Pin::METHOD || p.kind == Pin::ATTRIBUTE || p.kind == Pin::NAMESPACE
|
58
|
-
type = p.infer(api_map)
|
58
|
+
# type = p.infer(api_map)
|
59
|
+
type = p.typify(api_map)
|
60
|
+
type = p.probe(api_map) if type.undefined?
|
59
61
|
next p if p.return_complex_type == type
|
60
62
|
Pin::ProxyType.new(p.location, nil, p.name, type)
|
61
63
|
end
|
@@ -57,9 +57,9 @@ module Solargraph
|
|
57
57
|
else
|
58
58
|
result = commit text, fixed
|
59
59
|
off = Position.to_offset(text, range.start)
|
60
|
-
match = result[0
|
60
|
+
match = result[0, off].match(/[\.:]+\z/)
|
61
61
|
if match
|
62
|
-
result = result[0
|
62
|
+
result = result[0, off].sub(/#{match[0]}\z/, ' ' * match[0].length) + result[off..-1]
|
63
63
|
end
|
64
64
|
result
|
65
65
|
end
|
@@ -80,6 +80,8 @@ module Solargraph
|
|
80
80
|
result.push Chain::ClassVariable.new(n.children[0].to_s)
|
81
81
|
elsif [:gvar, :gvasgn].include?(n.type)
|
82
82
|
result.push Chain::GlobalVariable.new(n.children[0].to_s)
|
83
|
+
elsif n.type == :or_asgn
|
84
|
+
result.concat generate_links n.children[1]
|
83
85
|
elsif [:class, :module, :def, :defs].include?(n.type)
|
84
86
|
# @todo Undefined or what?
|
85
87
|
result.push Chain::UNDEFINED_CALL
|
@@ -3,11 +3,13 @@ module Solargraph
|
|
3
3
|
module NodeMethods
|
4
4
|
module_function
|
5
5
|
|
6
|
+
# @param node [Parser::AST::Node]
|
6
7
|
# @return [String]
|
7
8
|
def unpack_name(node)
|
8
9
|
pack_name(node).join("::")
|
9
10
|
end
|
10
11
|
|
12
|
+
# @param node [Parser::AST::Node]
|
11
13
|
# @return [Array<String>]
|
12
14
|
def pack_name(node)
|
13
15
|
parts = []
|
@@ -27,6 +29,7 @@ module Solargraph
|
|
27
29
|
parts
|
28
30
|
end
|
29
31
|
|
32
|
+
# @param node [Parser::AST::Node]
|
30
33
|
# @return [String]
|
31
34
|
def const_from node
|
32
35
|
if node.kind_of?(AST::Node) and node.type == :const
|
@@ -45,6 +48,7 @@ module Solargraph
|
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
51
|
+
# @param node [Parser::AST::Node]
|
48
52
|
# @return [String]
|
49
53
|
def infer_literal_node_type node
|
50
54
|
return nil unless node.kind_of?(AST::Node)
|
@@ -73,6 +77,7 @@ module Solargraph
|
|
73
77
|
# The result should be a string in the form of a method path, e.g.,
|
74
78
|
# String.new or variable.method.
|
75
79
|
#
|
80
|
+
# @param node [Parser::AST::Node]
|
76
81
|
# @return [String]
|
77
82
|
def resolve_node_signature node
|
78
83
|
result = drill_signature node, ''
|
@@ -80,10 +85,14 @@ module Solargraph
|
|
80
85
|
result
|
81
86
|
end
|
82
87
|
|
88
|
+
# @param node [Parser::AST::Node]
|
89
|
+
# @return [Position]
|
83
90
|
def get_node_start_position(node)
|
84
91
|
Position.new(node.loc.line, node.loc.column)
|
85
92
|
end
|
86
93
|
|
94
|
+
# @param node [Parser::AST::Node]
|
95
|
+
# @return [Position]
|
87
96
|
def get_node_end_position(node)
|
88
97
|
Position.new(node.loc.last_line, node.loc.last_column)
|
89
98
|
end
|
@@ -135,6 +144,8 @@ module Solargraph
|
|
135
144
|
REDUCEABLE = [:begin, :kwbegin]
|
136
145
|
SKIPPABLE = [:def, :defs, :class, :sclass, :module]
|
137
146
|
|
147
|
+
# @param node [Parser::AST::Node]
|
148
|
+
# @return [Array<Parser::AST::Node>]
|
138
149
|
def get_return_nodes node
|
139
150
|
return [] unless node.is_a?(Parser::AST::Node)
|
140
151
|
result = []
|
@@ -142,6 +153,8 @@ module Solargraph
|
|
142
153
|
result.concat get_return_nodes_from_children(node)
|
143
154
|
elsif CONDITIONAL.include?(node.type)
|
144
155
|
result.concat reduce_to_value_nodes(node.children[1..-1])
|
156
|
+
elsif node.type == :and || node.type == :or
|
157
|
+
result.concat reduce_to_value_nodes(node.children)
|
145
158
|
elsif node.type == :return
|
146
159
|
result.concat reduce_to_value_nodes([node.children[0]])
|
147
160
|
else
|
@@ -197,6 +210,8 @@ module Solargraph
|
|
197
210
|
result.concat reduce_to_value_nodes(node.children[1..-1])
|
198
211
|
elsif node.type == :return
|
199
212
|
result.concat get_return_nodes(node.children[0])
|
213
|
+
elsif node.type == :and || node.type == :or
|
214
|
+
result.concat reduce_to_value_nodes(node.children)
|
200
215
|
else
|
201
216
|
result.push node
|
202
217
|
end
|
@@ -31,7 +31,6 @@ module Solargraph
|
|
31
31
|
# @return [Source::Chain]
|
32
32
|
def chain
|
33
33
|
return Chain.new([Chain::Literal.new('Symbol')]) if phrase.start_with?(':') && !phrase.start_with?('::')
|
34
|
-
# return Chain.new([Chain::UNDEFINED_CALL]) unless infer_literal_node_type(source.node_at(position.line, position.column)).nil?
|
35
34
|
begin
|
36
35
|
return Chain.new([]) if phrase.end_with?('..')
|
37
36
|
if !source.repaired? && source.parsed?
|
@@ -170,27 +169,6 @@ module Solargraph
|
|
170
169
|
end
|
171
170
|
index -= 1
|
172
171
|
end
|
173
|
-
# @todo Smelly exceptional case for integer literals
|
174
|
-
# match = signature.match(/^[0-9]+/)
|
175
|
-
# if match
|
176
|
-
# index += match[0].length
|
177
|
-
# signature = signature[match[0].length..-1].to_s
|
178
|
-
# @base_literal = 'Integer'
|
179
|
-
# # @todo Smelly exceptional case for array literals
|
180
|
-
# elsif signature.start_with?('.[]')
|
181
|
-
# index += 2
|
182
|
-
# signature = signature[3..-1].to_s
|
183
|
-
# @base_literal = 'Array'
|
184
|
-
# elsif signature.start_with?('.')
|
185
|
-
# pos = Position.from_offset(@source.code, index)
|
186
|
-
# node = @source.node_at(pos.line, pos.character)
|
187
|
-
# lit = infer_literal_node_type(node)
|
188
|
-
# unless lit.nil?
|
189
|
-
# signature = signature[1..-1].to_s
|
190
|
-
# index += 1
|
191
|
-
# @base_literal = lit
|
192
|
-
# end
|
193
|
-
# end
|
194
172
|
[index + 1, signature]
|
195
173
|
end
|
196
174
|
end
|
@@ -42,15 +42,17 @@ module Solargraph
|
|
42
42
|
@requires ||= pins.select{|p| p.kind == Pin::REQUIRE_REFERENCE}
|
43
43
|
end
|
44
44
|
|
45
|
-
# @param position [Position]
|
45
|
+
# @param position [Position, Array(Integer, Integer)]
|
46
46
|
# @return [Boolean]
|
47
47
|
def string_at? position
|
48
|
+
position = Position.normalize(position)
|
48
49
|
@source.string_at?(position)
|
49
50
|
end
|
50
51
|
|
51
|
-
# @param position [Position]
|
52
|
+
# @param position [Position, Array(Integer, Integer)]
|
52
53
|
# @return [Boolean]
|
53
54
|
def comment_at? position
|
55
|
+
position = Position.normalize(position)
|
54
56
|
@source.comment_at?(position)
|
55
57
|
end
|
56
58
|
|
@@ -73,6 +75,8 @@ module Solargraph
|
|
73
75
|
Source::Cursor.new(source, position)
|
74
76
|
end
|
75
77
|
|
78
|
+
# @param path [String]
|
79
|
+
# @return [Pin::Base]
|
76
80
|
def first_pin path
|
77
81
|
pins.select { |p| p.path == path }.first
|
78
82
|
end
|
@@ -93,7 +97,7 @@ module Solargraph
|
|
93
97
|
end
|
94
98
|
|
95
99
|
# @param other_map [SourceMap]
|
96
|
-
# @return Boolean
|
100
|
+
# @return [Boolean]
|
97
101
|
def try_merge! other_map
|
98
102
|
return false if pins.length != other_map.pins.length || locals.length != other_map.locals.length || requires.map(&:name).uniq.sort != other_map.requires.map(&:name).uniq.sort
|
99
103
|
pins.each_index do |i|
|
@@ -138,6 +142,10 @@ module Solargraph
|
|
138
142
|
|
139
143
|
private
|
140
144
|
|
145
|
+
# @param line [Integer]
|
146
|
+
# @param character [Integer]
|
147
|
+
# @param *kinds [Array<Symbol>]
|
148
|
+
# @return [Pin::Base]
|
141
149
|
def _locate_pin line, character, *kinds
|
142
150
|
position = Position.new(line, character)
|
143
151
|
found = nil
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/workspace.rb
CHANGED
@@ -28,7 +28,7 @@ module Solargraph
|
|
28
28
|
# @param source [Solargraph::Source]
|
29
29
|
# @return [Boolean] True if the source was added to the workspace
|
30
30
|
def merge source
|
31
|
-
unless source_hash.has_key?(source.filename)
|
31
|
+
unless directory == '*' || source_hash.has_key?(source.filename)
|
32
32
|
# Reload the config to determine if a new source should be included
|
33
33
|
@config = Solargraph::Workspace::Config.new(directory)
|
34
34
|
return false unless config.calculated.include?(source.filename)
|
@@ -42,7 +42,7 @@ module Solargraph
|
|
42
42
|
# @param filename [String]
|
43
43
|
# @return [Boolean]
|
44
44
|
def would_merge? filename
|
45
|
-
return true if source_hash.include?(filename)
|
45
|
+
return true if directory == '*' || source_hash.include?(filename)
|
46
46
|
@config = Solargraph::Workspace::Config.new(directory)
|
47
47
|
config.calculated.include?(filename)
|
48
48
|
end
|
@@ -130,7 +130,7 @@ module Solargraph
|
|
130
130
|
|
131
131
|
def load_sources
|
132
132
|
source_hash.clear
|
133
|
-
unless directory.empty?
|
133
|
+
unless directory.empty? || directory == '*'
|
134
134
|
size = config.calculated.length
|
135
135
|
raise WorkspaceTooLargeError, "The workspace is too large to index (#{size} files, #{config.max_files} max)" if config.max_files > 0 and size > config.max_files
|
136
136
|
config.calculated.each do |filename|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solargraph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.29.
|
4
|
+
version: 0.29.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -178,22 +178,22 @@ dependencies:
|
|
178
178
|
name: rspec
|
179
179
|
requirement: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
181
|
-
- - "~>"
|
182
|
-
- !ruby/object:Gem::Version
|
183
|
-
version: '3.5'
|
184
181
|
- - ">="
|
185
182
|
- !ruby/object:Gem::Version
|
186
183
|
version: 3.5.0
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '3.5'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
189
|
version_requirements: !ruby/object:Gem::Requirement
|
190
190
|
requirements:
|
191
|
-
- - "~>"
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '3.5'
|
194
191
|
- - ">="
|
195
192
|
- !ruby/object:Gem::Version
|
196
193
|
version: 3.5.0
|
194
|
+
- - "~>"
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '3.5'
|
197
197
|
- !ruby/object:Gem::Dependency
|
198
198
|
name: simplecov
|
199
199
|
requirement: !ruby/object:Gem::Requirement
|
@@ -296,6 +296,7 @@ files:
|
|
296
296
|
- lib/solargraph/pin.rb
|
297
297
|
- lib/solargraph/pin/attribute.rb
|
298
298
|
- lib/solargraph/pin/base.rb
|
299
|
+
- lib/solargraph/pin/base_method.rb
|
299
300
|
- lib/solargraph/pin/base_variable.rb
|
300
301
|
- lib/solargraph/pin/block.rb
|
301
302
|
- lib/solargraph/pin/block_parameter.rb
|
@@ -411,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
412
|
version: '0'
|
412
413
|
requirements: []
|
413
414
|
rubyforge_project:
|
414
|
-
rubygems_version: 2.7.
|
415
|
+
rubygems_version: 2.7.8
|
415
416
|
signing_key:
|
416
417
|
specification_version: 4
|
417
418
|
summary: Solargraph for Ruby
|