Skip to content

Commit 21dcb3c

Browse files
authored
Merge pull request #4 from AppDifferentia/add-commit-lint-implementation
Add commit lint implementation
2 parents c944159 + dbe315d commit 21dcb3c

29 files changed

+755
-243
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
struct BodyEmptyLine: CommitLint, Hashable {
4+
static var linterMessage = "Please separate commit message subject from body with newline."
5+
6+
private let bodyLinesOfText: [String]
7+
8+
init(_ commitMessage: GitCommitMessage) {
9+
bodyLinesOfText = commitMessage.bodyLinesOfText
10+
}
11+
12+
var fail: Bool {
13+
bodyLinesOfText.isEmpty ? false : bodyLinesOfText.first?.isEmpty == false
14+
}
15+
}

Sources/DangerSwiftCommitLint/CommitChecker/BodyEmptyLineCheck.swift

Lines changed: 0 additions & 15 deletions
This file was deleted.

Sources/DangerSwiftCommitLint/CommitChecker/CommitChecker.swift

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Foundation
2+
3+
public protocol CommitLint {
4+
static var linterMessage: String { get }
5+
6+
var fail: Bool { get }
7+
8+
init(_ commitMessage: GitCommitMessage)
9+
10+
static func fail(_ commitMessage: GitCommitMessage) -> Bool
11+
}
12+
13+
public extension CommitLint {
14+
static func fail(_ commitMessage: GitCommitMessage) -> Bool {
15+
Self(commitMessage).fail
16+
}
17+
}

Sources/DangerSwiftCommitLint/CommitChecker/CommitMessage.swift

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Danger
2+
import Foundation
3+
4+
/// An abstraction of Git commit message for `DangerSwiftCommitLint`.
5+
public struct GitCommitMessage: Hashable {
6+
/// First line of the commit message
7+
public let subject: String
8+
/// Rest of the commit message
9+
public let bodyLinesOfText: [String]
10+
// Commit SHA value
11+
public let sha: String?
12+
13+
init(
14+
subject: String,
15+
bodyLinesOfText: [String],
16+
sha: String
17+
) {
18+
self.subject = subject
19+
self.bodyLinesOfText = bodyLinesOfText
20+
self.sha = sha
21+
}
22+
23+
/// Initialize `GitCommitMessage` with `Danger.Git.Commit.message`
24+
/// - Parameter gitCommit: An instance of `Danger.Git.Commit`
25+
public init(_ gitCommit: Git.Commit) {
26+
let commitMessageLines = gitCommit.message.components(separatedBy: .newlines)
27+
subject = commitMessageLines.first ?? ""
28+
bodyLinesOfText = Array(commitMessageLines.dropFirst())
29+
sha = gitCommit.sha
30+
}
31+
}

Sources/DangerSwiftCommitLint/CommitChecker/SubjectCapCheck.swift

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
struct SubjectCapitalLetter: CommitLint, Hashable {
4+
static let linterMessage = "Please start commit message subject with capital letter."
5+
6+
private let firstCharacter: Character?
7+
8+
init(_ commitMessage: GitCommitMessage) {
9+
firstCharacter = commitMessage.subject.first
10+
}
11+
12+
var fail: Bool {
13+
firstCharacter?.isLowercase ?? false
14+
}
15+
}

Sources/DangerSwiftCommitLint/CommitChecker/SubjectLengthCheck.swift renamed to Sources/DangerSwiftCommitLint/CommitChecker/SubjectLength.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import Foundation
22

3-
struct SubjectLengthCheck: CommitChecker {
3+
struct SubjectLength: CommitLint, Hashable {
44
private enum GeneratedSubjectPattern {
55
static let git = #"^Merge branch '.+' into "#
66
static let gitHub = #"^Merge pull request #\d+ from "#
77
}
88

9-
static let warningMessage = "Please limit commit message subject line to 50 characters."
9+
static let linterMessage = "Please limit commit message subject line to 50 characters."
1010

1111
private let subject: String
1212

13-
init(message: CommitMessage) {
14-
subject = message.subject
13+
init(_ commitMessage: GitCommitMessage) {
14+
subject = commitMessage.subject
1515
}
1616

1717
var fail: Bool {
1818
subject.count > 50 && isMergeCommit == false
1919
}
2020
}
2121

22-
private extension SubjectLengthCheck {
22+
private extension SubjectLength {
2323
var isMergeCommit: Bool {
2424
subject =~ GeneratedSubjectPattern.git || subject =~ GeneratedSubjectPattern.gitHub
2525
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
struct SubjectPeriod: CommitLint, Hashable {
4+
static var linterMessage = "Please remove period from end of commit message subject line."
5+
6+
private let subject: String
7+
8+
init(_ commitMessage: GitCommitMessage) {
9+
subject = commitMessage.subject
10+
}
11+
12+
var fail: Bool {
13+
subject.last == "."
14+
}
15+
}

0 commit comments

Comments
 (0)