diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/carapace_generator.dart b/packages/cli_tools/lib/src/better_command_runner/completion/carapace_generator.dart index db883d3..5605635 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/carapace_generator.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/carapace_generator.dart @@ -113,9 +113,10 @@ class CarapaceYamlGenerator implements UsageRepresentationGenerator { attributes += '!'; } + final optionHelp = _formatYamlStringValue(option.helpText ?? ''); _writeWithIndent( out, - '${names.join(', ')}$attributes: ${option.helpText ?? ''}', + '${names.join(', ')}$attributes: $optionHelp', indentLevel, ); @@ -123,7 +124,7 @@ class CarapaceYamlGenerator implements UsageRepresentationGenerator { if (flagOption.negatable && !flagOption.hideNegatedUsage) { _writeWithIndent( out, - '--no-${option.argName}$attributes: ${option.helpText ?? ''}', + '--no-${option.argName}$attributes: $optionHelp', indentLevel, ); } @@ -191,4 +192,14 @@ class CarapaceYamlGenerator implements UsageRepresentationGenerator { return []; } } + + static String _formatYamlStringValue(final String value) { + final str = value + .replaceAll(r'\', r'\\') + .replaceAll(r'"', r'\"') + .replaceAll('\n', r'\n') + .replaceAll('\t', r'\t') + .replaceAll('\r', r'\r'); + return '"$str"'; + } } diff --git a/packages/cli_tools/test/better_command_runner/completion_test.dart b/packages/cli_tools/test/better_command_runner/completion_test.dart index 822ee56..c2fcf39 100644 --- a/packages/cli_tools/test/better_command_runner/completion_test.dart +++ b/packages/cli_tools/test/better_command_runner/completion_test.dart @@ -153,16 +153,16 @@ void main() { r'# yaml-language-server: $schema=https://carapace.sh/schemas/command.json', 'name: test', 'persistentFlags:', - ' -q, --quiet: Suppress all cli output. Is overridden by -v, --verbose.', - ' -v, --verbose: Prints additional information useful for development. Overrides --q, --quiet.', + ' -q, --quiet: "Suppress all cli output. Is overridden by -v, --verbose."', + ' -v, --verbose: "Prints additional information useful for development. Overrides --q, --quiet."', 'commands:', ' - name: completion', ' commands:', ' - name: generate', ' flags:', - ' -t, --target=!: The target tool format', - ' -e, --exec-name=: Override the name of the executable', - ' -f, --file=: Write the specification to a file instead of stdout', + ' -t, --target=!: "The target tool format"', + ' -e, --exec-name=: "Override the name of the executable"', + ' -f, --file=: "Write the specification to a file instead of stdout"', ' completion:', ' flag:', ' target: ["completely", "carapace"]',