123456789_123456789_123456789_123456789_123456789_

Class: RBS::Annotate::Annotations

Relationships & Source Files
Namespace Children
Classes:
Inherits: Object
Defined in: lib/rbs/annotate/annotations.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(items) ⇒ Annotations

[ GitHub ]

  
# File 'lib/rbs/annotate/annotations.rb', line 148

def initialize(items)
  @items = items
end

Class Method Details

.parse(annotation)

[ GitHub ]

  
# File '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

Instance Attribute Details

#items (readonly)

[ GitHub ]

  
# File 'lib/rbs/annotate/annotations.rb', line 146

attr_reader :items

#skip?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rbs/annotate/annotations.rb', line 152

def skip?
  items.any? {|a| a.is_a?(Skip) }
end

#skip_all?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rbs/annotate/annotations.rb', line 156

def skip_all?
  items.any? {|a| a.is_a?(Skip) && a.skip_children }
end

Instance Method Details

#copy_annotation

[ GitHub ]

  
# File 'lib/rbs/annotate/annotations.rb', line 160

def copy_annotation
  _ = items.find {|a| a.is_a?(Copy) }
end

#test_path(path)

[ GitHub ]

  
# File '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)

[ GitHub ]

  
# File '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