diff --git a/Sources/PrincipleMacros/Builders/Declarations/Common/DeclBuilder.swift b/Sources/PrincipleMacros/Builders/Declarations/Common/DeclBuilder.swift index 79d66ba..5b1d20e 100644 --- a/Sources/PrincipleMacros/Builders/Declarations/Common/DeclBuilder.swift +++ b/Sources/PrincipleMacros/Builders/Declarations/Common/DeclBuilder.swift @@ -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? { diff --git a/Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax.swift b/Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax.swift index 8a1e020..8157f6a 100644 --- a/Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax.swift +++ b/Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax.swift @@ -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,