Class: Solargraph::DocMap
- Inherits:
-
Object
- Object
- Solargraph::DocMap
show all
- Includes:
- Logging
- Defined in:
- lib/solargraph/doc_map.rb
Overview
A collection of pins generated from required gems.
Constant Summary
Constants included
from Logging
Logging::DEFAULT_LOG_LEVEL, Logging::LOG_LEVELS
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Logging
logger
Constructor Details
#initialize(requires, preferences, workspace = nil) ⇒ DocMap
Returns a new instance of DocMap.
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/solargraph/doc_map.rb', line 48
def initialize(requires, preferences, workspace = nil)
@requires = requires.compact
@preferences = preferences.compact
@workspace = workspace
@rbs_collection_path = workspace&.rbs_collection_path
@rbs_collection_config_path = workspace&.rbs_collection_config_path
@environ = Convention.for_global(self)
load_serialized_gem_pins
pins.concat @environ.pins
end
|
Instance Attribute Details
43
44
45
|
# File 'lib/solargraph/doc_map.rb', line 43
def environ
@environ
end
|
20
21
22
|
# File 'lib/solargraph/doc_map.rb', line 20
def pins
@pins
end
|
#preferences ⇒ Array<Gem::Specification>
17
18
19
|
# File 'lib/solargraph/doc_map.rb', line 17
def preferences
@preferences
end
|
#rbs_collection_config_path ⇒ Object
Returns the value of attribute rbs_collection_config_path.
37
38
39
|
# File 'lib/solargraph/doc_map.rb', line 37
def rbs_collection_config_path
@rbs_collection_config_path
end
|
#rbs_collection_path ⇒ Object
Returns the value of attribute rbs_collection_path.
35
36
37
|
# File 'lib/solargraph/doc_map.rb', line 35
def rbs_collection_path
@rbs_collection_path
end
|
#requires ⇒ Array<String>
Also known as:
required
13
14
15
|
# File 'lib/solargraph/doc_map.rb', line 13
def requires
@requires
end
|
#uncached_rbs_collection_gemspecs ⇒ Array<Gem::Specification>
33
34
35
|
# File 'lib/solargraph/doc_map.rb', line 33
def uncached_rbs_collection_gemspecs
@uncached_rbs_collection_gemspecs
end
|
#uncached_yard_gemspecs ⇒ Array<Gem::Specification>
30
31
32
|
# File 'lib/solargraph/doc_map.rb', line 30
def uncached_yard_gemspecs
@uncached_yard_gemspecs
end
|
40
41
42
|
# File 'lib/solargraph/doc_map.rb', line 40
def workspace
@workspace
end
|
Class Method Details
.all_combined_pins_in_memory ⇒ Object
132
133
134
|
# File 'lib/solargraph/doc_map.rb', line 132
def self.all_combined_pins_in_memory
@combined_pins_in_memory ||= {}
end
|
.all_rbs_collection_gems_in_memory ⇒ Object
120
121
122
|
# File 'lib/solargraph/doc_map.rb', line 120
def self.all_rbs_collection_gems_in_memory
@rbs_collection_gems_in_memory ||= {}
end
|
.all_yard_gems_in_memory ⇒ Object
116
117
118
|
# File 'lib/solargraph/doc_map.rb', line 116
def self.all_yard_gems_in_memory
@yard_gems_in_memory ||= {}
end
|
Instance Method Details
#cache(gemspec, rebuild: false, out: nil) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/solargraph/doc_map.rb', line 93
def cache(gemspec, rebuild: false, out: nil)
build_yard = uncached_yard_gemspecs.include?(gemspec) || rebuild
build_rbs_collection = uncached_rbs_collection_gemspecs.include?(gemspec) || rebuild
if build_yard || build_rbs_collection
type = []
type << 'YARD' if build_yard
type << 'RBS collection' if build_rbs_collection
out.puts("Caching #{type.join(' and ')} pins for gem #{gemspec.name}:#{gemspec.version}") if out
end
cache_yard_pins(gemspec, out) if build_yard
cache_rbs_collection_pins(gemspec, out) if build_rbs_collection
end
|
#cache_all!(out) ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/solargraph/doc_map.rb', line 59
def cache_all!(out)
if logger.info?
gem_desc = uncached_gemspecs.map { |gemspec| "#{gemspec.name}:#{gemspec.version}" }.join(', ')
logger.info "Caching pins for gems: #{gem_desc}" unless uncached_gemspecs.empty?
end
logger.debug { "Caching for YARD: #{uncached_yard_gemspecs.map(&:name)}" }
logger.debug { "Caching for RBS collection: #{uncached_rbs_collection_gemspecs.map(&:name)}" }
load_serialized_gem_pins
uncached_gemspecs.each do |gemspec|
cache(gemspec, out: out)
end
load_serialized_gem_pins
@uncached_rbs_collection_gemspecs = []
@uncached_yard_gemspecs = []
end
|
#cache_rbs_collection_pins(gemspec, out) ⇒ Object
82
83
84
85
86
87
88
89
90
|
# File 'lib/solargraph/doc_map.rb', line 82
def cache_rbs_collection_pins(gemspec, out)
rbs_map = RbsMap.from_gemspec(gemspec, rbs_collection_path, rbs_collection_config_path)
pins = rbs_map.pins
rbs_version_cache_key = rbs_map.cache_key
pins ||= []
PinCache.serialize_rbs_collection_gem(gemspec, rbs_version_cache_key, pins)
logger.info { "Cached #{pins.length} RBS collection pins for gem #{gemspec.name} #{gemspec.version} with cache_key #{rbs_version_cache_key.inspect}" unless pins.empty? }
end
|
#cache_yard_pins(gemspec, out) ⇒ Object
76
77
78
79
80
|
# File 'lib/solargraph/doc_map.rb', line 76
def cache_yard_pins(gemspec, out)
pins = GemPins.build_yard_pins(gemspec)
PinCache.serialize_yard_gem(gemspec, pins)
logger.info { "Cached #{pins.length} YARD pins for gem #{gemspec.name}:#{gemspec.version}" } unless pins.empty?
end
|
#combined_pins_in_memory ⇒ Object
136
137
138
|
# File 'lib/solargraph/doc_map.rb', line 136
def combined_pins_in_memory
self.class.all_combined_pins_in_memory
end
|
#dependencies ⇒ Set<Gem::Specification>
141
142
143
|
# File 'lib/solargraph/doc_map.rb', line 141
def dependencies
@dependencies ||= (gemspecs.flat_map { |spec| fetch_dependencies(spec) } - gemspecs).to_set
end
|
#gemspecs ⇒ Array<Gem::Specification>
107
108
109
|
# File 'lib/solargraph/doc_map.rb', line 107
def gemspecs
@gemspecs ||= required_gems_map.values.compact.flatten
end
|
#rbs_collection_pins_in_memory ⇒ Object
128
129
130
|
# File 'lib/solargraph/doc_map.rb', line 128
def rbs_collection_pins_in_memory
self.class.all_rbs_collection_gems_in_memory[rbs_collection_path] ||= {}
end
|
#uncached_gemspecs ⇒ Array<Gem::Specification>
23
24
25
26
27
|
# File 'lib/solargraph/doc_map.rb', line 23
def uncached_gemspecs
uncached_yard_gemspecs.concat(uncached_rbs_collection_gemspecs)
.sort
.uniq { |gemspec| "#{gemspec.name}:#{gemspec.version}" }
end
|
#unresolved_requires ⇒ Array<String>
112
113
114
|
# File 'lib/solargraph/doc_map.rb', line 112
def unresolved_requires
@unresolved_requires ||= required_gems_map.select { |_, gemspecs| gemspecs.nil? }.keys
end
|
#yard_pins_in_memory ⇒ Object
124
125
126
|
# File 'lib/solargraph/doc_map.rb', line 124
def yard_pins_in_memory
self.class.all_yard_gems_in_memory
end
|