class RBS::Annotate::Annotations

Attributes

items[R]

Public Class Methods

new(items) click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 148
def initialize(items)
  @items = items
end
parse(annotation) click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 119
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

Public Instance Methods

copy_annotation() click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 160
def copy_annotation
  _ = items.find {|a| a.is_a?(Copy) }
end
skip?() click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 152
def skip?
  items.any? {|a| a.is_a?(Skip) }
end
skip_all?() click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 156
def skip_all?
  items.any? {|a| a.is_a?(Skip) && a.skip_children }
end
test_path(path) click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 164
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
test_path_string(pattern, string) click to toggle source
# File rbs-3.2.1/lib/rbs/annotate/annotations.rb, line 191
def test_path_string(pattern, string)
  return true if pattern == string
  return true if string.start_with?(pattern + File::SEPARATOR)

  false
end