mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
[number_separator] Add more non-triggering examples + Rename option to exclude_ranges
This commit is contained in:
+5
-5
@@ -2,7 +2,7 @@ public struct NumberSeparatorConfiguration: RuleConfiguration, Equatable {
|
||||
private(set) var severityConfiguration = SeverityConfiguration(.warning)
|
||||
private(set) var minimumLength: Int
|
||||
private(set) var minimumFractionLength: Int?
|
||||
private(set) var validRanges: [Range<Double>]
|
||||
private(set) var excludeRanges: [Range<Double>]
|
||||
|
||||
public var consoleDescription: String {
|
||||
let minimumFractionLengthDescription: String
|
||||
@@ -16,10 +16,10 @@ public struct NumberSeparatorConfiguration: RuleConfiguration, Equatable {
|
||||
+ minimumFractionLengthDescription
|
||||
}
|
||||
|
||||
public init(minimumLength: Int, minimumFractionLength: Int?, validRanges: [Range<Double>]) {
|
||||
public init(minimumLength: Int, minimumFractionLength: Int?, excludeRanges: [Range<Double>]) {
|
||||
self.minimumLength = minimumLength
|
||||
self.minimumFractionLength = minimumFractionLength
|
||||
self.validRanges = validRanges
|
||||
self.excludeRanges = excludeRanges
|
||||
}
|
||||
|
||||
public mutating func apply(configuration: Any) throws {
|
||||
@@ -35,8 +35,8 @@ public struct NumberSeparatorConfiguration: RuleConfiguration, Equatable {
|
||||
self.minimumFractionLength = minimumFractionLength
|
||||
}
|
||||
|
||||
if let validRanges = configuration["valid_ranges"] as? [[String: Any]] {
|
||||
self.validRanges = validRanges.compactMap { dict in
|
||||
if let excludeRanges = configuration["exclude_ranges"] as? [[String: Any]] {
|
||||
self.excludeRanges = excludeRanges.compactMap { dict in
|
||||
guard let min = dict["min"] as? Double, let max = dict["max"] as? Double else { return nil }
|
||||
return min ..< max
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ public struct NumberSeparatorRule: OptInRule, CorrectableRule, ConfigurationProv
|
||||
public var configuration = NumberSeparatorConfiguration(
|
||||
minimumLength: 0,
|
||||
minimumFractionLength: nil,
|
||||
validRanges: []
|
||||
excludeRanges: []
|
||||
)
|
||||
|
||||
public init() {}
|
||||
@@ -116,7 +116,8 @@ public struct NumberSeparatorRule: OptInRule, CorrectableRule, ConfigurationProv
|
||||
}
|
||||
|
||||
private func isInValidRanges(number: String) -> Bool {
|
||||
if let double = Double(number), configuration.validRanges.contains(where: { $0.contains(double) }) {
|
||||
let doubleValue = Double(number.replacingOccurrences(of: "_", with: ""))
|
||||
if let doubleValue = doubleValue, configuration.excludeRanges.contains(where: { $0.contains(doubleValue) }) {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -59,13 +59,18 @@ class NumberSeparatorRuleTests: XCTestCase {
|
||||
verifyRule(description, ruleConfiguration: ["minimum_fraction_length": 5])
|
||||
}
|
||||
|
||||
func testNumberSeparatorWithValidRanges() {
|
||||
func testNumberSeparatorWithExcludeRanges() {
|
||||
let nonTriggeringExamples = [
|
||||
"let foo = 1950",
|
||||
"let foo = 1_950",
|
||||
"let foo = 1985",
|
||||
"let foo = 1_985",
|
||||
"let foo = 2020",
|
||||
"let foo = 2_020",
|
||||
"let foo = 2.10042",
|
||||
"let foo = 2.833333"
|
||||
"let foo = 2.100_42",
|
||||
"let foo = 2.833333",
|
||||
"let foo = 2.833_333"
|
||||
]
|
||||
let triggeringExamples = [
|
||||
"let foo = ↓1000",
|
||||
@@ -88,7 +93,7 @@ class NumberSeparatorRuleTests: XCTestCase {
|
||||
verifyRule(
|
||||
description,
|
||||
ruleConfiguration: [
|
||||
"valid_ranges": [
|
||||
"exclude_ranges": [
|
||||
["min": 1900, "max": 2030],
|
||||
["min": 2.0, "max": 3.0]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user