[number_separator] Add more non-triggering examples + Rename option to exclude_ranges

This commit is contained in:
Cihat Gündüz
2019-02-14 21:19:15 +01:00
parent 57fe9947a6
commit 3ab600f5a2
3 changed files with 16 additions and 10 deletions
@@ -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]
]