Skip to content

Commit

Permalink
Merge commit '83830861d6c6b7fee3218461f699c7d3b457bf2a' into swift3.0
Browse files Browse the repository at this point in the history
* commit '83830861d6c6b7fee3218461f699c7d3b457bf2a':
  refactor isPrivateLevel(identifier:)
  refactor nameStrippingLeadingUnderscoreIfPrivate
  combine changelog entries for realm#781 and realm#831
  Add support for filePrivate and open in rules

# Conflicts:
#	Source/SwiftLintFramework/Extensions/String+SwiftLint.swift
#	Source/SwiftLintFramework/Rules/MissingDocsRule.swift
  • Loading branch information
norio-nomura committed Nov 30, 2016
2 parents 20a597e + 8383086 commit 48b25b6
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 13 deletions.
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,19 @@
* `closure_spacing` rule now accepts empty bodies with a space.
[Marcelo Fabri](https://github.com/marcelofabri)
[#875](https://github.com/realm/SwiftLint/issues/875)

* Add `TrailingCommaRule` to enforce/forbid trailing commas in arrays and
dictionaries. The default is to forbid them, but this can be changed with
the `mandatory_comma` configuration.
[Marcelo Fabri](https://github.com/marcelofabri)
[#883](https://github.com/realm/SwiftLint/issues/883)

* Add support for `fileprivate` in `PrivateOutletRule` and
`PrivateUnitTestRule`.
[Marcelo Fabri](https://github.com/marcelofabri)
[#781](https://github.com/realm/SwiftLint/issues/781)
[#831](https://github.com/realm/SwiftLint/issues/831)

##### Bug Fixes

* Rule out a few invalid `@IBInspectable` cases in `valid_ibinspectable`.
Expand Down
5 changes: 3 additions & 2 deletions Source/SwiftLintFramework/Extensions/String+SwiftLint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ extension String {

internal func nameStrippingLeadingUnderscoreIfPrivate(
_ dict: [String: SourceKitRepresentable]) -> String {
let privateACL = "source.lang.swift.accessibility.private"
if dict["key.accessibility"] as? String == privateACL && characters.first == "_" {
if let aclString = dict["key.accessibility"] as? String,
let acl = AccessControlLevel(identifier: aclString),
acl.isPrivate && characters.first == "_" {
return substring(from: index(after: startIndex))
}
return self
Expand Down
19 changes: 18 additions & 1 deletion Source/SwiftLintFramework/Rules/MissingDocsRule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,25 +55,41 @@ extension File {

public enum AccessControlLevel: String, CustomStringConvertible {
case Private = "source.lang.swift.accessibility.private"
case FilePrivate = "source.lang.swift.accessibility.fileprivate"
case Internal = "source.lang.swift.accessibility.internal"
case Public = "source.lang.swift.accessibility.public"
case Open = "source.lang.swift.accessibility.open"

internal init?(description value: String) {
switch value {
case "private": self = .Private
case "fileprivate": self = .FilePrivate
case "internal": self = .Internal
case "public": self = .Public
case "open": self = .Open
default: return nil
}
}

init?(identifier value: String) {
self.init(rawValue: value)
}

public var description: String {
switch self {
case .Private: return "private"
case .FilePrivate: return "fileprivate"
case .Internal: return "internal"
case .Public: return "public"
case .Open: return "open"
}
}

// Returns true if is `private` or `fileprivate`
var isPrivate: Bool {
return self == .Private || self == .FilePrivate
}

}

public struct MissingDocsRule: OptInRule {
Expand All @@ -92,7 +108,8 @@ public struct MissingDocsRule: OptInRule {
}

public init() {
parameters = [RuleParameter(severity: .Warning, value: .Public)]
parameters = [RuleParameter(severity: .Warning, value: .Public),
RuleParameter(severity: .Warning, value: .Open)]
}

public let parameters: [RuleParameter<AccessControlLevel>]
Expand Down
16 changes: 10 additions & 6 deletions Source/SwiftLintFramework/Rules/PrivateOutletRule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,11 @@ public struct PrivateOutletRule: ASTRule, OptInRule, ConfigurationProviderRule {
guard isOutlet else { return [] }

// Check if private
let accessibility = (dictionary["key.accessibility"] as? String) ?? ""
let setterAccessiblity = (dictionary["key.setter_accessibility"] as? String) ?? ""
let isPrivate = accessibility == "source.lang.swift.accessibility.private"
let isPrivateSet = setterAccessiblity == "source.lang.swift.accessibility.private"
let accessibility = dictionary["key.accessibility"] as? String
let setterAccessiblity = dictionary["key.setter_accessibility"] as? String

let isPrivate = isPrivateLevel(identifier: accessibility)
let isPrivateSet = isPrivateLevel(identifier: setterAccessiblity)

if isPrivate || (self.configuration.allowPrivateSet && isPrivateSet) {
return []
Expand All @@ -66,8 +67,11 @@ public struct PrivateOutletRule: ASTRule, OptInRule, ConfigurationProviderRule {
return [
StyleViolation(ruleDescription: type(of: self).description,
severity: configuration.severityConfiguration.severity,
location: location
)
location: location)
]
}

private func isPrivateLevel(identifier: String?) -> Bool {
return identifier.flatMap(AccessControlLevel.init(identifier:))?.isPrivate ?? false
}
}
6 changes: 3 additions & 3 deletions Source/SwiftLintFramework/Rules/PrivateUnitTestRule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,15 +168,15 @@ public struct PrivateUnitTestRule: ASTRule, ConfigurationProviderRule {
-> [StyleViolation] {

guard let acl = AccessControlLevel(dictionary) else { return [] }
switch acl {
case .Private:
if acl.isPrivate {
let offset = Int(dictionary["key.offset"] as? Int64 ?? 0)
return [StyleViolation(
ruleDescription: type(of: self).description,
severity: configuration.severityConfiguration.severity,
location: Location(file: file, byteOffset: offset),
reason: configuration.message)]
default: return []
}

return []
}
}

0 comments on commit 48b25b6

Please sign in to comment.