Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions src/CommitMessageFormatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 ? ' ' : '';
Expand All @@ -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,
};
}

Expand Down
30 changes: 30 additions & 0 deletions test/CommitMessageFormatter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});