solargraph 0.33.1 → 0.33.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c8b3e2034dbbcdaafda5c6f9183261078f9f91902ef1c0fd6b8381de923119d
4
- data.tar.gz: 520d5c332a8f6077b8aabefbf5ffa27a40c2d6472dd82e512cd84bccd739944f
3
+ metadata.gz: 32fec2551136daaa8c608f7fe94fec4ef24e08ba03723b2ece3e4c8b66342c5b
4
+ data.tar.gz: edaa58070c532e97dd1b0ac2e43b7917e08ceb972d19c43f26eba7b9fc62cf5a
5
5
  SHA512:
6
- metadata.gz: f967c5c5ae37b8c10417b953af1f663c3b6576602519990f32c5f43864d7318b86c5af14e0eabad85b6eba55147a722b7d4a178aab043e8ef8792c04aee77881
7
- data.tar.gz: f6d7d2a0563226bfde47f077a0ac856bbc9fb24271c4bcd723a55901ca85cc547e9ce2fa4a128042d1d4f37346078aeb29d6c7fe92a3db1b0f7c7cf7d4faa6f7
6
+ metadata.gz: 46b6981ae2a47c4676a78fdb50ac01f46d70cc37b3f762b9c35936dd13b2cd529fca0ed6d9057bd3106164145967560f50d1836848c395d4d90b953facb48f27
7
+ data.tar.gz: c6f70f39fded5af0e588f6792c9dba1872c421fc62993e16e1f734fe828d36e5f287309368fb09b1a7130d9bd7f0aa87a9ac7e9bef8e0de9309247985bc67c9f
@@ -159,8 +159,9 @@ module Solargraph
159
159
  # @param uri [String]
160
160
  # @return [void]
161
161
  def open_from_disk uri
162
+ sources.open_from_disk(uri)
162
163
  library = library_for(uri)
163
- library.open_from_disk uri_to_file(uri)
164
+ # library.open_from_disk uri_to_file(uri)
164
165
  diagnoser.schedule uri
165
166
  end
166
167
 
@@ -36,9 +36,11 @@ module Solargraph
36
36
  # @param uri [String]
37
37
  # @return [Library]
38
38
  def library_for uri
39
- explicit_library_for(uri) ||
39
+ result = explicit_library_for(uri) ||
40
40
  implicit_library_for(uri) ||
41
41
  generic_library_for(uri)
42
+ result.attach sources.find(uri) if sources.include?(uri)
43
+ result
42
44
  end
43
45
 
44
46
  # Find an explicit library match for the given URI. An explicit match
@@ -59,6 +59,11 @@ module Solargraph
59
59
  open_source_hash[uri] = source
60
60
  end
61
61
 
62
+ def open_from_disk uri
63
+ source = Solargraph::Source.load(UriHelpers.uri_to_file(uri))
64
+ open_source_hash[uri] = source
65
+ end
66
+
62
67
  # Update an existing source.
63
68
  #
64
69
  # @raise [FileNotFoundError] if the URI does not match an open source.
@@ -18,10 +18,10 @@ module Solargraph
18
18
  return params if pins.empty?
19
19
  docs = pins
20
20
  .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
21
- .map { |pin| pin.resolve_completion_item[:documentation] }
21
+ # docs = filt.map { |pin| pin.resolve_completion_item[:documentation] }
22
22
  result = params
23
23
  .merge(pins.first.resolve_completion_item)
24
- .merge(documentation: markup_content(docs.join("\n\n")))
24
+ .merge(documentation: markup_content(join_docs(docs)))
25
25
  result[:detail] = pins.first.detail
26
26
  result
27
27
  end
@@ -35,6 +35,19 @@ module Solargraph
35
35
  value: text
36
36
  }
37
37
  end
38
+
39
+ def join_docs pins
40
+ result = []
41
+ last_link = nil
42
+ pins.each_with_index do |pin|
43
+ if pin.link_documentation && pin.link_documentation != last_link
44
+ result.push pin.link_documentation
45
+ end
46
+ result.push pin.documentation
47
+ last_link = pin.link_documentation
48
+ end
49
+ result.join("\n\n")
50
+ end
38
51
  end
39
52
  end
40
53
  end
@@ -15,7 +15,7 @@ module Solargraph
15
15
  suggestions.each do |pin|
16
16
  parts = []
17
17
  this_link = pin.link_documentation
18
- if !this_link.nil? and this_link != last_link
18
+ if !this_link.nil? && this_link != last_link
19
19
  parts.push this_link
20
20
  end
21
21
  parts.push HTMLEntities.new.encode(pin.detail) unless pin.kind == Solargraph::Pin::NAMESPACE or pin.detail.nil?
@@ -10,6 +10,9 @@ module Solargraph
10
10
  # @return [String, nil]
11
11
  attr_reader :name
12
12
 
13
+ # @return [Source, nil]
14
+ attr_reader :current
15
+
13
16
  # @param workspace [Solargraph::Workspace]
14
17
  # @param name [String, nil]
15
18
  def initialize workspace = Solargraph::Workspace.new, name = nil
@@ -33,15 +36,6 @@ module Solargraph
33
36
  @synchronized
34
37
  end
35
38
 
36
- # Open a file from disk and try to merge it into the workspace.
37
- #
38
- # @param filename [String]
39
- # @return [Boolean] True if the file was merged into the source.
40
- def open_from_disk filename
41
- source = Solargraph::Source.load(filename)
42
- merge source
43
- end
44
-
45
39
  # Attach a source to the library.
46
40
  #
47
41
  # The attached source does not need to be a part of the workspace. The
@@ -54,6 +48,7 @@ module Solargraph
54
48
  mutex.synchronize do
55
49
  @synchronized = (@current == source) if synchronized?
56
50
  @current = source
51
+ catalog
57
52
  end
58
53
  end
59
54
 
@@ -159,7 +154,7 @@ module Solargraph
159
154
  # @todo Take a Location instead of filename/line/column
160
155
  def completions_at filename, line, column
161
156
  position = Position.new(line, column)
162
- cursor = Source::Cursor.new(checkout(filename), position)
157
+ cursor = Source::Cursor.new(read(filename), position)
163
158
  api_map.clip(cursor).complete
164
159
  end
165
160
 
@@ -173,7 +168,7 @@ module Solargraph
173
168
  # @todo Take filename/position instead of filename/line/column
174
169
  def definitions_at filename, line, column
175
170
  position = Position.new(line, column)
176
- cursor = Source::Cursor.new(checkout(filename), position)
171
+ cursor = Source::Cursor.new(read(filename), position)
177
172
  api_map.clip(cursor).define.map { |pin| pin.realize(api_map) }
178
173
  end
179
174
 
@@ -187,7 +182,7 @@ module Solargraph
187
182
  # @todo Take filename/position instead of filename/line/column
188
183
  def signatures_at filename, line, column
189
184
  position = Position.new(line, column)
190
- cursor = Source::Cursor.new(checkout(filename), position)
185
+ cursor = Source::Cursor.new(read(filename), position)
191
186
  api_map.clip(cursor).signify
192
187
  end
193
188
 
@@ -198,7 +193,7 @@ module Solargraph
198
193
  # @return [Array<Solargraph::Range>]
199
194
  # @todo Take a Location instead of filename/line/column
200
195
  def references_from filename, line, column, strip: false
201
- checkout filename
196
+ # checkout filename
202
197
  cursor = api_map.cursor_at(filename, Position.new(line, column))
203
198
  clip = api_map.clip(cursor)
204
199
  pins = clip.define
@@ -247,27 +242,6 @@ module Solargraph
247
242
  api_map.get_path_suggestions(path)
248
243
  end
249
244
 
250
- # Check a file out of the library. If the file is not part of the
251
- # workspace, the ApiMap will virtualize it for mapping purposes. If
252
- # filename is nil, any source currently checked out of the library
253
- # will be removed from the ApiMap. Only one file can be checked out
254
- # (virtualized) at a time.
255
- #
256
- # @raise [FileNotFoundError] if the file does not exist.
257
- #
258
- # @param filename [String]
259
- # @return [Source]
260
- def checkout filename
261
- checked = read(filename)
262
- @synchronized = (checked == @current) if synchronized?
263
- @current = checked
264
- # Cataloging is necessary to avoid FileNotFoundErrors when the file is
265
- # not in the workspace. Otherwise it should be safe to defer
266
- # synchronization.
267
- catalog unless workspace.has_file?(filename)
268
- @current
269
- end
270
-
271
245
  # @param query [String]
272
246
  # @return [Array<YARD::CodeObject::Base>]
273
247
  def document query
@@ -300,7 +274,7 @@ module Solargraph
300
274
  # @param filename [String]
301
275
  # @return [Array<Solargraph::Pin::Base>]
302
276
  def document_symbols filename
303
- checkout filename
277
+ # checkout filename
304
278
  api_map.document_symbols(filename)
305
279
  end
306
280
 
@@ -22,8 +22,8 @@ module Solargraph
22
22
  if @resolve_completion_item.nil?
23
23
  extra = {}
24
24
  alldoc = ''
25
- alldoc += link_documentation unless link_documentation.nil?
26
- alldoc += "\n\n" unless alldoc.empty?
25
+ # alldoc += link_documentation unless link_documentation.nil?
26
+ # alldoc += "\n\n" unless alldoc.empty?
27
27
  alldoc += documentation unless documentation.nil?
28
28
  extra[:documentation] = alldoc unless alldoc.empty?
29
29
  @resolve_completion_item = completion_item.merge(extra)
@@ -37,6 +37,11 @@ module Solargraph
37
37
  tag.text
38
38
  end
39
39
 
40
+ def try_merge! pin
41
+ return false unless super && closure == pin.closure
42
+ true
43
+ end
44
+
40
45
  private
41
46
 
42
47
  # @return [YARD::Tags::Tag]
@@ -7,14 +7,6 @@ module Solargraph
7
7
  @return_type = return_type
8
8
  end
9
9
 
10
- def path
11
- @path ||= begin
12
- result = namespace.to_s
13
- result += '::' unless result.empty? or name.to_s.empty?
14
- result += name.to_s
15
- end
16
- end
17
-
18
10
  def context
19
11
  @return_type
20
12
  end
@@ -443,7 +443,7 @@ module Solargraph
443
443
  # @return [Array<AST::Node>]
444
444
  def inner_node_references name, top
445
445
  result = []
446
- if top.is_a?(AST::Node)
446
+ if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
447
447
  result.push top if top.children.any? { |c| c.to_s == name }
448
448
  top.children.each { |c| result.concat inner_node_references(name, c) }
449
449
  end
@@ -18,6 +18,7 @@ module Solargraph
18
18
  autoload :Head, 'solargraph/source/chain/head'
19
19
  autoload :Or, 'solargraph/source/chain/or'
20
20
 
21
+ @@inference_stack = []
21
22
  @@inference_depth = 0
22
23
 
23
24
  UNDEFINED_CALL = Chain::Call.new('<undefined>')
@@ -94,19 +95,24 @@ module Solargraph
94
95
  # @return [ComplexType]
95
96
  def infer_first_defined pins, context, api_map
96
97
  type = ComplexType::UNDEFINED
97
- return type if @@inference_depth >= 3
98
- @@inference_depth += 1
99
98
  pins.each do |pin|
100
99
  type = pin.typify(api_map)
101
100
  break if type.defined?
102
101
  end
103
102
  if type.undefined?
103
+ # Limit method inference recursion
104
+ return type if @@inference_depth >= 2 && pins.first.is_a?(Pin::BaseMethod)
105
+ @@inference_depth += 1
104
106
  pins.each do |pin|
107
+ # Avoid infinite recursion
108
+ next if @@inference_stack.include?(pin)
109
+ @@inference_stack.push pin
105
110
  type = pin.probe(api_map)
111
+ @@inference_stack.pop
106
112
  break if type.defined?
107
113
  end
114
+ @@inference_depth -= 1
108
115
  end
109
- @@inference_depth -= 1
110
116
  return type if context.nil? || context.return_type.undefined?
111
117
  type.self_to(context.return_type.namespace)
112
118
  end
@@ -7,7 +7,7 @@ module Solargraph
7
7
  # @note Chain::Head is only intended to handle `self` and `super`.
8
8
  class Head < Link
9
9
  def resolve api_map, name_pin, locals
10
- return [name_pin] if word == 'self'
10
+ return [Pin::ProxyType.anonymous(name_pin.binder)] if word == 'self'
11
11
  return super_pins(api_map, name_pin) if word == 'super'
12
12
  []
13
13
  end
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.33.1'
2
+ VERSION = '0.33.2'
3
3
  end
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.33.1
4
+ version: 0.33.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: 2019-06-19 00:00:00.000000000 Z
11
+ date: 2019-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport