solargraph 0.21.1 → 0.22.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 +0 -1
- data/lib/solargraph/api_map.rb +40 -23
- data/lib/solargraph/api_map/completion.rb +3 -0
- data/lib/solargraph/api_map/probe.rb +16 -19
- data/lib/solargraph/api_map/store.rb +6 -2
- data/lib/solargraph/diagnostics/rubocop.rb +6 -0
- data/lib/solargraph/language_server/host.rb +9 -1
- data/lib/solargraph/language_server/message.rb +3 -0
- data/lib/solargraph/language_server/message/extended.rb +1 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +1 -1
- data/lib/solargraph/language_server/message/extended/download_core.rb +25 -0
- data/lib/solargraph/language_server/message/initialize.rb +3 -1
- data/lib/solargraph/language_server/message/text_document.rb +13 -11
- data/lib/solargraph/language_server/message/text_document/definition.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/references.rb +14 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +17 -0
- data/lib/solargraph/language_server/uri_helpers.rb +2 -0
- data/lib/solargraph/library.rb +37 -0
- data/lib/solargraph/live_map.rb +8 -2
- data/lib/solargraph/live_map/cache.rb +7 -0
- data/lib/solargraph/pin.rb +1 -0
- data/lib/solargraph/pin/attribute.rb +5 -1
- data/lib/solargraph/pin/namespace.rb +0 -2
- data/lib/solargraph/pin/proxy_method.rb +31 -0
- data/lib/solargraph/plugin/process.rb +1 -1
- data/lib/solargraph/plugin/runtime.rb +0 -1
- data/lib/solargraph/shell.rb +0 -1
- data/lib/solargraph/source.rb +31 -1
- data/lib/solargraph/source/fragment.rb +12 -15
- data/lib/solargraph/source/location.rb +3 -0
- data/lib/solargraph/source/mapper.rb +20 -10
- data/lib/solargraph/source/node_methods.rb +111 -0
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace.rb +7 -1
- data/lib/solargraph/workspace/config.rb +6 -2
- data/lib/solargraph/yard_map.rb +12 -1
- metadata +25 -7
- data/lib/solargraph/node_methods.rb +0 -101
@@ -0,0 +1,111 @@
|
|
1
|
+
module Solargraph
|
2
|
+
class Source
|
3
|
+
module NodeMethods
|
4
|
+
module_function
|
5
|
+
|
6
|
+
# @return [String]
|
7
|
+
def unpack_name(node)
|
8
|
+
pack_name(node).join("::")
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Array<String>]
|
12
|
+
def pack_name(node)
|
13
|
+
parts = []
|
14
|
+
if node.kind_of?(AST::Node)
|
15
|
+
node.children.each { |n|
|
16
|
+
if n.kind_of?(AST::Node)
|
17
|
+
if n.type == :cbase
|
18
|
+
parts = pack_name(n)
|
19
|
+
else
|
20
|
+
parts += pack_name(n)
|
21
|
+
end
|
22
|
+
else
|
23
|
+
parts.push n unless n.nil?
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
parts
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def const_from node
|
32
|
+
if node.kind_of?(AST::Node) and node.type == :const
|
33
|
+
result = ''
|
34
|
+
unless node.children[0].nil?
|
35
|
+
result = const_from(node.children[0])
|
36
|
+
end
|
37
|
+
if result == ''
|
38
|
+
result = node.children[1].to_s
|
39
|
+
else
|
40
|
+
result = result + '::' + node.children[1].to_s
|
41
|
+
end
|
42
|
+
result
|
43
|
+
else
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [String]
|
49
|
+
def infer_literal_node_type node
|
50
|
+
return nil unless node.kind_of?(AST::Node)
|
51
|
+
if node.type == :str or node.type == :dstr
|
52
|
+
return 'String'
|
53
|
+
elsif node.type == :array
|
54
|
+
return 'Array'
|
55
|
+
elsif node.type == :hash
|
56
|
+
return 'Hash'
|
57
|
+
elsif node.type == :int
|
58
|
+
return 'Integer'
|
59
|
+
elsif node.type == :float
|
60
|
+
return 'Float'
|
61
|
+
elsif node.type == :sym
|
62
|
+
return 'Symbol'
|
63
|
+
# @todo Maybe ignore nils
|
64
|
+
# elsif node.type == :nil
|
65
|
+
# return 'NilClass'
|
66
|
+
end
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
# Get a call signature from a node.
|
71
|
+
# The result should be a string in the form of a method path, e.g.,
|
72
|
+
# String.new or variable.method.
|
73
|
+
#
|
74
|
+
# @return [String]
|
75
|
+
def resolve_node_signature node
|
76
|
+
result = drill_signature node, ''
|
77
|
+
return nil if result.empty?
|
78
|
+
result
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_node_start_position(node)
|
82
|
+
Position.new(node.loc.line - 1, node.loc.column)
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_node_end_position(node)
|
86
|
+
Position.new(node.loc.last_line - 1, node.loc.last_column)
|
87
|
+
end
|
88
|
+
|
89
|
+
def drill_signature node, signature
|
90
|
+
return signature unless node.kind_of?(AST::Node)
|
91
|
+
if node.type == :const or node.type == :cbase
|
92
|
+
unless node.children[0].nil?
|
93
|
+
signature += drill_signature(node.children[0], signature)
|
94
|
+
end
|
95
|
+
signature += '::' unless signature.empty?
|
96
|
+
signature += node.children[1].to_s
|
97
|
+
elsif node.type == :lvar or node.type == :ivar or node.type == :cvar
|
98
|
+
signature += '.' unless signature.empty?
|
99
|
+
signature += node.children[0].to_s
|
100
|
+
elsif node.type == :send
|
101
|
+
unless node.children[0].nil?
|
102
|
+
signature += drill_signature(node.children[0], signature)
|
103
|
+
end
|
104
|
+
signature += '.' unless signature.empty?
|
105
|
+
signature += node.children[1].to_s
|
106
|
+
end
|
107
|
+
signature
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/workspace.rb
CHANGED
@@ -132,15 +132,21 @@ module Solargraph
|
|
132
132
|
|
133
133
|
def generate_require_paths
|
134
134
|
return [] if directory.nil?
|
135
|
-
return
|
135
|
+
return configured_require_paths unless gemspec?
|
136
136
|
result = []
|
137
137
|
gemspecs.each do |file|
|
138
138
|
spec = Gem::Specification.load(file)
|
139
139
|
base = File.dirname(file)
|
140
140
|
result.concat spec.require_paths.map{ |path| File.join(base, path) } unless spec.nil?
|
141
141
|
end
|
142
|
+
result.concat config.require_paths
|
142
143
|
result.push File.join(directory, 'lib') if result.empty?
|
143
144
|
result
|
144
145
|
end
|
146
|
+
|
147
|
+
def configured_require_paths
|
148
|
+
return [File.join(directory, 'lib')] if config.require_paths.empty?
|
149
|
+
config.require_paths.map{|p| File.join(directory, p)}
|
150
|
+
end
|
145
151
|
end
|
146
152
|
end
|
@@ -13,7 +13,7 @@ module Solargraph
|
|
13
13
|
def initialize workspace = nil
|
14
14
|
@workspace = workspace
|
15
15
|
include_globs = ['**/*.rb']
|
16
|
-
exclude_globs = ['spec/**/*', 'test/**/*', 'vendor/**/*']
|
16
|
+
exclude_globs = ['spec/**/*', 'test/**/*', 'vendor/**/*', '.bundle/**/*']
|
17
17
|
unless @workspace.nil?
|
18
18
|
sfile = File.join(@workspace, '.solargraph.yml')
|
19
19
|
if File.file?(sfile)
|
@@ -44,7 +44,7 @@ module Solargraph
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# An array of files excluded from the workspace.
|
47
|
-
#
|
47
|
+
#
|
48
48
|
# @return [Array<String>]
|
49
49
|
def excluded
|
50
50
|
return [] if workspace.nil?
|
@@ -67,6 +67,10 @@ module Solargraph
|
|
67
67
|
raw_data['require']
|
68
68
|
end
|
69
69
|
|
70
|
+
def require_paths
|
71
|
+
raw_data['require_paths'] || []
|
72
|
+
end
|
73
|
+
|
70
74
|
def plugins
|
71
75
|
raw_data['plugins']
|
72
76
|
end
|
data/lib/solargraph/yard_map.rb
CHANGED
@@ -152,9 +152,20 @@ module Solargraph
|
|
152
152
|
ns = nil
|
153
153
|
ns = find_first_resolved_object(yard, namespace, scope)
|
154
154
|
unless ns.nil?
|
155
|
+
has_new = false
|
155
156
|
ns.meths(scope: :class, visibility: visibility).each { |m|
|
157
|
+
has_new = true if m.name == 'new'
|
156
158
|
meths.push Pin::YardObject.new(m, object_location(m))
|
157
159
|
}
|
160
|
+
# HACK: Convert #initialize to .new
|
161
|
+
if visibility.include?(:public) and !has_new
|
162
|
+
init = ns.meths(scope: :instance).select{|m| m.to_s.split(/[\.#]/).last == 'initialize'}.first
|
163
|
+
unless init.nil?
|
164
|
+
ip = Solargraph::Pin::YardObject.new(init, object_location(init))
|
165
|
+
np = Solargraph::Pin::Method.new(ip.location, ip.namespace, 'new', ip.docstring, :class, :public, ip.parameters)
|
166
|
+
meths.push np
|
167
|
+
end
|
168
|
+
end
|
158
169
|
# Collect superclass methods
|
159
170
|
if ns.kind_of?(YARD::CodeObjects::ClassObject) and !ns.superclass.nil?
|
160
171
|
meths += get_methods ns.superclass.to_s, '', visibility: [:public, :protected] unless ['Object', 'BasicObject', ''].include?(ns.superclass.to_s)
|
@@ -286,12 +297,12 @@ module Solargraph
|
|
286
297
|
unresolved_requires.clear
|
287
298
|
required.each do |r|
|
288
299
|
next if r.nil?
|
300
|
+
next if !workspace.nil? and workspace.would_require?(r)
|
289
301
|
begin
|
290
302
|
spec = Gem::Specification.find_by_path(r) || Gem::Specification.find_by_name(r.split('/').first)
|
291
303
|
ver = spec.version.to_s
|
292
304
|
ver = ">= 0" if ver.empty?
|
293
305
|
add_gem_dependencies spec
|
294
|
-
next if !workspace.nil? and workspace.would_require?(r)
|
295
306
|
yd = YARD::Registry.yardoc_file_for_gem(spec.name, ver)
|
296
307
|
@gem_paths[spec.name] = spec.full_gem_path
|
297
308
|
unresolved_requires.push r if yd.nil?
|
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.22.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-05-
|
11
|
+
date: 2018-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -102,16 +102,16 @@ dependencies:
|
|
102
102
|
name: kramdown
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- - "
|
105
|
+
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: '
|
107
|
+
version: '1.16'
|
108
108
|
type: :runtime
|
109
109
|
prerelease: false
|
110
110
|
version_requirements: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- - "
|
112
|
+
- - "~>"
|
113
113
|
- !ruby/object:Gem::Version
|
114
|
-
version: '
|
114
|
+
version: '1.16'
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: htmlentities
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,6 +208,20 @@ dependencies:
|
|
208
208
|
- - "~>"
|
209
209
|
- !ruby/object:Gem::Version
|
210
210
|
version: '0.14'
|
211
|
+
- !ruby/object:Gem::Dependency
|
212
|
+
name: pry
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - "~>"
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: 0.11.3
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - "~>"
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: 0.11.3
|
211
225
|
description: IDE tools for code completion and inline documentation
|
212
226
|
email: admin@castwide.com
|
213
227
|
executables:
|
@@ -249,6 +263,7 @@ files:
|
|
249
263
|
- lib/solargraph/language_server/message/extended/check_gem_version.rb
|
250
264
|
- lib/solargraph/language_server/message/extended/document.rb
|
251
265
|
- lib/solargraph/language_server/message/extended/document_gems.rb
|
266
|
+
- lib/solargraph/language_server/message/extended/download_core.rb
|
252
267
|
- lib/solargraph/language_server/message/extended/search.rb
|
253
268
|
- lib/solargraph/language_server/message/initialize.rb
|
254
269
|
- lib/solargraph/language_server/message/initialized.rb
|
@@ -267,6 +282,8 @@ files:
|
|
267
282
|
- lib/solargraph/language_server/message/text_document/formatting.rb
|
268
283
|
- lib/solargraph/language_server/message/text_document/hover.rb
|
269
284
|
- lib/solargraph/language_server/message/text_document/on_type_formatting.rb
|
285
|
+
- lib/solargraph/language_server/message/text_document/references.rb
|
286
|
+
- lib/solargraph/language_server/message/text_document/rename.rb
|
270
287
|
- lib/solargraph/language_server/message/text_document/signature_help.rb
|
271
288
|
- lib/solargraph/language_server/message/workspace.rb
|
272
289
|
- lib/solargraph/language_server/message/workspace/did_change_configuration.rb
|
@@ -282,7 +299,6 @@ files:
|
|
282
299
|
- lib/solargraph/library.rb
|
283
300
|
- lib/solargraph/live_map.rb
|
284
301
|
- lib/solargraph/live_map/cache.rb
|
285
|
-
- lib/solargraph/node_methods.rb
|
286
302
|
- lib/solargraph/page.rb
|
287
303
|
- lib/solargraph/pin.rb
|
288
304
|
- lib/solargraph/pin/attribute.rb
|
@@ -304,6 +320,7 @@ files:
|
|
304
320
|
- lib/solargraph/pin/method_parameter.rb
|
305
321
|
- lib/solargraph/pin/namespace.rb
|
306
322
|
- lib/solargraph/pin/plugin/method.rb
|
323
|
+
- lib/solargraph/pin/proxy_method.rb
|
307
324
|
- lib/solargraph/pin/reference.rb
|
308
325
|
- lib/solargraph/pin/symbol.rb
|
309
326
|
- lib/solargraph/pin/yard_object.rb
|
@@ -320,6 +337,7 @@ files:
|
|
320
337
|
- lib/solargraph/source/fragment.rb
|
321
338
|
- lib/solargraph/source/location.rb
|
322
339
|
- lib/solargraph/source/mapper.rb
|
340
|
+
- lib/solargraph/source/node_methods.rb
|
323
341
|
- lib/solargraph/source/position.rb
|
324
342
|
- lib/solargraph/source/range.rb
|
325
343
|
- lib/solargraph/source/updater.rb
|
@@ -1,101 +0,0 @@
|
|
1
|
-
module Solargraph
|
2
|
-
module NodeMethods
|
3
|
-
# @return [String]
|
4
|
-
def unpack_name(node)
|
5
|
-
pack_name(node).join("::")
|
6
|
-
end
|
7
|
-
|
8
|
-
# @return [Array<String>]
|
9
|
-
def pack_name(node)
|
10
|
-
parts = []
|
11
|
-
if node.kind_of?(AST::Node)
|
12
|
-
node.children.each { |n|
|
13
|
-
if n.kind_of?(AST::Node)
|
14
|
-
if n.type == :cbase
|
15
|
-
parts = pack_name(n)
|
16
|
-
else
|
17
|
-
parts += pack_name(n)
|
18
|
-
end
|
19
|
-
else
|
20
|
-
parts.push n unless n.nil?
|
21
|
-
end
|
22
|
-
}
|
23
|
-
end
|
24
|
-
parts
|
25
|
-
end
|
26
|
-
|
27
|
-
# @return [String]
|
28
|
-
def const_from node
|
29
|
-
if node.kind_of?(AST::Node) and node.type == :const
|
30
|
-
result = ''
|
31
|
-
unless node.children[0].nil?
|
32
|
-
result = const_from(node.children[0])
|
33
|
-
end
|
34
|
-
if result == ''
|
35
|
-
result = node.children[1].to_s
|
36
|
-
else
|
37
|
-
result = result + '::' + node.children[1].to_s
|
38
|
-
end
|
39
|
-
result
|
40
|
-
else
|
41
|
-
nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# @return [String]
|
46
|
-
def infer_literal_node_type node
|
47
|
-
return nil unless node.kind_of?(AST::Node)
|
48
|
-
if node.type == :str or node.type == :dstr
|
49
|
-
return 'String'
|
50
|
-
elsif node.type == :array
|
51
|
-
return 'Array'
|
52
|
-
elsif node.type == :hash
|
53
|
-
return 'Hash'
|
54
|
-
elsif node.type == :int
|
55
|
-
return 'Integer'
|
56
|
-
elsif node.type == :float
|
57
|
-
return 'Float'
|
58
|
-
elsif node.type == :sym
|
59
|
-
return 'Symbol'
|
60
|
-
# @todo Maybe ignore nils
|
61
|
-
# elsif node.type == :nil
|
62
|
-
# return 'NilClass'
|
63
|
-
end
|
64
|
-
nil
|
65
|
-
end
|
66
|
-
|
67
|
-
# Get a call signature from a node.
|
68
|
-
# The result should be a string in the form of a method path, e.g.,
|
69
|
-
# String.new or variable.method.
|
70
|
-
#
|
71
|
-
# @return [String]
|
72
|
-
def resolve_node_signature node
|
73
|
-
result = drill_signature node, ''
|
74
|
-
return nil if result.empty?
|
75
|
-
result
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
|
80
|
-
def drill_signature node, signature
|
81
|
-
return signature unless node.kind_of?(AST::Node)
|
82
|
-
if node.type == :const or node.type == :cbase
|
83
|
-
unless node.children[0].nil?
|
84
|
-
signature += drill_signature(node.children[0], signature)
|
85
|
-
end
|
86
|
-
signature += '::' unless signature.empty?
|
87
|
-
signature += node.children[1].to_s
|
88
|
-
elsif node.type == :lvar or node.type == :ivar or node.type == :cvar
|
89
|
-
signature += '.' unless signature.empty?
|
90
|
-
signature += node.children[0].to_s
|
91
|
-
elsif node.type == :send
|
92
|
-
unless node.children[0].nil?
|
93
|
-
signature += drill_signature(node.children[0], signature)
|
94
|
-
end
|
95
|
-
signature += '.' unless signature.empty?
|
96
|
-
signature += node.children[1].to_s
|
97
|
-
end
|
98
|
-
signature
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|