lib/yard/cli/yardoc.rb in yard-0.5.0 vs lib/yard/cli/yardoc.rb in yard-0.5.1p1
- old
+ new
@@ -59,48 +59,34 @@
def run(*args)
args += support_rdoc_document_file!
optparse(*yardopts)
optparse(*args)
- Registry.load if use_cache
+ if use_cache
+ Registry.load
+ checksums = Registry.checksums.dup
+ end
YARD.parse(files)
Registry.save(use_cache)
if generate
if use_cache
- objects = all_objects
- Registry.all # load all
- objects.each do |object|
- opts = options.merge(:object => object, :type => :layout)
- Templates::Engine.render(opts)
- end
+ generate_with_cache(checksums)
else
Templates::Engine.generate(all_objects, options)
end
end
true
end
-
+
# The list of all objects to process. Override this method to change
# which objects YARD should generate documentation for.
#
# @return [Array<CodeObjects::Base>] a list of code objects to process
def all_objects
- types = [:root, :module, :class]
- if use_cache
- Registry.paths(false).map do |path|
- obj = Registry.at(path)
- if types.include?(obj.type)
- obj
- else
- nil
- end
- end.compact
- else
- Registry.all(*types)
- end
+ Registry.all(:root, :module, :class)
end
# Parses the .yardopts file for default yard options
# @return [void]
def yardopts
@@ -109,9 +95,26 @@
[]
end
private
+ # Generates output for changed objects in cache
+ # @return [void]
+ def generate_with_cache(checksums)
+ changed_files = []
+ Registry.checksums.each do |file, hash|
+ changed_files << file if checksums[file] != hash
+ end
+ Registry.load_all
+ all_objects.each do |object|
+ if object.files.any? {|f, line| changed_files.include?(f) }
+ log.info "Re-generating object #{object.path}..."
+ opts = options.merge(:object => object, :type => :layout)
+ Templates::Engine.render(opts)
+ end
+ end
+ end
+
# Reads a .document file in the directory to get source file globs
# @return [void]
def support_rdoc_document_file!
IO.read(".document").gsub(/^[ \t]*#.+/m, '').split(/\s+/)
rescue Errno::ENOENT