From 9cbc30b9b3caf77986c5623ddf480841a540b4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihat=20Gu=CC=88ndu=CC=88z?= Date: Sat, 3 Jun 2017 18:35:43 +0200 Subject: [PATCH] Add ObjectLiteralConfiguration with color/image options This fixes #1587 by implementing the discussed option config. --- .../Rules/ObjectLiteralRule.swift | 4 +- .../ObjectLiteralConfiguration.swift | 41 +++++++++++++++++++ SwiftLint.xcodeproj/project.pbxproj | 4 ++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 Source/SwiftLintFramework/Rules/RuleConfigurations/ObjectLiteralConfiguration.swift diff --git a/Source/SwiftLintFramework/Rules/ObjectLiteralRule.swift b/Source/SwiftLintFramework/Rules/ObjectLiteralRule.swift index 92efddf6f26..7bb77523ab5 100644 --- a/Source/SwiftLintFramework/Rules/ObjectLiteralRule.swift +++ b/Source/SwiftLintFramework/Rules/ObjectLiteralRule.swift @@ -11,7 +11,7 @@ import SourceKittenFramework public struct ObjectLiteralRule: ASTRule, ConfigurationProviderRule, OptInRule { - public var configuration = SeverityConfiguration(.warning) + public var configuration = ObjectLiteralConfiguration() public init() {} @@ -52,7 +52,7 @@ public struct ObjectLiteralRule: ASTRule, ConfigurationProviderRule, OptInRule { return [ StyleViolation(ruleDescription: type(of: self).description, - severity: configuration.severity, + severity: configuration.severityConfiguration.severity, location: Location(file: file, byteOffset: offset)) ] } diff --git a/Source/SwiftLintFramework/Rules/RuleConfigurations/ObjectLiteralConfiguration.swift b/Source/SwiftLintFramework/Rules/RuleConfigurations/ObjectLiteralConfiguration.swift new file mode 100644 index 00000000000..44283cbda39 --- /dev/null +++ b/Source/SwiftLintFramework/Rules/RuleConfigurations/ObjectLiteralConfiguration.swift @@ -0,0 +1,41 @@ +// +// ObjectLiteralConfiguration.swift +// SwiftLint +// +// Created by Cihat Gündüz on 03.06.17. +// Copyright © 2017 Realm. All rights reserved. +// + +import Foundation + +public struct ObjectLiteralConfiguration: RuleConfiguration, Equatable { + private(set) var severityConfiguration = SeverityConfiguration(.warning) + private(set) var imageLiteral = true + private(set) var colorLiteral = true + + public var consoleDescription: String { + return severityConfiguration.consoleDescription + + ", image_literal: \(imageLiteral)" + + ", color_literal: \(colorLiteral)" + } + + public mutating func apply(configuration: Any) throws { + guard let configuration = configuration as? [String: Any] else { + throw ConfigurationError.unknownConfiguration + } + + imageLiteral = configuration["image_literal"] as? Bool ?? true + colorLiteral = configuration["color_literal"] as? Bool ?? true + + if let severityString = configuration["severity"] as? String { + try severityConfiguration.apply(configuration: severityString) + } + } + + public static func == (lhs: ObjectLiteralConfiguration, + rhs: ObjectLiteralConfiguration) -> Bool { + return lhs.severityConfiguration == rhs.severityConfiguration && + lhs.imageLiteral == rhs.imageLiteral && + lhs.colorLiteral == rhs.colorLiteral + } +} diff --git a/SwiftLint.xcodeproj/project.pbxproj b/SwiftLint.xcodeproj/project.pbxproj index f9d4289e52e..55053e5dc2b 100644 --- a/SwiftLint.xcodeproj/project.pbxproj +++ b/SwiftLint.xcodeproj/project.pbxproj @@ -87,6 +87,7 @@ 85DA81321D6B471000951BC4 /* MarkRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856651A61D6B395F005E6B29 /* MarkRule.swift */; }; 92CCB2D71E1EEFA300C8E5A3 /* UnusedOptionalBindingRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92CCB2D61E1EEFA300C8E5A3 /* UnusedOptionalBindingRule.swift */; }; 93E0C3CE1D67BD7F007FA25D /* ConditionalReturnsOnNewlineRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E0C3CD1D67BD7F007FA25D /* ConditionalReturnsOnNewlineRule.swift */; }; + A1A6F3F21EE319ED00A9F9E2 /* ObjectLiteralConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1A6F3F11EE319ED00A9F9E2 /* ObjectLiteralConfiguration.swift */; }; B2902A0C1D66815600BFCCF7 /* PrivateUnitTestRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2902A0B1D66815600BFCCF7 /* PrivateUnitTestRule.swift */; }; B2902A0E1D6681F700BFCCF7 /* PrivateUnitTestConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2902A0D1D6681F700BFCCF7 /* PrivateUnitTestConfiguration.swift */; }; B3935371E92E0CF3F7668303 /* CannedJunitReporterOutput.xml in Resources */ = {isa = PBXBuildFile; fileRef = B39359A325FE84B7EDD1C455 /* CannedJunitReporterOutput.xml */; }; @@ -365,6 +366,7 @@ 856651A61D6B395F005E6B29 /* MarkRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarkRule.swift; sourceTree = ""; }; 92CCB2D61E1EEFA300C8E5A3 /* UnusedOptionalBindingRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnusedOptionalBindingRule.swift; sourceTree = ""; }; 93E0C3CD1D67BD7F007FA25D /* ConditionalReturnsOnNewlineRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConditionalReturnsOnNewlineRule.swift; sourceTree = ""; }; + A1A6F3F11EE319ED00A9F9E2 /* ObjectLiteralConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectLiteralConfiguration.swift; sourceTree = ""; }; B2902A0B1D66815600BFCCF7 /* PrivateUnitTestRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivateUnitTestRule.swift; sourceTree = ""; }; B2902A0D1D6681F700BFCCF7 /* PrivateUnitTestConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivateUnitTestConfiguration.swift; sourceTree = ""; }; B3935001033261E5A70CE101 /* CannedEmojiReporterOutput.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CannedEmojiReporterOutput.txt; sourceTree = ""; }; @@ -601,6 +603,7 @@ 3BCC04D01C4F56D3006073C3 /* NameConfiguration.swift */, D93DA3CF1E699E4E00809827 /* NestingConfiguration.swift */, D4DA1DFD1E1A10DB0037413D /* NumberSeparatorConfiguration.swift */, + A1A6F3F11EE319ED00A9F9E2 /* ObjectLiteralConfiguration.swift */, 78F032471D7D614300BE709A /* OverridenSuperCallConfiguration.swift */, DAD3BE491D6ECD9500660239 /* PrivateOutletRuleConfiguration.swift */, B2902A0D1D6681F700BFCCF7 /* PrivateUnitTestConfiguration.swift */, @@ -1398,6 +1401,7 @@ C3DE5DAC1E7DF9CA00761483 /* FatalErrorMessageRule.swift in Sources */, 4DCB8E7F1CBE494E0070FCF0 /* RegexHelpers.swift in Sources */, E86396C21BADAAE5002C9E88 /* Reporter.swift in Sources */, + A1A6F3F21EE319ED00A9F9E2 /* ObjectLiteralConfiguration.swift in Sources */, D4B0228E1E0CC608007E5297 /* ClassDelegateProtocolRule.swift in Sources */, E881985F1BEA987C00333A11 /* TypeNameRule.swift in Sources */, D40AD08A1E032F9700F48C30 /* UnusedClosureParameterRule.swift in Sources */,