solargraph 0.38.2 → 0.38.3

Sign up to get free protection for your applications and to get access to all the features.
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