diff --git a/packages/cli-repl/src/format-output.spec.ts b/packages/cli-repl/src/format-output.spec.ts index db249343a9..917fa1fb1b 100644 --- a/packages/cli-repl/src/format-output.spec.ts +++ b/packages/cli-repl/src/format-output.spec.ts @@ -287,6 +287,28 @@ for (const colors of [ false, true ]) { expect(output).to.not.contain('https://docs.mongodb.com'); expect(output).to.contain('list available databases'); }); + + it('handles multi-line descriptions', () => { + const output = stripAnsiColors(format({ + value: { + help: 'Shell API', + attr: [{ + name: 'show dbs', + description: 'list available\ndatabases\n\nwith line breaks' + }] + }, + type: 'Help' + })); + + expect(output).to.equal(` + Shell API: + + show dbs list available + databases + + with line breaks +`); + }); }); context('when the result is ExplainOutput or ExplainableCursor', () => { diff --git a/packages/cli-repl/src/format-output.ts b/packages/cli-repl/src/format-output.ts index 37d3676249..cfde3f8bf7 100644 --- a/packages/cli-repl/src/format-output.ts +++ b/packages/cli-repl/src/format-output.ts @@ -221,7 +221,14 @@ function formatHelp(value: HelpProperties, options: FormatOptions): string { if (method.name && method.description) { formatted = ` ${method.name}`; const extraSpaces = argLen - formatted.length; - formatted += `${' '.repeat(extraSpaces)}${method.description}`; + const descriptionLines = method.description.split('\n'); + descriptionLines[0] = ' '.repeat(extraSpaces) + descriptionLines[0]; + for (let i = 1; i < descriptionLines.length; i++) { + if (descriptionLines[i].trim() !== '') { + descriptionLines[i] = ' '.repeat(argLen) + descriptionLines[i]; + } + } + formatted += descriptionLines.join('\n'); } if (!method.name && method.description) { formatted = ` ${method.description}`;