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.
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/solargraph/doc_map.rb', line 47
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
42
43
44
|
# File 'lib/solargraph/doc_map.rb', line 42
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.
36
37
38
|
# File 'lib/solargraph/doc_map.rb', line 36
def rbs_collection_config_path
@rbs_collection_config_path
end
|
#rbs_collection_path ⇒ Object
Returns the value of attribute rbs_collection_path.
34
35
36
|
# File 'lib/solargraph/doc_map.rb', line 34
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>
32
33
34
|
# File 'lib/solargraph/doc_map.rb', line 32
def uncached_rbs_collection_gemspecs
@uncached_rbs_collection_gemspecs
end
|
#uncached_yard_gemspecs ⇒ Array<Gem::Specification>
29
30
31
|
# File 'lib/solargraph/doc_map.rb', line 29
def uncached_yard_gemspecs
@uncached_yard_gemspecs
end
|
39
40
41
|
# File 'lib/solargraph/doc_map.rb', line 39
def workspace
@workspace
end
|
Class Method Details
.all_combined_pins_in_memory ⇒ Object
131
132
133
|
# File 'lib/solargraph/doc_map.rb', line 131
def self.all_combined_pins_in_memory
@combined_pins_in_memory ||= {}
end
|
.all_rbs_collection_gems_in_memory ⇒ Object
119
120
121
|
# File 'lib/solargraph/doc_map.rb', line 119
def self.all_rbs_collection_gems_in_memory
@rbs_collection_gems_in_memory ||= {}
end
|
.all_yard_gems_in_memory ⇒ Object
115
116
117
|
# File 'lib/solargraph/doc_map.rb', line 115
def self.all_yard_gems_in_memory
@yard_gems_in_memory ||= {}
end
|
Instance Method Details
#cache(gemspec, rebuild: false, out: nil) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/solargraph/doc_map.rb', line 92
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/solargraph/doc_map.rb', line 58
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
81
82
83
84
85
86
87
88
89
|
# File 'lib/solargraph/doc_map.rb', line 81
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
75
76
77
78
79
|
# File 'lib/solargraph/doc_map.rb', line 75
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
135
136
137
|
# File 'lib/solargraph/doc_map.rb', line 135
def combined_pins_in_memory
self.class.all_combined_pins_in_memory
end
|
#dependencies ⇒ Set<Gem::Specification>
140
141
142
|
# File 'lib/solargraph/doc_map.rb', line 140
def dependencies
@dependencies ||= (gemspecs.flat_map { |spec| fetch_dependencies(spec) } - gemspecs).to_set
end
|
#gemspecs ⇒ Array<Gem::Specification>
106
107
108
|
# File 'lib/solargraph/doc_map.rb', line 106
def gemspecs
@gemspecs ||= required_gems_map.values.compact.flatten
end
|
#rbs_collection_pins_in_memory ⇒ Object
127
128
129
|
# File 'lib/solargraph/doc_map.rb', line 127
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
|
# File 'lib/solargraph/doc_map.rb', line 23
def uncached_gemspecs
(uncached_yard_gemspecs + uncached_rbs_collection_gemspecs).sort.
uniq { |gemspec| "#{gemspec.name}:#{gemspec.version}" }
end
|
#unresolved_requires ⇒ Array<String>
111
112
113
|
# File 'lib/solargraph/doc_map.rb', line 111
def unresolved_requires
@unresolved_requires ||= required_gems_map.select { |_, gemspecs| gemspecs.nil? }.keys
end
|
#yard_pins_in_memory ⇒ Object
123
124
125
|
# File 'lib/solargraph/doc_map.rb', line 123
def yard_pins_in_memory
self.class.all_yard_gems_in_memory
end
|