diff --git a/src/CommitMessageFormatter.ts b/src/CommitMessageFormatter.ts index a8e1386..7bedbd3 100644 --- a/src/CommitMessageFormatter.ts +++ b/src/CommitMessageFormatter.ts @@ -151,10 +151,10 @@ class CommitMessageFormatter { } if (this._subjectMode === 'split-ellipses') { - const firstLine = rawText.split('\n')[0]; - const words = firstLine.split(' '); + const words = subjectLine.split(' '); + const rest = rawText.substring(subjectLine.length + 1); let formatted = ''; - let rest = ''; + let subjectRest = ''; words.forEach((word, i) => { const prefix = i > 0 ? ' ' : ''; @@ -164,22 +164,24 @@ class CommitMessageFormatter { if ( formatted.length + wordPadded.length + ellipsis.length <= this._subjectLength && - rest === '' + subjectRest === '' ) { formatted += wordPadded; } else { - if (rest === '') { + if (subjectRest === '') { formatted += ellipsis; - rest += ellipsis + word; + subjectRest += ellipsis + word; } else { - rest += ' ' + word; + subjectRest += ' ' + word; } } }); + const restPadded = rest.length > 0 ? '\n\n' + rest : rest; + return { formatted, - rest, + rest: subjectRest + restPadded, }; } diff --git a/test/CommitMessageFormatter.test.ts b/test/CommitMessageFormatter.test.ts index dce1427..96c1843 100644 --- a/test/CommitMessageFormatter.test.ts +++ b/test/CommitMessageFormatter.test.ts @@ -284,4 +284,34 @@ Praesent convallis leo quis eros laoreet, nec viverra nulla ultricies. expect(actual).toBe(expected); }); + + it('Subject mode split-ellipses preserves body', () => { + const raw = trim` +Phasellus ac nisi ac arcu blandit egestas ac non dui. +Etiam sed lorem id mauris posuere porta id at lacus. +Aenean gravida nulla at tempor lobortis. +Fusce rhoncus tellus nec nisl congue bibendum. +Praesent convallis leo quis eros laoreet, nec viverra nulla ultricies. +`; + + const expected = trim` +Phasellus ac nisi ac arcu blandit egestas ac... + +...non dui. + +Etiam sed lorem id mauris posuere porta id at lacus. Aenean gravida +nulla at tempor lobortis. Fusce rhoncus tellus nec nisl congue bibendum. +Praesent convallis leo quis eros laoreet, nec viverra nulla ultricies. +`; + + const formatter = new CommitMessageFormatter({ + lineLength: 72, + subjectLength: 50, + collapseMultipleEmptyLines: false, + subjectMode: 'split-ellipses', + }); + const actual = formatter.format(raw); + + expect(actual).toBe(expected); + }); });