class Jazzy::SourceDeclaration::AccessControlLevel

Constants

LEVELS

Order matters

LEVELS_INDEX

Attributes

level[R]

Public Class Methods

from_accessibility(accessibility) click to toggle source

From a SourceKit accessibility string

# File lib/jazzy/source_declaration/access_control_level.rb, line 20
def self.from_accessibility(accessibility)
  return nil if accessibility.nil?

  if accessibility =~ /^source\.lang\.swift\.accessibility\.(.*)$/ &&
     (matched = Regexp.last_match(1).to_sym) &&
     !LEVELS_INDEX[matched].nil?
    return new(matched)
  end

  raise "cannot initialize AccessControlLevel with '#{accessibility}'"
end
from_doc(doc) click to toggle source

From a SourceKit declaration hash

# File lib/jazzy/source_declaration/access_control_level.rb, line 33
def self.from_doc(doc)
  return AccessControlLevel.internal if implicit_deinit?(doc)

  from_documentation_attribute(doc) ||
    from_accessibility(doc['key.accessibility']) ||
    from_doc_explicit_declaration(doc) ||
    AccessControlLevel.internal # fallback on internal ACL
end
from_doc_explicit_declaration(doc) click to toggle source

From a Swift declaration

# File lib/jazzy/source_declaration/access_control_level.rb, line 49
def self.from_doc_explicit_declaration(doc)
  declaration = doc['key.parsed_declaration']
  LEVELS.each do |level|
    if declaration =~ /\b#{level}\b/
      return send(level)
    end
  end
  nil
end
from_documentation_attribute(doc) click to toggle source

From a @_documentation(visibility:) attribute

# File lib/jazzy/source_declaration/access_control_level.rb, line 70
def self.from_documentation_attribute(doc)
  if doc['key.annotated_decl'] =~ /@_documentation\(\s*visibility\s*:\s*(\w+)/
    from_human_string(Regexp.last_match[1])
  end
end
from_human_string(string) click to toggle source

From a config instruction

# File lib/jazzy/source_declaration/access_control_level.rb, line 60
def self.from_human_string(string)
  normalized = string.to_s.downcase.to_sym
  if LEVELS_INDEX[normalized].nil?
    raise "cannot initialize AccessControlLevel with '#{string}'"
  end

  send(normalized)
end
implicit_deinit?(doc) click to toggle source

Workaround ‘deinit` being always technically public

# File lib/jazzy/source_declaration/access_control_level.rb, line 43
def self.implicit_deinit?(doc)
  doc['key.name'] == 'deinit' &&
    from_doc_explicit_declaration(doc).nil?
end
new(level) click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 15
def initialize(level)
  @level = level
end

Public Instance Methods

<=>(other) click to toggle source

Comparing access levels

# File lib/jazzy/source_declaration/access_control_level.rb, line 86
def <=>(other)
  LEVELS_INDEX[level] <=> LEVELS_INDEX[other.level]
end
excluded_levels() click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 94
def excluded_levels
  LEVELS_INDEX.select { |_, v| v < LEVELS_INDEX[level] }.keys
end
included_levels() click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 90
def included_levels
  LEVELS_INDEX.select { |_, v| v >= LEVELS_INDEX[level] }.keys
end