solargraph 0.27.1 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/solargraph.rb +8 -17
- data/lib/solargraph/api_map.rb +4 -3
- data/lib/solargraph/api_map/cache.rb +5 -5
- data/lib/solargraph/api_map/source_to_yard.rb +3 -2
- data/lib/solargraph/api_map/store.rb +25 -13
- data/lib/solargraph/complex_type.rb +3 -0
- data/lib/solargraph/diagnostics/update_errors.rb +21 -1
- data/lib/solargraph/language_server/host.rb +4 -3
- data/lib/solargraph/language_server/message/text_document/rename.rb +1 -1
- data/lib/solargraph/library.rb +12 -4
- data/lib/solargraph/pin.rb +5 -1
- data/lib/solargraph/pin/base.rb +0 -10
- data/lib/solargraph/pin/conversions.rb +1 -1
- data/lib/solargraph/pin/documenting.rb +0 -9
- data/lib/solargraph/pin/duck_method.rb +1 -1
- data/lib/solargraph/pin/keyword.rb +0 -5
- data/lib/solargraph/pin/namespace.rb +3 -16
- data/lib/solargraph/pin/reference.rb +13 -26
- data/lib/solargraph/pin/reference/extend.rb +11 -0
- data/lib/solargraph/pin/reference/include.rb +11 -0
- data/lib/solargraph/pin/reference/require.rb +15 -0
- data/lib/solargraph/pin/reference/superclass.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +0 -4
- data/lib/solargraph/pin/yard_pin/namespace.rb +14 -14
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +0 -4
- data/lib/solargraph/position.rb +7 -0
- data/lib/solargraph/source.rb +7 -28
- data/lib/solargraph/source/chain.rb +0 -1
- data/lib/solargraph/source/chain/call.rb +1 -1
- data/lib/solargraph/source/chain/constant.rb +13 -4
- data/lib/solargraph/source/change.rb +7 -1
- data/lib/solargraph/source/cursor.rb +1 -5
- data/lib/solargraph/source/node_chainer.rb +5 -6
- data/lib/solargraph/source/source_chainer.rb +14 -12
- data/lib/solargraph/source_map.rb +5 -6
- data/lib/solargraph/source_map/clip.rb +16 -29
- data/lib/solargraph/source_map/mapper.rb +26 -21
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace.rb +1 -2
- data/lib/solargraph/workspace/config.rb +10 -5
- data/lib/solargraph/yard_map.rb +3 -1
- metadata +6 -3
- data/lib/solargraph/source/chain/definition.rb +0 -20
@@ -25,8 +25,6 @@ module Solargraph
|
|
25
25
|
end
|
26
26
|
@node_comments = associate_comments(node, comments)
|
27
27
|
@pins = []
|
28
|
-
@requires = []
|
29
|
-
@symbols = []
|
30
28
|
@locals = []
|
31
29
|
@strings = []
|
32
30
|
|
@@ -34,17 +32,17 @@ module Solargraph
|
|
34
32
|
root = AST::Node.new(:source, [filename])
|
35
33
|
root = root.append node
|
36
34
|
# @todo Is the root namespace a class or a module? Assuming class for now.
|
37
|
-
@pins.push Pin::Namespace.new(get_node_location(nil), '', '', nil, :class, :public
|
35
|
+
@pins.push Pin::Namespace.new(get_node_location(nil), '', '', nil, :class, :public)
|
38
36
|
process root
|
39
37
|
process_comment_directives
|
40
|
-
[@pins, @locals
|
38
|
+
[@pins, @locals]
|
41
39
|
end
|
42
40
|
|
43
41
|
def unmap filename, code
|
44
42
|
s = Position.new(0, 0)
|
45
43
|
e = Position.from_offset(code, code.length)
|
46
44
|
location = Location.new(filename, Range.new(s, e))
|
47
|
-
[[Pin::Namespace.new(location, '', '', '', :class, :public
|
45
|
+
[[Pin::Namespace.new(location, '', '', '', :class, :public)], []]
|
48
46
|
end
|
49
47
|
|
50
48
|
class << self
|
@@ -99,7 +97,8 @@ module Solargraph
|
|
99
97
|
if node.type == :class and !node.children[1].nil?
|
100
98
|
sc = unpack_name(node.children[1])
|
101
99
|
end
|
102
|
-
pins.push Solargraph::Pin::Namespace.new(get_node_location(node), tree[0..-2].join('::') || '', pack_name(node.children[0]).last.to_s, comments_for(node), node.type, visibility
|
100
|
+
pins.push Solargraph::Pin::Namespace.new(get_node_location(node), tree[0..-2].join('::') || '', pack_name(node.children[0]).last.to_s, comments_for(node), node.type, visibility)
|
101
|
+
pins.push Pin::Reference::Superclass.new(pins.last.location, pins.last.path, sc) unless sc.nil?
|
103
102
|
end
|
104
103
|
file = filename
|
105
104
|
node.children.each do |c|
|
@@ -131,10 +130,10 @@ module Solargraph
|
|
131
130
|
ora = find_parent(stack, :or_asgn)
|
132
131
|
unless ora.nil?
|
133
132
|
u = c.updated(:cvasgn, c.children + ora.children[1..-1], nil)
|
134
|
-
pins.push Solargraph::Pin::ClassVariable.new(get_node_location(u), fqn || '', c.children[0].to_s, comments_for(u), u.children[1], infer_literal_node_type(u.children[1]), context)
|
133
|
+
pins.push Solargraph::Pin::ClassVariable.new(get_node_location(u), fqn || '', c.children[0].to_s, comments_for(u), u.children[1], infer_literal_node_type(u.children[1]), context.context)
|
135
134
|
end
|
136
135
|
else
|
137
|
-
pins.push Solargraph::Pin::ClassVariable.new(get_node_location(c), fqn || '', c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), context)
|
136
|
+
pins.push Solargraph::Pin::ClassVariable.new(get_node_location(c), fqn || '', c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), context.context)
|
138
137
|
end
|
139
138
|
elsif c.type == :lvasgn
|
140
139
|
here = get_node_start_position(c)
|
@@ -145,27 +144,27 @@ module Solargraph
|
|
145
144
|
ora = find_parent(stack, :or_asgn)
|
146
145
|
unless ora.nil?
|
147
146
|
u = c.updated(:lvasgn, c.children + ora.children[1..-1], nil)
|
148
|
-
@locals.push Solargraph::Pin::LocalVariable.new(get_node_location(u), fqn, u.children[0].to_s, comments_for(ora), u.children[1], infer_literal_node_type(c.children[1]), context, block, presence)
|
147
|
+
@locals.push Solargraph::Pin::LocalVariable.new(get_node_location(u), fqn, u.children[0].to_s, comments_for(ora), u.children[1], infer_literal_node_type(c.children[1]), context.context, block, presence)
|
149
148
|
end
|
150
149
|
else
|
151
|
-
@locals.push Solargraph::Pin::LocalVariable.new(get_node_location(c), fqn, c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), context, block, presence)
|
150
|
+
@locals.push Solargraph::Pin::LocalVariable.new(get_node_location(c), fqn, c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), context.context, block, presence)
|
152
151
|
end
|
153
152
|
elsif c.type == :gvasgn
|
154
153
|
if c.children[1].nil?
|
155
154
|
ora = find_parent(stack, :or_asgn)
|
156
155
|
unless ora.nil?
|
157
156
|
u = c.updated(:gvasgn, c.children + ora.children[1..-1], nil)
|
158
|
-
pins.push Solargraph::Pin::GlobalVariable.new(get_node_location(c), fqn, u.children[0].to_s, comments_for(c), u.children[1], infer_literal_node_type(c.children[1]), @pins.first)
|
157
|
+
pins.push Solargraph::Pin::GlobalVariable.new(get_node_location(c), fqn, u.children[0].to_s, comments_for(c), u.children[1], infer_literal_node_type(c.children[1]), @pins.first.context)
|
159
158
|
end
|
160
159
|
else
|
161
|
-
pins.push Solargraph::Pin::GlobalVariable.new(get_node_location(c), fqn, c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), @pins.first)
|
160
|
+
pins.push Solargraph::Pin::GlobalVariable.new(get_node_location(c), fqn, c.children[0].to_s, comments_for(c), c.children[1], infer_literal_node_type(c.children[1]), @pins.first.context)
|
162
161
|
end
|
163
162
|
elsif c.type == :sym
|
164
|
-
|
163
|
+
pins.push Solargraph::Pin::Symbol.new(get_node_location(c), ":#{c.children[0]}")
|
165
164
|
elsif c.type == :casgn
|
166
165
|
here = get_node_start_position(c)
|
167
166
|
block = get_block_pin(here)
|
168
|
-
pins.push Solargraph::Pin::Constant.new(get_node_location(c), fqn, c.children[1].to_s, comments_for(c), c.children[2], infer_literal_node_type(c.children[2]), block, :public)
|
167
|
+
pins.push Solargraph::Pin::Constant.new(get_node_location(c), fqn, c.children[1].to_s, comments_for(c), c.children[2], infer_literal_node_type(c.children[2]), block.context, :public)
|
169
168
|
elsif c.type == :def
|
170
169
|
methpin = Solargraph::Pin::Method.new(get_node_location(c), fqn || '', c.children[(c.type == :def ? 0 : 1)].to_s, comments_for(c), scope, visibility, get_method_args(c))
|
171
170
|
if methpin.name == 'initialize' and methpin.scope == :instance
|
@@ -216,7 +215,8 @@ module Solargraph
|
|
216
215
|
if ref.kind == Pin::CONSTANT
|
217
216
|
pins.push ref.class.new(ref.location, ref.namespace, ref.name, ref.comments, ref.signature, ref.return_type, ref.context, :private)
|
218
217
|
else
|
219
|
-
pins.push ref.class.new(ref.location, ref.namespace, ref.name, ref.comments, ref.type, :private, (ref.superclass_reference.nil? ? nil : ref.superclass_reference.name))
|
218
|
+
# pins.push ref.class.new(ref.location, ref.namespace, ref.name, ref.comments, ref.type, :private, (ref.superclass_reference.nil? ? nil : ref.superclass_reference.name))
|
219
|
+
pins.push ref.class.new(ref.location, ref.namespace, ref.name, ref.comments, ref.type, :private)
|
220
220
|
end
|
221
221
|
end
|
222
222
|
end
|
@@ -253,8 +253,9 @@ module Solargraph
|
|
253
253
|
c.children[2..-1].each do |i|
|
254
254
|
nspin = @pins.select{|pin| pin.kind == Pin::NAMESPACE and pin.path == fqn}.last
|
255
255
|
unless nspin.nil?
|
256
|
-
iref = Pin::Reference.new(get_node_location(c), nspin.path, unpack_name(i))
|
257
|
-
nspin.include_references.push(iref)
|
256
|
+
# iref = Pin::Reference.new(get_node_location(c), nspin.path, unpack_name(i))
|
257
|
+
# nspin.include_references.push(iref)
|
258
|
+
pins.push Pin::Reference::Include.new(get_node_location(c), nspin.path, unpack_name(i))
|
258
259
|
end
|
259
260
|
end
|
260
261
|
end
|
@@ -267,11 +268,14 @@ module Solargraph
|
|
267
268
|
unless nspin.nil?
|
268
269
|
ref = nil
|
269
270
|
if i.type == :self
|
270
|
-
ref = Pin::Reference.new(get_node_location(c), nspin.path, nspin.path)
|
271
|
+
# ref = Pin::Reference.new(get_node_location(c), nspin.path, nspin.path)
|
272
|
+
ref = Pin::Reference::Extend.new(get_node_location(c), nspin.path, nspin.path)
|
271
273
|
elsif i.type == :const
|
272
|
-
ref = Pin::Reference.new(get_node_location(c), nspin.path, unpack_name(i))
|
274
|
+
# ref = Pin::Reference.new(get_node_location(c), nspin.path, unpack_name(i))
|
275
|
+
ref = Pin::Reference::Extend.new(get_node_location(c), nspin.path, unpack_name(i))
|
273
276
|
end
|
274
|
-
nspin.extend_references.push(ref) unless ref.nil?
|
277
|
+
# nspin.extend_references.push(ref) unless ref.nil?
|
278
|
+
pins.push ref unless ref.nil?
|
275
279
|
end
|
276
280
|
end
|
277
281
|
end
|
@@ -289,7 +293,8 @@ module Solargraph
|
|
289
293
|
next
|
290
294
|
elsif c.type == :send and c.children[1] == :require
|
291
295
|
if c.children[2].kind_of?(AST::Node) and c.children[2].type == :str
|
292
|
-
@requires.push Solargraph::Pin::Reference.new(get_node_location(c), fqn, c.children[2].children[0].to_s)
|
296
|
+
# @requires.push Solargraph::Pin::Reference.new(get_node_location(c), fqn, c.children[2].children[0].to_s)
|
297
|
+
pins.push Pin::Reference::Require.new(get_node_location(c), c.children[2].children[0].to_s)
|
293
298
|
end
|
294
299
|
elsif c.type == :args
|
295
300
|
if @node_stack.first.type == :block
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/workspace.rb
CHANGED
@@ -130,8 +130,7 @@ module Solargraph
|
|
130
130
|
source_hash.clear
|
131
131
|
unless directory.nil?
|
132
132
|
size = config.calculated.length
|
133
|
-
raise WorkspaceTooLargeError
|
134
|
-
|
133
|
+
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
|
135
134
|
config.calculated.each do |filename|
|
136
135
|
source_hash[filename] = Solargraph::Source.load(filename)
|
137
136
|
end
|
@@ -2,6 +2,8 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Solargraph
|
4
4
|
class Workspace
|
5
|
+
# Configuration data for a workspace.
|
6
|
+
#
|
5
7
|
class Config
|
6
8
|
# The maximum number of files that can be added to a workspace.
|
7
9
|
# The workspace's .solargraph.yml can override this value.
|
@@ -21,10 +23,9 @@ module Solargraph
|
|
21
23
|
unless @workspace.nil?
|
22
24
|
sfile = File.join(@workspace, '.solargraph.yml')
|
23
25
|
if File.file?(sfile)
|
24
|
-
@raw_data = YAML.
|
25
|
-
|
26
|
-
|
27
|
-
exclude_globs = conf['exclude'] || []
|
26
|
+
@raw_data = YAML.safe_load(File.read(sfile))
|
27
|
+
include_globs = @raw_data['include'] || include_globs
|
28
|
+
exclude_globs = @raw_data['exclude'] || []
|
28
29
|
end
|
29
30
|
end
|
30
31
|
@raw_data ||= {}
|
@@ -34,6 +35,7 @@ module Solargraph
|
|
34
35
|
@raw_data['domains'] ||= []
|
35
36
|
@raw_data['reporters'] ||= %w[rubocop require_not_found]
|
36
37
|
@raw_data['plugins'] ||= []
|
38
|
+
@raw_data['require_paths'] ||= []
|
37
39
|
@raw_data['max_files'] ||= MAX_FILES
|
38
40
|
included
|
39
41
|
excluded
|
@@ -78,6 +80,9 @@ module Solargraph
|
|
78
80
|
raw_data['require']
|
79
81
|
end
|
80
82
|
|
83
|
+
# An array of load paths for required paths.
|
84
|
+
#
|
85
|
+
# @return [Array<String>]
|
81
86
|
def require_paths
|
82
87
|
raw_data['require_paths'] || []
|
83
88
|
end
|
@@ -146,7 +151,7 @@ module Solargraph
|
|
146
151
|
# @param glob [String]
|
147
152
|
# @return [Boolean]
|
148
153
|
def glob_is_directory? glob
|
149
|
-
File.directory?(glob)
|
154
|
+
File.directory?(glob) || File.directory?(glob_to_directory(glob))
|
150
155
|
end
|
151
156
|
|
152
157
|
# Translate a glob to a base directory if applicable
|
data/lib/solargraph/yard_map.rb
CHANGED
@@ -140,8 +140,10 @@ module Solargraph
|
|
140
140
|
pins.clear
|
141
141
|
unresolved_requires.clear
|
142
142
|
stdnames = {}
|
143
|
+
done = []
|
143
144
|
required.each do |r|
|
144
|
-
next if r.nil?
|
145
|
+
next if r.nil? || r.empty? || done.include?(r)
|
146
|
+
done.push r
|
145
147
|
cached = cache.get_path_pins(r)
|
146
148
|
unless cached.nil?
|
147
149
|
pins.concat cached
|
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.
|
4
|
+
version: 0.28.0
|
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-09-
|
11
|
+
date: 2018-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -330,6 +330,10 @@ files:
|
|
330
330
|
- lib/solargraph/pin/plugin/method.rb
|
331
331
|
- lib/solargraph/pin/proxy_type.rb
|
332
332
|
- lib/solargraph/pin/reference.rb
|
333
|
+
- lib/solargraph/pin/reference/extend.rb
|
334
|
+
- lib/solargraph/pin/reference/include.rb
|
335
|
+
- lib/solargraph/pin/reference/require.rb
|
336
|
+
- lib/solargraph/pin/reference/superclass.rb
|
333
337
|
- lib/solargraph/pin/symbol.rb
|
334
338
|
- lib/solargraph/pin/yard_pin.rb
|
335
339
|
- lib/solargraph/pin/yard_pin/constant.rb
|
@@ -350,7 +354,6 @@ files:
|
|
350
354
|
- lib/solargraph/source/chain/call.rb
|
351
355
|
- lib/solargraph/source/chain/class_variable.rb
|
352
356
|
- lib/solargraph/source/chain/constant.rb
|
353
|
-
- lib/solargraph/source/chain/definition.rb
|
354
357
|
- lib/solargraph/source/chain/global_variable.rb
|
355
358
|
- lib/solargraph/source/chain/head.rb
|
356
359
|
- lib/solargraph/source/chain/instance_variable.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Solargraph
|
2
|
-
class Source
|
3
|
-
class Chain
|
4
|
-
class Definition < Link
|
5
|
-
# @param location [Solargraph::Location]
|
6
|
-
def initialize location
|
7
|
-
@location = location
|
8
|
-
end
|
9
|
-
|
10
|
-
# @param api_map [ApiMap]
|
11
|
-
def resolve api_map, name_pin, locals
|
12
|
-
result = api_map.locate_pin(@location)
|
13
|
-
# result = api_map.source_map(@location.filename).locate_named_path_pin(@location.range.start.line, @location.range.start.column)
|
14
|
-
return [] if result.nil?
|
15
|
-
[result]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|