diff --git a/Source/SwiftLintFramework/Rules/Style/NumberSeparatorRule.swift b/Source/SwiftLintFramework/Rules/Style/NumberSeparatorRule.swift index ec5a6e1db..5bd32e015 100644 --- a/Source/SwiftLintFramework/Rules/Style/NumberSeparatorRule.swift +++ b/Source/SwiftLintFramework/Rules/Style/NumberSeparatorRule.swift @@ -27,9 +27,12 @@ public struct NumberSeparatorRule: OptInRule, CorrectableRule, ConfigurationProv private func violatingRanges(in file: File) -> [(NSRange, String)] { let numberTokens = file.syntaxMap.tokens.filter { SyntaxKind(rawValue: $0.type) == .number } return numberTokens.compactMap { (token: SyntaxToken) -> (NSRange, String)? in - guard let content = contentFrom(file: file, token: token), - isDecimal(number: content) else { - return nil + guard + let content = contentFrom(file: file, token: token), + isDecimal(number: content), + !isYearLiteral(number: content) + else { + return nil } let signs = CharacterSet(charactersIn: "+-") @@ -108,6 +111,14 @@ public struct NumberSeparatorRule: OptInRule, CorrectableRule, ConfigurationProv return prefixes.filter { lowercased.hasPrefix($0) }.isEmpty } + private func isYearLiteral(number: String) -> Bool { + if let integer = Int(number), (1500 ..< 2050).contains(integer) { + return true + } + + return false + } + private func isValid(number: String, isFraction: Bool) -> (Bool, String) { var correctComponents = [String]() let clean = number.replacingOccurrences(of: "_", with: "")