mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
Switched Configurable rule to a failable initializer that takes AnyObject.
This commit is contained in:
@@ -122,10 +122,15 @@ public struct Configuration: Equatable {
|
||||
static func rulesFromDict(dict: [String: AnyObject]? = nil, ruleList: RuleList = masterRuleList) -> [Rule] {
|
||||
var rules = [Rule]()
|
||||
for rule in ruleList.list.values {
|
||||
let identifier = rule.description.identifier
|
||||
if rule is ConfigurableRule.Type,
|
||||
let ruleConfig = dict?[rule.description.identifier] {
|
||||
let ruleConfig = dict?[identifier] {
|
||||
// swiftlint:disable force_cast
|
||||
rules.append((rule as! ConfigurableRule.Type).init(config: [rule.description.identifier: ruleConfig]))
|
||||
if let configuredRule = (rule as! ConfigurableRule.Type).init(config: ruleConfig) {
|
||||
rules.append(configuredRule)
|
||||
} else {
|
||||
queuedPrintError("Invalid config for \(identifier). Falling back to default")
|
||||
}
|
||||
// swiftlint:enabld force_cast
|
||||
} else {
|
||||
rules.append(rule.init())
|
||||
|
||||
@@ -28,8 +28,7 @@ public protocol ParameterizedRule: Rule {
|
||||
}
|
||||
|
||||
public protocol ConfigurableRule: Rule {
|
||||
// TODO: Should switch this to AnyObject and failable
|
||||
init(config: [String: AnyObject])
|
||||
init?(config: AnyObject)
|
||||
func isEqualTo(rule: ConfigurableRule) -> Bool
|
||||
}
|
||||
|
||||
@@ -42,11 +41,11 @@ extension ParameterizedRule {
|
||||
|
||||
extension ParameterizedRule where Self: ConfigurableRule, ParameterType == Int {
|
||||
|
||||
public init(config: [String: AnyObject]) {
|
||||
if let array = Self.arrayOfInts(config[Self.description.identifier]) {
|
||||
public init?(config: AnyObject) {
|
||||
if let array = Self.arrayOfInts(config) {
|
||||
self.init(parameters: RuleParameter<Int>.ruleParametersFromArray(array))
|
||||
} else {
|
||||
self.init()
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -113,42 +113,35 @@ class RuleTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParameterizedConfigurableRuleInits() {
|
||||
let config = [RuleMock1.description.identifier: [1, 2]]
|
||||
let config = [1, 2]
|
||||
let rule = ConfigurableRuleMock1.init(config: config)
|
||||
XCTAssertEqual(rule.parameters, RuleParameter<Int>.ruleParametersFromArray([1, 2]))
|
||||
XCTAssertEqual(rule!.parameters, RuleParameter<Int>.ruleParametersFromArray([1, 2]))
|
||||
}
|
||||
|
||||
func testParameterizedConfigurableRuleDoesntInit() {
|
||||
let config = [RuleMock1.description.identifier: ["a", "b"]]
|
||||
let rule = ConfigurableRuleMock1.init(config: config)
|
||||
XCTAssertNotEqual(rule.parameters, RuleParameter<Int>.ruleParametersFromArray([1, 2]))
|
||||
}
|
||||
|
||||
func testParameterizedConfigurableFallbackInit() {
|
||||
let config = [RuleMock1.description.identifier: ["a", "b"]]
|
||||
let rule = ConfigurableRuleMock1.init(config: config)
|
||||
XCTAssertEqual(rule.parameters, ConfigurableRuleMock1().parameters)
|
||||
let config = ["a", "b"]
|
||||
XCTAssertNil(ConfigurableRuleMock1.init(config: config))
|
||||
}
|
||||
|
||||
func testParameterizedConfigurableRuleEqual() {
|
||||
let config1 = [RuleMock1.description.identifier: [1, 2]]
|
||||
let config2 = [RuleMock1.description.identifier: [1, 2]]
|
||||
XCTAssertTrue(ConfigurableRuleMock1.init(config: config1)
|
||||
.isEqualTo(ConfigurableRuleMock1.init(config: config2)))
|
||||
let config1 = [1, 2]
|
||||
let config2 = [1, 2]
|
||||
XCTAssertTrue(ConfigurableRuleMock1.init(config: config1)!
|
||||
.isEqualTo(ConfigurableRuleMock1.init(config: config2)!))
|
||||
}
|
||||
|
||||
func testParameterizedConfigurableRuleNotEqual() {
|
||||
let config1 = [RuleMock1.description.identifier: [1, 2]]
|
||||
let config2 = [RuleMock1.description.identifier: [3, 4]]
|
||||
XCTAssertFalse(ConfigurableRuleMock1.init(config: config1)
|
||||
.isEqualTo(ConfigurableRuleMock1.init(config: config2)))
|
||||
let config1 = [1, 2]
|
||||
let config2 = [3, 4]
|
||||
XCTAssertFalse(ConfigurableRuleMock1.init(config: config1)!
|
||||
.isEqualTo(ConfigurableRuleMock1.init(config: config2)!))
|
||||
}
|
||||
|
||||
func testDifferentParameterizedConfigurableRulesNotEqual() {
|
||||
let config1 = [RuleMock1.description.identifier: [1, 2]]
|
||||
let config2 = [RuleMock2.description.identifier: [1, 2]]
|
||||
XCTAssertFalse(ConfigurableRuleMock1.init(config: config1)
|
||||
.isEqualTo(ConfigurableRuleMock2.init(config: config2)))
|
||||
let config1 = [1, 2]
|
||||
let config2 = [1, 2]
|
||||
XCTAssertFalse(ConfigurableRuleMock1.init(config: config1)!
|
||||
.isEqualTo(ConfigurableRuleMock2.init(config: config2)!))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user