solargraph 0.38.2 → 0.38.3

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: 389f64ff08e6e1eda0eb13d13e7ff3a8c41650436b02d693995b15dbc3d955c7
4
- data.tar.gz: eaffccfef362bbb580ea5c57a3bc99d0fb576ec422b11963e8b7490ea035a578
3
+ metadata.gz: b938f9be15a1bf0d05152f83b00bb4b04018b37b3da1ab921963f57d7a837484
4
+ data.tar.gz: 8dc52f3e77661d53fd107610e33441f94cab71c4529e47559cbcb055bf04fddd
5
5
  SHA512:
6
- metadata.gz: 0d9779fe5645a9ad1d6375795875219405cc637de5fcd28c51c11ead54838ce4a5a22f49993d91d0649a6153b045eacb97f079f44ffaa888a33513c8de639573
7
- data.tar.gz: 53dfdef740ad7d4a5fc5c80798f7cca2116b7ae5960878357e1a0516f4cc4783f3ed521a2ba86959d044e1588b2492b3f3751d7812454b37c8d6597e51bc266b
6
+ metadata.gz: b5d48c9e67760aca62df62495ce1ad372327f556462498e7aaf9149eabc047be796a8c59dd5ea2874aa88827fcc204059f18f74f32ed4ed4912e49c7986ae783
7
+ data.tar.gz: 27fa823a0b024ee78aafbfc69d6ea555351155bf6a963abcd9f94a1d15e79ca630f5b32cb0acfe97192e5ef0e0d8d730d34f4bcd9091cb91c699f8684930554e
data/Gemfile CHANGED
@@ -5,3 +5,5 @@ gemspec name: 'solargraph'
5
5
  # Local gemfile for development tools, etc.
6
6
  local_gemfile = File.expand_path(".Gemfile", __dir__)
7
7
  instance_eval File.read local_gemfile if File.exist? local_gemfile
8
+
9
+ gem 'readapt', '~> 1.0'
data/lib/solargraph.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # require 'yard'
4
3
  require 'solargraph/version'
5
- # require 'yard-solargraph'
6
4
 
7
5
  # The top-level namespace for the Solargraph code mapping, documentation,
8
6
  # static analysis, and language server libraries.
@@ -27,6 +25,7 @@ module Solargraph
27
25
  autoload :Pin, 'solargraph/pin'
28
26
  autoload :ServerMethods, 'solargraph/server_methods'
29
27
  autoload :CoreFills, 'solargraph/core_fills'
28
+ autoload :StdlibFills, 'solargraph/stdlib_fills'
30
29
  autoload :LanguageServer, 'solargraph/language_server'
31
30
  autoload :Workspace, 'solargraph/workspace'
32
31
  autoload :Page, 'solargraph/page'
@@ -93,34 +93,35 @@ module Solargraph
93
93
  return self if merged
94
94
  implicit.clear
95
95
  pins = []
96
- reqs = []
96
+ reqs = Set.new
97
97
  # @param map [SourceMap]
98
98
  new_map_hash.values.each do |map|
99
99
  implicit.merge map.environ
100
100
  pins.concat map.pins
101
- reqs.concat map.requires.map(&:name)
101
+ reqs.merge map.requires.map(&:name)
102
102
  end
103
- reqs.concat bundle.workspace.config.required
103
+ reqs.merge bundle.workspace.config.required
104
104
  local_path_hash.clear
105
105
  unless bundle.workspace.require_paths.empty?
106
+ file_keys = new_map_hash.keys
107
+ workspace_path = Pathname.new(bundle.workspace.directory)
106
108
  reqs.delete_if do |r|
107
- result = false
108
- bundle.workspace.require_paths.each do |l|
109
- pn = Pathname.new(bundle.workspace.directory).join(l, "#{r}.rb")
110
- if new_map_hash.keys.include?(pn.to_s)
111
- local_path_hash[r] = pn.to_s
112
- result = true
113
- break
109
+ bundle.workspace.require_paths.any? do |base|
110
+ pn = workspace_path.join(base, "#{r}.rb").to_s
111
+ if file_keys.include? pn
112
+ local_path_hash[r] = pn
113
+ true
114
+ else
115
+ false
114
116
  end
115
117
  end
116
- result
117
118
  end
118
119
  end
119
- reqs.concat implicit.requires
120
+ reqs.merge implicit.requires
120
121
  pins.concat implicit.overrides
121
122
  br = reqs.include?('bundler/require') ? require_from_bundle(bundle.workspace.directory) : {}
122
- reqs.concat br.keys
123
- yard_map.change(reqs, br)
123
+ reqs.merge br.keys
124
+ yard_map.change(reqs.to_a, br)
124
125
  new_store = Store.new(pins + yard_map.pins)
125
126
  @mutex.synchronize {
126
127
  @cache.clear
@@ -567,27 +568,30 @@ module Solargraph
567
568
  result = []
568
569
  result.concat store.get_methods(fqns, scope: scope, visibility: visibility).sort{ |a, b| a.name <=> b.name }
569
570
  if deep
570
- sc = store.get_superclass(fqns)
571
- unless sc.nil?
572
- fqsc = qualify(sc, fqns.split('::')[0..-2].join('::'))
573
- result.concat inner_get_methods(fqsc, scope, visibility, true, skip, true) unless fqsc.nil?
574
- end
575
571
  if scope == :instance
576
572
  store.get_includes(fqns).reverse.each do |im|
577
573
  fqim = qualify(im, fqns)
578
574
  result.concat inner_get_methods(fqim, scope, visibility, deep, skip, true) unless fqim.nil?
579
575
  end
580
- result.concat inner_get_methods('Object', :instance, [:public], deep, skip, no_core)
581
- result.concat inner_get_methods('BasicObject', :instance, [:public], deep, skip, no_core)
576
+ sc = store.get_superclass(fqns)
577
+ unless sc.nil?
578
+ fqsc = qualify(sc, fqns.split('::')[0..-2].join('::'))
579
+ result.concat inner_get_methods(fqsc, scope, visibility, true, skip, no_core) unless fqsc.nil?
580
+ end
582
581
  else
583
582
  store.get_extends(fqns).reverse.each do |em|
584
583
  fqem = qualify(em, fqns)
585
584
  result.concat inner_get_methods(fqem, :instance, visibility, deep, skip, true) unless fqem.nil?
586
585
  end
586
+ sc = store.get_superclass(fqns)
587
+ unless sc.nil?
588
+ fqsc = qualify(sc, fqns.split('::')[0..-2].join('::'))
589
+ result.concat inner_get_methods(fqsc, scope, visibility, true, skip, true) unless fqsc.nil?
590
+ end
587
591
  unless no_core || fqns.empty?
588
592
  type = get_namespace_type(fqns)
589
593
  result.concat inner_get_methods('Class', :instance, visibility, deep, skip, no_core) if type == :class
590
- result.concat inner_get_methods('Module', :instance,visibility, deep, skip, no_core)
594
+ result.concat inner_get_methods('Module', :instance, visibility, deep, skip, no_core)
591
595
  end
592
596
  end
593
597
  store.domains(fqns).each do |d|
@@ -610,7 +614,10 @@ module Solargraph
610
614
  store.get_includes(fqns).each do |is|
611
615
  result.concat inner_get_constants(qualify(is, fqns), [:public], skip)
612
616
  end
613
- result.concat inner_get_constants(store.get_superclass(fqns), [:public], skip)
617
+ sc = store.get_superclass(fqns)
618
+ unless %w[Object BasicObject].include?(sc)
619
+ result.concat inner_get_constants(store.get_superclass(fqns), [:public], skip)
620
+ end
614
621
  result
615
622
  end
616
623
 
@@ -37,6 +37,8 @@ module Solargraph
37
37
  # @return [String]
38
38
  def get_superclass fqns
39
39
  return superclass_references[fqns].first if superclass_references.key?(fqns)
40
+ return 'Object' if fqns != 'BasicObject' && namespace_exists?(fqns)
41
+ return 'Object' if fqns == 'Boolean'
40
42
  nil
41
43
  end
42
44
 
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
+ # Overrides for the Ruby core.
5
+ #
6
+ # The YardMap uses this module to add type information to core methods.
7
+ #
4
8
  module CoreFills
5
9
  Override = Pin::Reference::Override
6
10
 
@@ -13,8 +17,8 @@ module Solargraph
13
17
  ].freeze
14
18
 
15
19
  methods_with_yieldparam_subtypes = %w[
16
- Array#each Array#map Array#any? Array#all? Array#index Array#keep_if
17
- Array#delete_if
20
+ Array#each Array#map Array#map! Array#any? Array#all? Array#index
21
+ Array#keep_if Array#delete_if
18
22
  Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
19
23
  Enumerable#select Enumerable#reject
20
24
  Set#each
@@ -74,7 +78,11 @@ module Solargraph
74
78
 
75
79
  Override.method_return('Enumerable#select', 'self'),
76
80
 
81
+ Override.method_return('File.absolute_path', 'String'),
82
+ Override.method_return('File.basename', 'String'),
77
83
  Override.method_return('File.dirname', 'String'),
84
+ Override.method_return('File.extname', 'String'),
85
+ Override.method_return('File.join', 'String'),
78
86
 
79
87
  Override.from_comment('Hash#[]', %(
80
88
  @return_value_parameter
@@ -66,9 +66,9 @@ module Solargraph
66
66
 
67
67
  # @return [ComplexType]
68
68
  def generate_complex_type
69
- tag = docstring.tag(:return)
70
- return ComplexType::UNDEFINED if tag.nil? or tag.types.nil? or tag.types.empty?
71
- ComplexType.try_parse *tag.types
69
+ tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
70
+ return ComplexType::UNDEFINED if tags.empty?
71
+ ComplexType.try_parse *tags
72
72
  end
73
73
 
74
74
  # @param api_map [ApiMap]
@@ -3,6 +3,7 @@
3
3
  module Solargraph
4
4
  module Pin
5
5
  module Common
6
+ # @return [Location]
6
7
  attr_reader :location
7
8
 
8
9
  # @return [Pin::Base, nil]
@@ -13,6 +14,7 @@ module Solargraph
13
14
  @name ||= ''
14
15
  end
15
16
 
17
+ # @return [ComplexType]
16
18
  def return_type
17
19
  @return_type ||= ComplexType::UNDEFINED
18
20
  end
@@ -24,6 +26,7 @@ module Solargraph
24
26
  end
25
27
  alias full_context context
26
28
 
29
+ # @return [String]
27
30
  def namespace
28
31
  context.namespace.to_s
29
32
  end
@@ -33,10 +36,12 @@ module Solargraph
33
36
  @binder || context
34
37
  end
35
38
 
39
+ # @return [String]
36
40
  def comments
37
41
  @comments ||= ''
38
42
  end
39
43
 
44
+ # @return [String]
40
45
  def path
41
46
  @path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
42
47
  end
@@ -47,7 +52,15 @@ module Solargraph
47
52
  def find_context
48
53
  here = closure
49
54
  until here.nil?
50
- return here.return_type if here.is_a?(Pin::Namespace)
55
+ if here.is_a?(Pin::Namespace)
56
+ return here.return_type
57
+ elsif here.is_a?(Pin::BaseMethod)
58
+ if here.scope == :instance
59
+ return ComplexType.try_parse(here.context.namespace)
60
+ else
61
+ return here.closure.return_type
62
+ end
63
+ end
51
64
  here = here.closure
52
65
  end
53
66
  ComplexType::ROOT
@@ -11,9 +11,10 @@ module Solargraph
11
11
  # @return [Boolean]
12
12
  def visible_from?(other, position)
13
13
  position = Position.normalize(position)
14
- other.filename == filename and
14
+ other.filename == filename &&
15
+ match_tags(other.full_context.tag, full_context.tag) &&
15
16
  (other == closure ||
16
- (closure.location.range.contain?(closure.location.range.start) && closure.location.range.contain?(other.location.range.ending))
17
+ (closure.location.range.contain?(other.location.range.start) && closure.location.range.contain?(other.location.range.ending))
17
18
  ) &&
18
19
  presence.contain?(position)
19
20
  end
@@ -23,6 +24,20 @@ module Solargraph
23
24
  return false if location.filename != other_loc.filename
24
25
  presence.include?(other_loc.range.start)
25
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
26
41
  end
27
42
  end
28
43
  end
@@ -81,18 +81,14 @@ module Solargraph
81
81
  has_nil = true
82
82
  next
83
83
  end
84
- literal = infer_literal_node_type(n)
85
- if literal
86
- result.push ComplexType.try_parse(literal)
87
- else
88
- next if n.loc.nil? || n.loc.expression.nil?
89
- clip = api_map.clip_at(
90
- location.filename,
91
- [n.loc.expression.last_line, n.loc.expression.last_column]
92
- )
93
- type = clip.infer
94
- result.push type unless type.undefined?
95
- end
84
+ next if n.loc.nil? || n.loc.expression.nil?
85
+ clip = api_map.clip_at(
86
+ location.filename,
87
+ [n.loc.expression.last_line, n.loc.expression.last_column]
88
+ )
89
+ chain = Solargraph::Source::NodeChainer.chain(n, location.filename)
90
+ type = chain.infer(api_map, self, clip.locals)
91
+ result.push type unless type.undefined?
96
92
  end
97
93
  result.push ComplexType::NIL if has_nil
98
94
  return ComplexType::UNDEFINED if result.empty?
@@ -6,10 +6,10 @@ module Solargraph
6
6
  class Namespace < Pin::Namespace
7
7
  include YardMixin
8
8
 
9
- def initialize code_object, spec
9
+ def initialize code_object, spec, closure = nil
10
10
  @code_object = code_object
11
11
  @spec = spec
12
- closure = Solargraph::Pin::Namespace.new(
12
+ closure ||= Solargraph::Pin::Namespace.new(
13
13
  name: code_object.namespace.to_s,
14
14
  closure: Pin::ROOT_PIN,
15
15
  gates: [code_object.namespace.to_s]
@@ -34,8 +34,14 @@ module Solargraph
34
34
 
35
35
  # @param links [Array<Chain::Link>]
36
36
  def initialize links
37
- @links = links
37
+ @links = links.clone
38
38
  @links.push UNDEFINED_CALL if @links.empty?
39
+ head = true
40
+ @links.map! do |link|
41
+ result = (head ? link.clone_head : link.clone_body)
42
+ head = false
43
+ result
44
+ end
39
45
  end
40
46
 
41
47
  # @return [Chain]
@@ -54,7 +60,9 @@ module Solargraph
54
60
  links[0..-2].each do |link|
55
61
  pins = link.resolve(api_map, working_pin, locals)
56
62
  # Locals are only used when resolving the first link
57
- locals = []
63
+ # @todo There's a problem here. Call links need to resolve arguments
64
+ # that might refer to local variables.
65
+ # locals = []
58
66
  type = infer_first_defined(pins, working_pin, api_map)
59
67
  return [] if type.undefined?
60
68
  working_pin = Pin::ProxyType.anonymous(type)
@@ -14,26 +14,25 @@ module Solargraph
14
14
  # @param arguments [Array<Chain>]
15
15
  # @param with_block [Boolean] True if the chain is inside a block
16
16
  # @param head [Boolean] True if the call is the start of its chain
17
- def initialize word, arguments = [], with_block = false, head = false
17
+ def initialize word, arguments = [], with_block = false
18
18
  @word = word
19
19
  @arguments = arguments
20
20
  @with_block = with_block
21
- @head = head
22
21
  end
23
22
 
24
23
  def with_block?
25
24
  @with_block
26
25
  end
27
26
 
28
- def head?
29
- @head
30
- end
31
-
32
27
  # @param api_map [ApiMap]
33
28
  # @param name_pin [Pin::Base]
34
29
  # @param locals [Array<Pin::Base>]
35
30
  def resolve api_map, name_pin, locals
36
- found = locals.select{|p| p.name == word}
31
+ found = if head?
32
+ locals.select { |p| p.name == word }
33
+ else
34
+ []
35
+ end
37
36
  return inferred_pins(found, api_map, name_pin.context, locals) unless found.empty?
38
37
  pins = api_map.get_method_stack(name_pin.binder.namespace, word, scope: name_pin.binder.scope)
39
38
  pins.concat api_map.get_method_stack('Kernel', word, scope: :instance) if head?
@@ -28,9 +28,38 @@ module Solargraph
28
28
  []
29
29
  end
30
30
 
31
+ def head?
32
+ @head ||= false
33
+ end
34
+
31
35
  def == other
32
36
  self.class == other.class and word == other.word
33
37
  end
38
+
39
+ # Make a copy of this link marked as the head of a chain
40
+ #
41
+ # @return [self]
42
+ def clone_head
43
+ clone.mark_head(true)
44
+ end
45
+
46
+ # Make a copy of this link unmarked as the head of a chain
47
+ #
48
+ # @return [self]
49
+ def clone_body
50
+ clone.mark_head(false)
51
+ end
52
+
53
+ protected
54
+
55
+ # Mark whether this link is the head of a chain
56
+ #
57
+ # @param bool [Boolean]
58
+ # @return [self]
59
+ def mark_head bool
60
+ @head = bool
61
+ self
62
+ end
34
63
  end
35
64
  end
36
65
  end
@@ -58,13 +58,13 @@ module Solargraph
58
58
  n.children[2..-1].each do |c|
59
59
  args.push NodeChainer.chain(c)
60
60
  end
61
- result.push Chain::Call.new(n.children[1].to_s, args, @in_block || block_passed?(n), result.length.zero?)
61
+ result.push Chain::Call.new(n.children[1].to_s, args, @in_block || block_passed?(n))
62
62
  elsif n.children[0].nil?
63
63
  args = []
64
64
  n.children[2..-1].each do |c|
65
65
  args.push NodeChainer.chain(c)
66
66
  end
67
- result.push Chain::Call.new(n.children[1].to_s, args, @in_block || block_passed?(n), result.length.zero?)
67
+ result.push Chain::Call.new(n.children[1].to_s, args, @in_block || block_passed?(n))
68
68
  else
69
69
  raise "No idea what to do with #{n}"
70
70
  end
@@ -162,7 +162,8 @@ module Solargraph
162
162
  elsif node.type == :return
163
163
  result.concat reduce_to_value_nodes([node.children[0]])
164
164
  elsif node.type == :block
165
- result.concat reduce_to_value_nodes([node.children[0]])
165
+ result.push node
166
+ # result.concat reduce_to_value_nodes([node.children[0]])
166
167
  result.concat get_return_nodes_only(node.children[2])
167
168
  else
168
169
  result.push node
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # Overrides for the Ruby stdlib.
5
+ #
6
+ # The YardMap uses this module to add type information to stdlib methods.
7
+ #
8
+ module StdlibFills
9
+ Override = Pin::Reference::Override
10
+
11
+ LIBS = {
12
+ 'benchmark' => [
13
+ Override.method_return('Benchmark.measure', 'Benchmark::Tms')
14
+ ],
15
+
16
+ 'pathname' => [
17
+ Override.method_return('Pathname#join', 'Pathname'),
18
+ Override.method_return('Pathname#basename', 'Pathname'),
19
+ Override.method_return('Pathname#dirname', 'Pathname'),
20
+ Override.method_return('Pathname#cleanpath', 'Pathname'),
21
+ Override.method_return('Pathname#children', 'Array<Pathname>'),
22
+ Override.method_return('Pathname#entries', 'Array<Pathname>')
23
+ ]
24
+ }
25
+
26
+ # @param path [String]
27
+ # @return [Array<Pin::Reference::Override>]
28
+ def self.get path
29
+ LIBS[path] || []
30
+ end
31
+ end
32
+ end
@@ -316,9 +316,9 @@ module Solargraph
316
316
  return false unless par.duck_type?
317
317
  meths = api_map.get_complex_type_methods(arg).map(&:name)
318
318
  par.each do |quack|
319
- return false unless meths.include?(quack.to_s[1..-1])
319
+ return true if quack.duck_type? && meths.include?(quack.to_s[1..-1])
320
320
  end
321
- true
321
+ false
322
322
  end
323
323
 
324
324
  # @param pin [Pin::Base]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.38.2'
4
+ VERSION = '0.38.3'
5
5
  end
@@ -23,8 +23,10 @@ module Solargraph
23
23
  next if ns.nil? || ns.file.nil?
24
24
  path = ns.file.sub(/^(ext|lib)\//, '').sub(/\.(rb|c)$/, '')
25
25
  next if path.start_with?('-')
26
- @@stdlib_paths[path] ||= []
27
- @@stdlib_paths[path].push ns
26
+ base = path.split('/').first
27
+ @@stdlib_paths[base] ||= {}
28
+ @@stdlib_paths[base][path] ||= []
29
+ @@stdlib_paths[base][path].push ns
28
30
  end
29
31
 
30
32
  # @return [Array<String>]
@@ -167,6 +169,7 @@ module Solargraph
167
169
  unresolved_requires.clear
168
170
  stdnames = {}
169
171
  done = []
172
+ from_std = []
170
173
  required.each do |r|
171
174
  next if r.nil? || r.empty? || done.include?(r)
172
175
  done.push r
@@ -188,11 +191,19 @@ module Solargraph
188
191
  yardocs.unshift yd
189
192
  result.concat process_yardoc yd, spec
190
193
  result.concat add_gem_dependencies(spec) if with_dependencies?
194
+ stdlib_fill r, result
191
195
  end
192
196
  rescue Gem::LoadError => e
197
+ base = r.split('/').first
193
198
  stdtmp = []
194
- @@stdlib_paths.each_pair do |path, objects|
195
- stdtmp.concat objects if path == r || path.start_with?("#{r}/")
199
+ if @@stdlib_paths[base]
200
+ @@stdlib_paths[base].each_pair do |path, objects|
201
+ next if from_std.include?(path)
202
+ if path == r || path.start_with?("#{r}/")
203
+ from_std.push path
204
+ stdtmp.concat objects
205
+ end
206
+ end
196
207
  end
197
208
  if stdtmp.empty?
198
209
  unresolved_requires.push r
@@ -227,6 +238,7 @@ module Solargraph
227
238
  result.concat Mapper.new(all).map
228
239
  end
229
240
  result.delete_if(&:nil?)
241
+ stdlib_fill r, result
230
242
  cache.set_path_pins(r, result) unless result.empty?
231
243
  pins.concat result
232
244
  end
@@ -301,6 +313,22 @@ module Solargraph
301
313
  end
302
314
  spec
303
315
  end
316
+
317
+ # @param path [String]
318
+ # @param pins [Array<Pin::Base>]
319
+ # @return [void]
320
+ def stdlib_fill path, pins
321
+ StdlibFills.get(path).each do |ovr|
322
+ pin = pins.select { |p| p.path == ovr.name }.first
323
+ next if pin.nil?
324
+ (ovr.tags.map(&:tag_name) + ovr.delete).uniq.each do |tag|
325
+ pin.docstring.delete_tags tag.to_sym
326
+ end
327
+ ovr.tags.each do |tag|
328
+ pin.docstring.add_tag(tag)
329
+ end
330
+ end
331
+ end
304
332
  end
305
333
  end
306
334
 
@@ -3,8 +3,6 @@
3
3
  module Solargraph
4
4
  class YardMap
5
5
  class Mapper
6
- @@object_file_cache = {}
7
-
8
6
  # @param code_objects [Array<YARD::CodeObjects::Base>]
9
7
  # @param spec [Gem::Specification]
10
8
  def initialize code_objects, spec = nil
@@ -27,7 +25,7 @@ module Solargraph
27
25
  def generate_pins code_object
28
26
  result = []
29
27
  if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
30
- nspin = Solargraph::Pin::YardPin::Namespace.new(code_object, @spec)
28
+ nspin = Solargraph::Pin::YardPin::Namespace.new(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
31
29
  @namespace_pins[code_object.path] = nspin
32
30
  result.push nspin
33
31
  if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.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.38.2
4
+ version: 0.38.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-10 00:00:00.000000000 Z
11
+ date: 2020-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport
@@ -468,6 +468,7 @@ files:
468
468
  - lib/solargraph/source_map/node_processor/send_node.rb
469
469
  - lib/solargraph/source_map/node_processor/sym_node.rb
470
470
  - lib/solargraph/source_map/region.rb
471
+ - lib/solargraph/stdlib_fills.rb
471
472
  - lib/solargraph/type_checker.rb
472
473
  - lib/solargraph/type_checker/param_def.rb
473
474
  - lib/solargraph/type_checker/problem.rb