diff --git a/Sources/TextFormation/TextualIndenter+Language.swift b/Sources/TextFormation/TextualIndenter+Language.swift index e238072..7ec5248 100644 --- a/Sources/TextFormation/TextualIndenter+Language.swift +++ b/Sources/TextFormation/TextualIndenter+Language.swift @@ -1,65 +1,71 @@ import Foundation public extension TextualIndenter { - static let basicPatterns: [PatternMatcher] = [ - CurrentLinePrefixOutdenter(prefix: "}"), - CurrentLinePrefixOutdenter(prefix: ")"), - CurrentLinePrefixOutdenter(prefix: "]"), + static var basicPatterns: [PatternMatcher] { + [ + CurrentLinePrefixOutdenter(prefix: "}"), + CurrentLinePrefixOutdenter(prefix: ")"), + CurrentLinePrefixOutdenter(prefix: "]"), - PreceedingLinePrefixIndenter(prefix: "{"), - PreceedingLinePrefixIndenter(prefix: "("), - PreceedingLinePrefixIndenter(prefix: "["), + PreceedingLinePrefixIndenter(prefix: "{"), + PreceedingLinePrefixIndenter(prefix: "("), + PreceedingLinePrefixIndenter(prefix: "["), - PreceedingLineSuffixIndenter(suffix: "{"), - PreceedingLineSuffixIndenter(suffix: "("), - PreceedingLineSuffixIndenter(suffix: "["), - ] + PreceedingLineSuffixIndenter(suffix: "{"), + PreceedingLineSuffixIndenter(suffix: "("), + PreceedingLineSuffixIndenter(suffix: "["), + ] + } } public extension TextualIndenter { /// Specialized indentation patterns for Ruby. - static let rubyPatterns: [PatternMatcher] = [ - CurrentLinePrefixOutdenter(prefix: "else"), - CurrentLinePrefixOutdenter(prefix: "elsif"), - CurrentLinePrefixOutdenter(prefix: "ensure"), - CurrentLinePrefixOutdenter(prefix: "rescue"), - CurrentLinePrefixOutdenter(prefix: "when"), - CurrentLinePrefixOutdenter(prefix: "end"), + static var rubyPatterns: [PatternMatcher] { + [ + CurrentLinePrefixOutdenter(prefix: "else"), + CurrentLinePrefixOutdenter(prefix: "elsif"), + CurrentLinePrefixOutdenter(prefix: "ensure"), + CurrentLinePrefixOutdenter(prefix: "rescue"), + CurrentLinePrefixOutdenter(prefix: "when"), + CurrentLinePrefixOutdenter(prefix: "end"), - PreceedingLinePrefixIndenter(prefix: "{"), - PreceedingLinePrefixIndenter(prefix: "("), - PreceedingLinePrefixIndenter(prefix: "["), + PreceedingLinePrefixIndenter(prefix: "{"), + PreceedingLinePrefixIndenter(prefix: "("), + PreceedingLinePrefixIndenter(prefix: "["), - PreceedingLineSuffixIndenter(suffix: "{"), - PreceedingLineSuffixIndenter(suffix: "("), - PreceedingLineSuffixIndenter(suffix: "["), - PreceedingLineSuffixIndenter(suffix: "|"), - PreceedingLineSuffixIndenter(suffix: "do"), + PreceedingLineSuffixIndenter(suffix: "{"), + PreceedingLineSuffixIndenter(suffix: "("), + PreceedingLineSuffixIndenter(suffix: "["), + PreceedingLineSuffixIndenter(suffix: "|"), + PreceedingLineSuffixIndenter(suffix: "do"), - PreceedingLinePrefixIndenter(prefix: "if"), - PreceedingLinePrefixIndenter(prefix: "else"), - PreceedingLinePrefixIndenter(prefix: "elsif"), - PreceedingLinePrefixIndenter(prefix: "ensure"), - PreceedingLinePrefixIndenter(prefix: "rescue"), - PreceedingLinePrefixIndenter(prefix: "when"), - PreceedingLinePrefixIndenter(prefix: "for"), - PreceedingLinePrefixIndenter(prefix: "unless"), - PreceedingLinePrefixIndenter(prefix: "while"), - PreceedingLinePrefixIndenter(prefix: "class"), - PreceedingLinePrefixIndenter(prefix: "module"), - PreceedingLinePrefixIndenter(prefix: "def"), - ] + PreceedingLinePrefixIndenter(prefix: "if"), + PreceedingLinePrefixIndenter(prefix: "else"), + PreceedingLinePrefixIndenter(prefix: "elsif"), + PreceedingLinePrefixIndenter(prefix: "ensure"), + PreceedingLinePrefixIndenter(prefix: "rescue"), + PreceedingLinePrefixIndenter(prefix: "when"), + PreceedingLinePrefixIndenter(prefix: "for"), + PreceedingLinePrefixIndenter(prefix: "unless"), + PreceedingLinePrefixIndenter(prefix: "while"), + PreceedingLinePrefixIndenter(prefix: "class"), + PreceedingLinePrefixIndenter(prefix: "module"), + PreceedingLinePrefixIndenter(prefix: "def"), + ] + } /// Specialized indentation patterns for Python. - static let pythonPatterns: [PatternMatcher] = [ - PreceedingLineSuffixIndenter(suffix: ":"), + static var pythonPatterns: [PatternMatcher] { + [ + PreceedingLineSuffixIndenter(suffix: ":"), - PreceedingLinePrefixIndenter(prefix: "{"), - PreceedingLinePrefixIndenter(prefix: "("), - PreceedingLinePrefixIndenter(prefix: "["), + PreceedingLinePrefixIndenter(prefix: "{"), + PreceedingLinePrefixIndenter(prefix: "("), + PreceedingLinePrefixIndenter(prefix: "["), - PreceedingLineSuffixIndenter(suffix: "{"), - PreceedingLineSuffixIndenter(suffix: "("), - PreceedingLineSuffixIndenter(suffix: "["), - ] + PreceedingLineSuffixIndenter(suffix: "{"), + PreceedingLineSuffixIndenter(suffix: "("), + PreceedingLineSuffixIndenter(suffix: "["), + ] + } } diff --git a/Sources/TextFormation/WhitespaceProviders.swift b/Sources/TextFormation/WhitespaceProviders.swift index e22e8be..0dc38e1 100644 --- a/Sources/TextFormation/WhitespaceProviders.swift +++ b/Sources/TextFormation/WhitespaceProviders.swift @@ -18,9 +18,14 @@ public struct WhitespaceProviders { } extension WhitespaceProviders { - public static let passthroughProvider: StringSubstitutionProvider = { $1.substring(from: $0) ?? "" } - public static let removeAllProvider: StringSubstitutionProvider = { _, _ in return "" } - - public static let none = WhitespaceProviders(leadingWhitespace: WhitespaceProviders.passthroughProvider, - trailingWhitespace: WhitespaceProviders.passthroughProvider) + public static var passthroughProvider: StringSubstitutionProvider { + { $1.substring(from: $0) ?? "" } + } + public static var removeAllProvider: StringSubstitutionProvider { + { _, _ in return "" } + } + public static var none: WhitespaceProviders { + WhitespaceProviders(leadingWhitespace: WhitespaceProviders.passthroughProvider, + trailingWhitespace: WhitespaceProviders.passthroughProvider) + } }