Skip to content

Commit 1105081

Browse files
committed
refactor: allow type tokens with spaces in lenient mode
1 parent 2a3ac1a commit 1105081

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ internal fun parseConventionalCommit(message: String, lenient: Boolean = false):
5454
return ParseResult.Error("The commit type is missing or invalid")
5555
}
5656

57+
if (!lenient && type.any(Char::isWhitespace)) {
58+
return ParseResult.Error("The commit type '$type' is invalid")
59+
}
60+
5761
var scope: String? = null
5862

5963
if (reader.consumeIf(CCToken.Type.SCOPE_OPEN_PAREN)) {

src/main/kotlin/com/github/lppedd/cc/parser/specConventionalCommit.flex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ FooterType = [^\s:][^:\r\n]*
9393

9494
<TYPE> {
9595
// The commit type must be at the beginning of the line, and cannot start with a '!'
96-
^[^!(:\s][^(:\s]*\!? {
96+
^[^!(:\r\n][^(:\r\n]*\!? {
9797
if (yycharat(yylength() - 1) == '!') {
9898
yypushback(1);
9999
}

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import kotlin.contracts.contract
77
class ConventionalCommitParserTest {
88
@Test
99
fun `fail incomplete`() {
10-
var result = parseConventionalCommit("f!x")
10+
var result = parseConventionalCommit("fi x:")
11+
assertError(result)
12+
assertEquals("The commit type 'fi x' is invalid", result.message)
13+
14+
result = parseConventionalCommit("f!x")
1115
assertError(result)
1216
assertEquals("The ':' separator is missing after the type/scope", result.message)
1317

@@ -56,13 +60,21 @@ class ConventionalCommitParserTest {
5660

5761
@Test
5862
fun `parse one liner`() {
59-
val result = parseConventionalCommit("fix: foo")
63+
var result = parseConventionalCommit("fix: foo")
6064
assertSuccess(result)
6165

62-
val message = result.message
66+
var message = result.message
6367
assertEquals("fix", message.type)
6468
assertNull(message.scope)
6569
assertEquals("foo", message.subject.trim())
70+
71+
result = parseConventionalCommit("bui (npm):foo", lenient = true)
72+
assertSuccess(result)
73+
74+
message = result.message
75+
assertEquals("bui ", message.type)
76+
assertEquals("npm", message.scope)
77+
assertEquals("foo", message.subject)
6678
}
6779

6880
@Test

0 commit comments

Comments
 (0)