Skip to content

Commit 56980a3

Browse files
committed
refactor: require a subject separator even in lenient mode
1 parent 30d872d commit 56980a3

File tree

2 files changed

+14
-21
lines changed

2 files changed

+14
-21
lines changed

src/main/kotlin/com/github/lppedd/cc/parser/ConventionalCommitParser.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,31 +62,29 @@ internal fun parseConventionalCommit(message: String, lenient: Boolean = false):
6262

6363
if (reader.consumeIf(CCToken.Type.SCOPE_OPEN_PAREN)) {
6464
scope = reader.consume(CCToken.Type.SCOPE)
65-
val hasCloseParen = reader.consumeIf(CCToken.Type.SCOPE_CLOSE_PAREN)
6665

67-
if (scope.isNullOrBlank()) {
68-
if (!lenient && !hasCloseParen) {
66+
// This message is valid in non-lenient mode:
67+
// 'build( ): updated dev dependencies'
68+
if (scope == null) {
69+
if (!lenient) {
6970
return ParseResult.Error("The commit scope is missing or invalid")
7071
}
7172

72-
// These messages are valid:
73-
// 'build( ): updated dev dependencies'
73+
// This message is valid in lenient mode:
7474
// 'build(): updated dev dependencies'
75-
scope = scope ?: ""
75+
scope = ""
7676
}
7777

78-
// In lenient mode this message without closing parenthesis is valid:
79-
// 'build(np '
80-
if (!lenient && !hasCloseParen) {
78+
if (!reader.consumeIf(CCToken.Type.SCOPE_CLOSE_PAREN)) {
8179
return ParseResult.Error("The commit scope is missing the closing parenthesis")
8280
}
8381
}
8482

8583
val isBreakingChange = reader.consume(CCToken.Type.BREAKING_CHANGE) != null
8684

87-
// In lenient mode this message without a subject separator is valid:
88-
// 'build(npm)'
89-
if (!reader.consumeIf(CCToken.Type.SEPARATOR) && !lenient) {
85+
// The ':' subject separator is required to recognize a Conventional Commits message,
86+
// even in lenient mode
87+
if (!reader.consumeIf(CCToken.Type.SEPARATOR)) {
9088
return ParseResult.Error("The ':' separator is missing after the type/scope")
9189
}
9290

src/test/kotlin/com/github/lppedd/cc/parser/ConventionalCommitParserTest.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,7 @@ class ConventionalCommitParserTest {
4141
assertEquals("fix", message.type)
4242
assertEquals(" ", message.subject)
4343

44-
result = parseConventionalCommit("build(np: ", lenient = true)
45-
assertSuccess(result)
46-
47-
message = result.message
48-
assertEquals("build", message.type)
49-
assertEquals("np: ", message.scope)
50-
assertEquals("", message.subject)
51-
52-
result = parseConventionalCommit("build(npm)", lenient = true)
44+
result = parseConventionalCommit("build(npm):", lenient = true)
5345
assertSuccess(result)
5446

5547
message = result.message
@@ -92,6 +84,9 @@ class ConventionalCommitParserTest {
9284
@Test
9385
fun `parse empty scope`() {
9486
var result = parseConventionalCommit("build(): bar")
87+
assertError(result)
88+
89+
result = parseConventionalCommit("build(): bar", lenient = true)
9590
assertSuccess(result)
9691

9792
var message = result.message

0 commit comments

Comments
 (0)