class RBS::Annotate::Annotations
def self.parse(annotation)
def self.parse(annotation) string = annotation.string case when match = string.match(/\Aannotate:rdoc:skip(:all)?\Z/) Skip.new( annotation: annotation, skip_children: string.end_with?(":all") ) when match = string.match(/\Aannotate:rdoc:source:from=(?<path>.+)\Z/) Source.new( annotation: annotation, include: (match[:path] or raise).strip ) when match = string.match(/\Aannotate:rdoc:source:skip=(?<path>.+)\Z/) Source.new( annotation: annotation, skip: (match[:path] or raise).strip ) when match = string.match(/\Aannotate:rdoc:copy:(?<name>.+)\Z/) Copy.new( annotation: annotation, source: (match[:name] or raise).strip ) end end
def copy_annotation
def copy_annotation _ = items.find {|a| a.is_a?(Copy) } end
def initialize(items)
def initialize(items) @items = items end
def skip?
def skip? items.any? {|a| a.is_a?(Skip) } end
def skip_all?
def skip_all? items.any? {|a| a.is_a?(Skip) && a.skip_children } end
def test_path(path)
def test_path(path) # @type var source_items: Array[Source] source_items = _ = items.select {|item| item.is_a?(Source) } return true if source_items.empty? result = source_items[0].include_source == nil items.each do |a| if a.is_a?(Source) if pat = a.include_source if test_path_string(pat, path) result = true end end if pat = a.skip_source if test_path_string(pat, path) result = false end end end end result end
def test_path_string(pattern, string)
def test_path_string(pattern, string) return true if pattern == string return true if string.start_with?(pattern + File::SEPARATOR) false end