Skip to content

Commit edd817e

Browse files
authored
feat: add overflow on trailers (#64)
Ref: #63
1 parent a427a79 commit edd817e

File tree

7 files changed

+35481
-35348
lines changed

7 files changed

+35481
-35348
lines changed

corpus/body.txt

+10-106
Original file line numberDiff line numberDiff line change
@@ -64,133 +64,37 @@ And a paragraph.
6464
(message))
6565

6666
================================================================================
67-
Not a trailer
68-
================================================================================
69-
This is a simple subject
70-
71-
:This is a simple body.
72-
: Fake
73-
With a: second line.
74-
75-
An:d a paragraph.
76-
test(trailer): test
77-
--------------------------------------------------------------------------------
78-
79-
(source
80-
(subject)
81-
(message))
82-
83-
================================================================================
84-
Simple trailer
85-
================================================================================
86-
This is a simple subject
87-
88-
Signed-by: gbprod <contact@gb-prod.fr>
89-
--------------------------------------------------------------------------------
90-
91-
(source
92-
(subject)
93-
(message
94-
(trailer
95-
(token)
96-
(value))))
97-
98-
================================================================================
99-
Multiple trailers
100-
================================================================================
101-
This is a simple subject
102-
103-
Signed-by : gbprod <contact@gb-prod.fr>
104-
Signed-off-by: Bob <bob@example.com>
105-
Acked-by: Alice <alice@example.com>
106-
Ref: #1234
107-
Suggested-by: Toto
108-
109-
--------------------------------------------------------------------------------
110-
111-
(source
112-
(subject)
113-
(message
114-
(trailer
115-
(token)
116-
(value))
117-
(trailer
118-
(token)
119-
(value))
120-
(trailer
121-
(token)
122-
(value))
123-
(trailer
124-
(token)
125-
(value))
126-
(trailer
127-
(token)
128-
(value))))
129-
130-
================================================================================
131-
Multiline trailers
132-
================================================================================
133-
This is a simple subject
134-
135-
key: This is a very long value, with spaces and
136-
newlines in it.
137-
138-
--------------------------------------------------------------------------------
139-
140-
(source
141-
(subject)
142-
(message
143-
(trailer
144-
(token)
145-
(value))))
146-
147-
================================================================================
148-
Mixed
67+
BREAKING CHANGE
14968
================================================================================
150-
This is a simple subject
15169

152-
With a message
153-
Signed-by : gbprod <contact@gb-prod.fr>
154-
155-
Not conventional but why not
156-
Ref: #1234
157-
Suggested-by: Toto
158-
159-
And go on
70+
test
16071

72+
BREAKING CHANGE: My message
73+
BREAKING-CHANGE: also valid
16174
--------------------------------------------------------------------------------
16275

16376
(source
164-
(subject)
16577
(message
166-
(trailer
167-
(token)
168-
(value))
169-
(trailer
78+
(breaking_change
17079
(token)
17180
(value))
172-
(trailer
81+
(breaking_change
17382
(token)
17483
(value))))
17584

17685
================================================================================
177-
BREAKING CHANGE
86+
BREAKING CHANGE with overflow
17887
================================================================================
17988

180-
test
181-
182-
BREAKING CHANGE: My message
183-
BREAKING-CHANGE: also valid
89+
BREAKING CHANGE: My message with a long long text that will overflow with ease.
18490
--------------------------------------------------------------------------------
18591

18692
(source
18793
(message
18894
(breaking_change
18995
(token)
190-
(value))
191-
(breaking_change
192-
(token)
193-
(value))))
96+
(value)
97+
(overflow))))
19498

19599
================================================================================
196100
Overflowed summary

corpus/trailers.txt

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
================================================================================
2+
Not a trailer
3+
================================================================================
4+
This is a simple subject
5+
6+
:This is a simple body.
7+
: Fake
8+
With a: second line.
9+
10+
An:d a paragraph.
11+
test(trailer): test
12+
--------------------------------------------------------------------------------
13+
14+
(source
15+
(subject)
16+
(message))
17+
18+
================================================================================
19+
Simple trailer
20+
================================================================================
21+
This is a simple subject
22+
23+
Signed-by: gbprod <contact@gb-prod.fr>
24+
--------------------------------------------------------------------------------
25+
26+
(source
27+
(subject)
28+
(message
29+
(trailer
30+
(token)
31+
(value))))
32+
33+
================================================================================
34+
Multiple trailers
35+
================================================================================
36+
This is a simple subject
37+
38+
Signed-by : gbprod <contact@gb-prod.fr>
39+
Signed-off-by: Bob <bob@example.com>
40+
Acked-by: Alice <alice@example.com>
41+
Ref: #1234
42+
Suggested-by: Toto
43+
44+
--------------------------------------------------------------------------------
45+
46+
(source
47+
(subject)
48+
(message
49+
(trailer
50+
(token)
51+
(value))
52+
(trailer
53+
(token)
54+
(value))
55+
(trailer
56+
(token)
57+
(value))
58+
(trailer
59+
(token)
60+
(value))
61+
(trailer
62+
(token)
63+
(value))))
64+
65+
================================================================================
66+
Multiline trailers
67+
================================================================================
68+
This is a simple subject
69+
70+
key: This is a very long value, with spaces and
71+
newlines in it.
72+
73+
--------------------------------------------------------------------------------
74+
75+
(source
76+
(subject)
77+
(message
78+
(trailer
79+
(token)
80+
(value))))
81+
82+
================================================================================
83+
Mixed
84+
================================================================================
85+
This is a simple subject
86+
87+
With a message
88+
Signed-by : gbprod <contact@gb-prod.fr>
89+
90+
Not conventional but why not
91+
Ref: #1234
92+
Suggested-by: Toto
93+
94+
And go on
95+
96+
--------------------------------------------------------------------------------
97+
98+
(source
99+
(subject)
100+
(message
101+
(trailer
102+
(token)
103+
(value))
104+
(trailer
105+
(token)
106+
(value))
107+
(trailer
108+
(token)
109+
(value))))
110+
111+
================================================================================
112+
Overflowed trailers
113+
================================================================================
114+
This is a simple subject
115+
116+
key: This is a very long value, with spaces and that will overflow the line size.
117+
118+
--------------------------------------------------------------------------------
119+
120+
(source
121+
(subject)
122+
(message
123+
(trailer
124+
(token)
125+
(value)
126+
(overflow))))

grammar.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,19 @@ const SCOPE = /[^\n\r\(\)]+/;
1212
const COMMENT = /[^\n\r]*\r?\n/;
1313
const COMMENT_TITLE = /[^\n\r:\uff1a]+[:\uff1a]\s*\r?\n/;
1414
const TRAILER_TOKEN = /[a-zA-Z-]+[ ]*[:\uff1a] /;
15-
const TRAILER_VALUE = /[^\n\r]+(\r?\n [^\n\r]+)*/;
1615
const GENERATED_COMMENT_TITLE = /[^\n\r:\uff1a]+[:\uff1a][ ]*/;
1716
const NUMBER = /\d+/;
18-
const BREAKING_CHANGE = /BREAKING[- ]CHANGE/;
17+
const BREAKING_CHANGE = /BREAKING[- ]CHANGE[ ]*[:\uff1a] /;
1918

2019
module.exports = grammar({
2120
name: 'gitcommit',
2221
extras: () => [],
2322

24-
externals: ($) => [$._conventional_type, $._conventional_subject],
23+
externals: ($) => [
24+
$._conventional_type,
25+
$._conventional_subject,
26+
$._trailer_value,
27+
],
2528

2629
rules: {
2730
source: ($) =>
@@ -60,14 +63,19 @@ module.exports = grammar({
6063
seq(seq(NOT_A_COMMENT, SUMMARY), optional(alias(ANYTHING, $.overflow))),
6164

6265
trailer: ($) =>
63-
seq(alias(TRAILER_TOKEN, $.token), alias(TRAILER_VALUE, $.value)),
66+
seq(
67+
alias(TRAILER_TOKEN, $.token),
68+
alias($._trailer_value, $.value),
69+
optional(alias(ANYTHING, $.overflow))
70+
),
6471

6572
breaking_change: ($) =>
6673
seq(
6774
// BREAKING_CHANGE conflicts with TRAILER_TOKEN, an so requires higher
6875
// lexical precedence
6976
alias(token(prec(1, BREAKING_CHANGE)), $.token),
70-
alias(ANYTHING, $.value)
77+
alias($._trailer_value, $.value),
78+
optional(alias(ANYTHING, $.overflow))
7179
),
7280

7381
comment: ($) =>

src/grammar.json

+43-5
Original file line numberDiff line numberDiff line change
@@ -327,11 +327,28 @@
327327
{
328328
"type": "ALIAS",
329329
"content": {
330-
"type": "PATTERN",
331-
"value": "[^\\n\\r]+(\\r?\\n [^\\n\\r]+)*"
330+
"type": "SYMBOL",
331+
"name": "_trailer_value"
332332
},
333333
"named": true,
334334
"value": "value"
335+
},
336+
{
337+
"type": "CHOICE",
338+
"members": [
339+
{
340+
"type": "ALIAS",
341+
"content": {
342+
"type": "PATTERN",
343+
"value": "[^\\n\\r]+"
344+
},
345+
"named": true,
346+
"value": "overflow"
347+
},
348+
{
349+
"type": "BLANK"
350+
}
351+
]
335352
}
336353
]
337354
},
@@ -347,7 +364,7 @@
347364
"value": 1,
348365
"content": {
349366
"type": "PATTERN",
350-
"value": "BREAKING[- ]CHANGE"
367+
"value": "BREAKING[- ]CHANGE[ ]*[:\\uff1a] "
351368
}
352369
}
353370
},
@@ -357,11 +374,28 @@
357374
{
358375
"type": "ALIAS",
359376
"content": {
360-
"type": "PATTERN",
361-
"value": "[^\\n\\r]+"
377+
"type": "SYMBOL",
378+
"name": "_trailer_value"
362379
},
363380
"named": true,
364381
"value": "value"
382+
},
383+
{
384+
"type": "CHOICE",
385+
"members": [
386+
{
387+
"type": "ALIAS",
388+
"content": {
389+
"type": "PATTERN",
390+
"value": "[^\\n\\r]+"
391+
},
392+
"named": true,
393+
"value": "overflow"
394+
},
395+
{
396+
"type": "BLANK"
397+
}
398+
]
365399
}
366400
]
367401
},
@@ -4250,6 +4284,10 @@
42504284
{
42514285
"type": "SYMBOL",
42524286
"name": "_conventional_subject"
4287+
},
4288+
{
4289+
"type": "SYMBOL",
4290+
"name": "_trailer_value"
42534291
}
42544292
],
42554293
"inline": [],

0 commit comments

Comments
 (0)