Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,10 @@ extension DeclBuilder {

public var inheritedAccessControlLevel: TokenSyntax? {
let settings = settings.accessControlLevel
guard let accessControlLevel = basicDeclaration.accessControlLevel,
let index = TokenKind.accessControlLevels.firstIndex(of: accessControlLevel.tokenKind),
let maxAllowedIndex = Keyword.accessControlLevels.firstIndex(of: settings.maxAllowed)
else {
return nil
}

guard index <= maxAllowedIndex else {
let tokenKind = TokenKind.accessControlLevels[maxAllowedIndex]
return TokenSyntax(tokenKind, presence: .present).withTrailingSpace
}

switch settings.inheritingDeclaration {
case .member:
if let internalIndex = Keyword.accessControlLevels.firstIndex(of: .internal),
index <= internalIndex {
return nil
}
case .peer:
break
}

return accessControlLevel.trimmed.withTrailingSpace
return basicDeclaration.accessControlLevel(
inheritedBy: settings.inheritingDeclaration,
maxAllowed: settings.maxAllowed
)
}

public var inheritedGlobalActorIsolation: AttributeSyntax? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,55 @@ extension WithModifiersSyntax {
}
}

extension WithModifiersSyntax {

public func accessControlLevel(
inheritedBy inheritingDeclaration: InheritingDeclaration,
maxAllowed: Keyword
) -> TokenSyntax? {
guard let accessControlLevel,
let index = TokenKind.accessControlLevels.firstIndex(of: accessControlLevel.tokenKind),
let maxAllowedIndex = Keyword.accessControlLevels.firstIndex(of: maxAllowed)
else {
return nil
}

guard index <= maxAllowedIndex else {
let tokenKind = TokenKind.accessControlLevels[maxAllowedIndex]
return TokenSyntax(tokenKind, presence: .present).withTrailingSpace
}

switch inheritingDeclaration {
case .member:
if let internalIndex = Keyword.accessControlLevels.firstIndex(of: .internal),
index <= internalIndex {
return nil
}
case .peer:
break
}

return accessControlLevel.trimmed.withTrailingSpace
}
}

extension TokenKind {

static let typeScopeSpecifiers = Keyword.typeScopeSpecifiers
fileprivate static let typeScopeSpecifiers = Keyword.typeScopeSpecifiers
.map(TokenKind.keyword)

static let accessControlLevels = Keyword.accessControlLevels
fileprivate static let accessControlLevels = Keyword.accessControlLevels
.map(TokenKind.keyword)
}

extension Keyword {

static let typeScopeSpecifiers: [Keyword] = [
fileprivate static let typeScopeSpecifiers: [Keyword] = [
.static,
.class
]

static let accessControlLevels: [Keyword] = [
fileprivate static let accessControlLevels: [Keyword] = [
.private,
.fileprivate,
.internal,
Expand Down
Loading