solargraph 0.42.1 → 0.42.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/solargraph/api_map/bundler_methods.rb +1 -6
- data/lib/solargraph/bench.rb +1 -1
- data/lib/solargraph/language_server/host.rb +2 -1
- data/lib/solargraph/language_server/transport/adapter.rb +1 -3
- data/lib/solargraph/library.rb +2 -1
- data/lib/solargraph/pin/local_variable.rb +47 -1
- data/lib/solargraph/shell.rb +2 -2
- data/lib/solargraph/source/chain/call.rb +3 -2
- data/lib/solargraph/source_map.rb +2 -1
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/yard_map.rb +9 -7
- data/lib/solargraph/yard_map/core_fills.rb +18 -1
- data/solargraph.gemspec +1 -1
- metadata +4 -5
- data/lib/solargraph/pin/localized.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4cd4acd35a7ce8242976cdd2b23d583bbd01392e3d79a16e3b4e181443e4858
|
4
|
+
data.tar.gz: 4cb4f369d97681a43d24a8fc3de14a454721c4334426655e23fffafceeb242c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5918eb0b9797ed3bed1fe97a702761889b4fb5b8280de655820d8a4319eefd651f4958e420b32468aac2ab197f657b8cb1386029654dcbd9b3a30bbdd2ca521b
|
7
|
+
data.tar.gz: 649a461beb8b23b69ae40bb347389602e20b42d0a689752d805beb2c08000a863c24d9e45b39d00ee544d37802be0762d9933a6d4e27b2617249d1443ca582f4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.42.2 - June 14, 2021
|
2
|
+
- Improve download-core command output
|
3
|
+
- Ignore missing requests to client responses
|
4
|
+
- Add automatically required gems to YardMap
|
5
|
+
- Use closures to identify local variables
|
6
|
+
|
1
7
|
## 0.42.1 - June 11, 2021
|
2
8
|
- YardMap#change sets new directory (#445)
|
3
9
|
|
@@ -9,7 +9,7 @@ module Solargraph
|
|
9
9
|
# @param directory [String]
|
10
10
|
# @return [Hash]
|
11
11
|
def require_from_bundle directory
|
12
|
-
|
12
|
+
begin
|
13
13
|
Solargraph.logger.info "Loading gems for bundler/require"
|
14
14
|
Documentor.specs_from_bundle(directory)
|
15
15
|
rescue BundleNotFoundError => e
|
@@ -17,11 +17,6 @@ module Solargraph
|
|
17
17
|
{}
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
# @return [void]
|
22
|
-
def reset_require_from_bundle
|
23
|
-
@require_from_bundle = nil
|
24
|
-
end
|
25
20
|
end
|
26
21
|
end
|
27
22
|
end
|
data/lib/solargraph/bench.rb
CHANGED
@@ -31,7 +31,7 @@ module Solargraph
|
|
31
31
|
@cancel = []
|
32
32
|
@buffer = String.new
|
33
33
|
@stopped = true
|
34
|
-
@next_request_id =
|
34
|
+
@next_request_id = 1
|
35
35
|
@dynamic_capabilities = Set.new
|
36
36
|
@registered_capabilities = Set.new
|
37
37
|
end
|
@@ -113,6 +113,7 @@ module Solargraph
|
|
113
113
|
requests.delete request['id']
|
114
114
|
else
|
115
115
|
logger.warn "Discarding client response to unrecognized message #{request['id']}"
|
116
|
+
nil
|
116
117
|
end
|
117
118
|
else
|
118
119
|
logger.warn "Invalid message received."
|
data/lib/solargraph/library.rb
CHANGED
@@ -46,7 +46,7 @@ module Solargraph
|
|
46
46
|
# @return [void]
|
47
47
|
def attach source
|
48
48
|
mutex.synchronize do
|
49
|
-
if @current && @current.filename != source.filename && source_map_hash.key?(@current.filename) && !workspace.has_file?(@current.filename)
|
49
|
+
if @current && (!source || @current.filename != source.filename) && source_map_hash.key?(@current.filename) && !workspace.has_file?(@current.filename)
|
50
50
|
source_map_hash.delete @current.filename
|
51
51
|
source_map_external_require_hash.delete @current.filename
|
52
52
|
@external_requires = nil
|
@@ -511,6 +511,7 @@ module Solargraph
|
|
511
511
|
end
|
512
512
|
|
513
513
|
def maybe_map source
|
514
|
+
return unless source
|
514
515
|
if source_map_hash.key?(source.filename)
|
515
516
|
return if source_map_hash[source.filename].code == source.code &&
|
516
517
|
source_map_hash[source.filename].source.synchronized? &&
|
@@ -3,7 +3,8 @@
|
|
3
3
|
module Solargraph
|
4
4
|
module Pin
|
5
5
|
class LocalVariable < BaseVariable
|
6
|
-
|
6
|
+
# @return [Range]
|
7
|
+
attr_reader :presence
|
7
8
|
|
8
9
|
def initialize assignment: nil, presence: nil, **splat
|
9
10
|
super(**splat)
|
@@ -16,6 +17,51 @@ module Solargraph
|
|
16
17
|
@presence = pin.presence
|
17
18
|
true
|
18
19
|
end
|
20
|
+
|
21
|
+
# @param other [Pin::Base] The caller's block
|
22
|
+
# @param position [Position, Array(Integer, Integer)] The caller's position
|
23
|
+
# @return [Boolean]
|
24
|
+
def visible_from?(other, position)
|
25
|
+
position = Position.normalize(position)
|
26
|
+
other.filename == filename &&
|
27
|
+
match_tags(other.full_context.tag, full_context.tag) &&
|
28
|
+
(other == closure ||
|
29
|
+
(closure.location.range.contain?(other.location.range.start) && closure.location.range.contain?(other.location.range.ending))
|
30
|
+
) &&
|
31
|
+
presence.contain?(position)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param other_loc [Location]
|
35
|
+
def visible_at?(other_closure, other_loc)
|
36
|
+
return true if location.filename == other_loc.filename &&
|
37
|
+
presence.include?(other_loc.range.start) &&
|
38
|
+
match_named_closure(other_closure, closure)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# @param tag1 [String]
|
44
|
+
# @param tag2 [String]
|
45
|
+
# @return [Boolean]
|
46
|
+
def match_tags tag1, tag2
|
47
|
+
# @todo This is an unfortunate hack made necessary by a discrepancy in
|
48
|
+
# how tags indicate the root namespace. The long-term solution is to
|
49
|
+
# standardize it, whether it's `Class<>`, an empty string, or
|
50
|
+
# something else.
|
51
|
+
tag1 == tag2 ||
|
52
|
+
(['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
|
53
|
+
end
|
54
|
+
|
55
|
+
def match_named_closure needle, haystack
|
56
|
+
return true if needle == haystack
|
57
|
+
cursor = haystack
|
58
|
+
until cursor.nil?
|
59
|
+
return true if needle.path == cursor.path
|
60
|
+
return false if cursor.path && !cursor.path.empty?
|
61
|
+
cursor = cursor.closure
|
62
|
+
end
|
63
|
+
false
|
64
|
+
end
|
19
65
|
end
|
20
66
|
end
|
21
67
|
end
|
data/lib/solargraph/shell.rb
CHANGED
@@ -76,12 +76,12 @@ module Solargraph
|
|
76
76
|
ver = version || Solargraph::YardMap::CoreDocs.best_download
|
77
77
|
if RUBY_VERSION != ver
|
78
78
|
puts "Documentation for #{RUBY_VERSION} is not available. Reverting to closest match..."
|
79
|
-
else
|
80
|
-
puts "Downloading docs for #{ver}..."
|
81
79
|
end
|
80
|
+
puts "Downloading docs for #{ver}..."
|
82
81
|
Solargraph::YardMap::CoreDocs.download ver
|
83
82
|
# Clear cached documentation if it exists
|
84
83
|
FileUtils.rm_rf Dir.glob(File.join(Solargraph::YardMap::CoreDocs.cache_dir, ver, '*.ser'))
|
84
|
+
puts "Download complete."
|
85
85
|
rescue ArgumentError => e
|
86
86
|
STDERR.puts "ERROR: #{e.message}"
|
87
87
|
STDERR.puts "Run `solargraph available-cores` for a list."
|
@@ -77,6 +77,7 @@ module Solargraph
|
|
77
77
|
end
|
78
78
|
if match
|
79
79
|
type = extra_return_type(ol, context)
|
80
|
+
break if type
|
80
81
|
type = ComplexType.try_parse(*ol.tag(:return).types).self_to(context.to_s).qualify(api_map, context.namespace) if ol.has_tag?(:return) && ol.tag(:return).types && !ol.tag(:return).types.empty? && (type.nil? || type.undefined?)
|
81
82
|
type ||= ComplexType::UNDEFINED
|
82
83
|
end
|
@@ -170,8 +171,8 @@ module Solargraph
|
|
170
171
|
# @param context [ComplexType]
|
171
172
|
# @return [ComplexType]
|
172
173
|
def extra_return_type docstring, context
|
173
|
-
if docstring.has_tag?(:return_single_parameter)
|
174
|
-
return context.subtypes.first
|
174
|
+
if docstring.has_tag?(:return_single_parameter) #&& context.subtypes.one?
|
175
|
+
return context.subtypes.first || ComplexType::UNDEFINED
|
175
176
|
elsif docstring.has_tag?(:return_value_parameter) && context.value_types.one?
|
176
177
|
return context.value_types.first
|
177
178
|
end
|
@@ -131,7 +131,8 @@ module Solargraph
|
|
131
131
|
# @return [Array<Pin::LocalVariable>]
|
132
132
|
def locals_at(location)
|
133
133
|
return [] if location.filename != filename
|
134
|
-
|
134
|
+
closure = locate_named_path_pin(location.range.start.line, location.range.start.character)
|
135
|
+
locals.select { |pin| pin.visible_at?(closure, location) }
|
135
136
|
end
|
136
137
|
|
137
138
|
class << self
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/yard_map.rb
CHANGED
@@ -156,12 +156,12 @@ module Solargraph
|
|
156
156
|
@base_required ||= Set.new
|
157
157
|
end
|
158
158
|
|
159
|
-
private
|
160
|
-
|
161
159
|
def directory
|
162
160
|
@directory ||= ''
|
163
161
|
end
|
164
162
|
|
163
|
+
private
|
164
|
+
|
165
165
|
# @return [YardMap::Cache]
|
166
166
|
def cache
|
167
167
|
@cache ||= YardMap::Cache.new
|
@@ -190,11 +190,8 @@ module Solargraph
|
|
190
190
|
|
191
191
|
# @return [void]
|
192
192
|
def process_requires
|
193
|
-
@gemset =
|
194
|
-
|
195
|
-
else
|
196
|
-
{}
|
197
|
-
end
|
193
|
+
@gemset = process_gemsets
|
194
|
+
required.merge @gemset.keys if required.include?('bundler/require')
|
198
195
|
pins.replace core_pins
|
199
196
|
unresolved_requires.clear
|
200
197
|
stdlib_pins.clear
|
@@ -254,6 +251,11 @@ module Solargraph
|
|
254
251
|
pins.concat environ.pins
|
255
252
|
end
|
256
253
|
|
254
|
+
def process_gemsets
|
255
|
+
return {} if directory.empty? || !File.file?(File.join(directory, 'Gemfile'))
|
256
|
+
require_from_bundle(directory)
|
257
|
+
end
|
258
|
+
|
257
259
|
# @param spec [Gem::Specification]
|
258
260
|
# @return [void]
|
259
261
|
def add_gem_dependencies spec
|
@@ -82,6 +82,18 @@ module Solargraph
|
|
82
82
|
Override.method_return('Class#allocate', 'self'),
|
83
83
|
Override.method_return('Class.allocate', 'Class<Object>'),
|
84
84
|
|
85
|
+
Override.from_comment('Enumerable#detect', %(
|
86
|
+
@overload detect(&block)
|
87
|
+
@return_single_parameter
|
88
|
+
@overload detect()
|
89
|
+
@return [Enumerator]
|
90
|
+
)),
|
91
|
+
Override.from_comment('Enumerable#find', %(
|
92
|
+
@overload find(&block)
|
93
|
+
@return_single_parameter
|
94
|
+
@overload find()
|
95
|
+
@return [Enumerator]
|
96
|
+
)),
|
85
97
|
Override.method_return('Enumerable#select', 'self'),
|
86
98
|
|
87
99
|
Override.method_return('File.absolute_path', 'String'),
|
@@ -111,7 +123,12 @@ module Solargraph
|
|
111
123
|
@param y [Numeric]
|
112
124
|
@return [Numeric]
|
113
125
|
)),
|
114
|
-
Override.
|
126
|
+
Override.from_comment('Integer#times', %(
|
127
|
+
@overload times(&block)
|
128
|
+
@return [Integer]
|
129
|
+
@overload times()
|
130
|
+
@return [Enumerator]
|
131
|
+
)),
|
115
132
|
|
116
133
|
Override.method_return('Kernel#puts', 'nil'),
|
117
134
|
|
data/solargraph.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.required_ruby_version = '>= 2.4'
|
21
21
|
|
22
|
-
s.add_runtime_dependency 'backport', '~> 1.
|
22
|
+
s.add_runtime_dependency 'backport', '~> 1.2'
|
23
23
|
s.add_runtime_dependency 'benchmark'
|
24
24
|
s.add_runtime_dependency 'bundler', '>= 1.17.2'
|
25
25
|
s.add_runtime_dependency 'diff-lcs', '~> 1.4'
|
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.42.
|
4
|
+
version: 0.42.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: benchmark
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -477,7 +477,6 @@ files:
|
|
477
477
|
- lib/solargraph/pin/keyword.rb
|
478
478
|
- lib/solargraph/pin/keyword_param.rb
|
479
479
|
- lib/solargraph/pin/local_variable.rb
|
480
|
-
- lib/solargraph/pin/localized.rb
|
481
480
|
- lib/solargraph/pin/method.rb
|
482
481
|
- lib/solargraph/pin/method_alias.rb
|
483
482
|
- lib/solargraph/pin/namespace.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
module Localized
|
6
|
-
# @return [Range]
|
7
|
-
attr_reader :presence
|
8
|
-
|
9
|
-
# @param other [Pin::Base] The caller's block
|
10
|
-
# @param position [Position, Array(Integer, Integer)] The caller's position
|
11
|
-
# @return [Boolean]
|
12
|
-
def visible_from?(other, position)
|
13
|
-
position = Position.normalize(position)
|
14
|
-
other.filename == filename &&
|
15
|
-
match_tags(other.full_context.tag, full_context.tag) &&
|
16
|
-
(other == closure ||
|
17
|
-
(closure.location.range.contain?(other.location.range.start) && closure.location.range.contain?(other.location.range.ending))
|
18
|
-
) &&
|
19
|
-
presence.contain?(position)
|
20
|
-
end
|
21
|
-
|
22
|
-
# @param other_loc [Location]
|
23
|
-
def visible_at?(other_loc)
|
24
|
-
return false if location.filename != other_loc.filename
|
25
|
-
presence.include?(other_loc.range.start)
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# @param tag1 [String]
|
31
|
-
# @param tag2 [String]
|
32
|
-
# @return [Boolean]
|
33
|
-
def match_tags tag1, tag2
|
34
|
-
# @todo This is an unfortunate hack made necessary by a discrepancy in
|
35
|
-
# how tags indicate the root namespace. The long-term solution is to
|
36
|
-
# standardize it, whether it's `Class<>`, an empty string, or
|
37
|
-
# something else.
|
38
|
-
tag1 == tag2 ||
|
39
|
-
(['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|