lib/orthoses/yard.rb in orthoses-yard-0.3.0 vs lib/orthoses/yard.rb in orthoses-yard-0.4.0
- old
+ new
@@ -4,25 +4,42 @@
require_relative "yard/yard2rbs"
module Orthoses
# use Orthoses::YARD, parse: "lib/**/*.rb"
class YARD
- def initialize(loader, parse:)
+ # @param loader
+ # @param [<String>, String] parse Target files
+ # @param [Boolean] use_cache Use cache .yardoc
+ # @param [Symbol, nil] log_level Set YARD log level
+ def initialize(loader, parse:, use_cache: true, log_level: nil)
@loader = loader
@parse = Array(parse)
+ @use_cache = use_cache
+ @log_level = log_level
end
+ # @return [void]
def call
@loader.call.tap do |store|
require 'yard'
+ log.level = @log_level if @log_level
+
+ ::YARD::Registry.load if @use_cache
::YARD.parse(@parse)
+ ::YARD::Registry.save(true) if @use_cache
::YARD::Registry.root.children.each do |yardoc|
+ # Skip anonymous yardoc
+ next unless yardoc.file
+
+ # Skip external doc (e.g. pry-doc)
+ next unless @parse.any? { |pattern| File.fnmatch(pattern, yardoc.file, File::FNM_EXTGLOB | File::FNM_PATHNAME) }
+
case yardoc.type
when :class, :module
YARD2RBS.run(yardoc: yardoc) do |namespace, docstring, rbs|
comment = docstring.each_line.map { |line| "# #{line}" }.join
- if rbs.nil?
+ if rbs.nil? && comment && !store.has_key?(namespace)
store[namespace].comment = comment
else
Orthoses.logger.debug("#{namespace} << #{rbs}")
store[namespace] << "#{comment}\n#{rbs}"
end