diff --git a/packages/cli_tools/example/command_completion_example.dart b/packages/cli_tools/example/command_completion_example.dart index 4be4716..3660efb 100644 --- a/packages/cli_tools/example/command_completion_example.dart +++ b/packages/cli_tools/example/command_completion_example.dart @@ -19,7 +19,7 @@ import 'completion_script_completely.dart'; /// ``` /// /// In order to regenerate the completion scripts, run these commands for each -/// target. +/// tool to target. /// /// See also [README_completion.md]. /// diff --git a/packages/cli_tools/example/completion_script_carapace.dart b/packages/cli_tools/example/completion_script_carapace.dart index 2bc74f5..9769d86 100644 --- a/packages/cli_tools/example/completion_script_carapace.dart +++ b/packages/cli_tools/example/completion_script_carapace.dart @@ -1,14 +1,14 @@ /// This file is auto-generated. library; -import 'package:cli_tools/better_command_runner.dart' show CompletionTarget; +import 'package:cli_tools/better_command_runner.dart' show CompletionTool; const String _completionScript = r''' # yaml-language-server: $schema=https://carapace.sh/schemas/command.json name: example 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 @@ -16,50 +16,29 @@ commands: 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, --tool=!: "The completion tool to target" + -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"] + tool: ["completely", "carapace"] file: ["$files"] - - name: embed - flags: - -t, --target=!: The target tool format - -f, --script-file=: The script file to embed - -o, --output-file=: The Dart file name to write - -d, --output-dir=: Override the directory to write the Dart source file to - completion: - flag: - target: ["completely", "carapace"] - output-dir: ["$directories"] - - name: install flags: - -t, --target=!: The target tool format - -e, --exec-name=: Override the name of the executable - -d, --write-dir=: Override the directory to write the script to + -t, --tool=!: "The completion tool to target" + -e, --exec-name=: "Override the name of the executable" + -d, --write-dir=: "Override the directory to write the script to" completion: flag: - target: ["completely", "carapace"] + tool: ["completely", "carapace"] write-dir: ["$directories"] - - name: install - flags: - -t, --target=!: The target tool format - -e, --exec-name=: Override the name of the executable - -d, --write-dir=: Override the directory to write the script to - completion: - flag: - target: ["completely", "carapace"] - write-dir: ["$directories"] - '''; /// Embedded script for command line completion for `carapace`. const completionScriptCarapace = ( - target: CompletionTarget.carapace, + tool: CompletionTool.carapace, script: _completionScript, ); diff --git a/packages/cli_tools/example/completion_script_completely.dart b/packages/cli_tools/example/completion_script_completely.dart index fd54c3e..69b184f 100644 --- a/packages/cli_tools/example/completion_script_completely.dart +++ b/packages/cli_tools/example/completion_script_completely.dart @@ -1,7 +1,7 @@ /// This file is auto-generated. library; -import 'package:cli_tools/better_command_runner.dart' show CompletionTarget; +import 'package:cli_tools/better_command_runner.dart' show CompletionTool; const String _completionScript = r''' # example completion -*- shell-script -*- @@ -60,15 +60,7 @@ _example_completions() { while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur") ;; - 'completion embed'*'--output-dir') - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur") - ;; - - 'completion generate'*'--target') - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "completely carapace")" -- "$cur") - ;; - - 'completion install'*'--target') + 'completion generate'*'--tool') while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "completely carapace")" -- "$cur") ;; @@ -76,7 +68,7 @@ _example_completions() { while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur") ;; - 'completion embed'*'--target') + 'completion install'*'--tool') while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "completely carapace")" -- "$cur") ;; @@ -88,36 +80,24 @@ _example_completions() { while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur") ;; - 'completion install'*'-d') - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur") - ;; - 'completion install'*'-t') while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "completely carapace")" -- "$cur") ;; - 'completion embed'*'-t') - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "completely carapace")" -- "$cur") - ;; - - 'completion embed'*'-d') + 'completion install'*'-d') while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur") ;; 'completion generate'*) - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "--quiet -q --verbose -v --target -t --exec-name -e --file -f")" -- "$cur") + while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "--quiet -q --verbose -v --tool -t --exec-name -e --file -f")" -- "$cur") ;; 'completion install'*) - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "--quiet -q --verbose -v --target -t --exec-name -e --write-dir -d")" -- "$cur") - ;; - - 'completion embed'*) - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "--quiet -q --verbose -v --target -t --script-file -f --output-file -o --output-dir -d")" -- "$cur") + while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "--quiet -q --verbose -v --tool -t --exec-name -e --write-dir -d")" -- "$cur") ;; 'completion'*) - while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "generate embed install --quiet -q --verbose -v")" -- "$cur") + while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_example_completions_filter "generate install --quiet -q --verbose -v")" -- "$cur") ;; *) @@ -134,6 +114,6 @@ _example_completions() { /// Embedded script for command line completion for `completely`. const completionScriptCompletely = ( - target: CompletionTarget.completely, + tool: CompletionTool.completely, script: _completionScript, ); diff --git a/packages/cli_tools/lib/src/better_command_runner/better_command_runner.dart b/packages/cli_tools/lib/src/better_command_runner/better_command_runner.dart index bfd7c38..7f62c4c 100644 --- a/packages/cli_tools/lib/src/better_command_runner/better_command_runner.dart +++ b/packages/cli_tools/lib/src/better_command_runner/better_command_runner.dart @@ -6,7 +6,7 @@ import 'package:args/command_runner.dart'; import 'package:config/config.dart'; import 'completion/completion_command.dart'; -import 'completion/completion_target.dart' show CompletionScript; +import 'completion/completion_tool.dart' show CompletionScript; /// A function type for executing code before running a command. typedef OnBeforeRunCommand = Future Function(BetterCommandRunner runner); diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion.dart index f3d1d76..d9757f3 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion.dart @@ -1 +1 @@ -export 'completion_target.dart'; +export 'completion_tool.dart'; diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_command.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_command.dart index bf6c1d2..8a89601 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion_command.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion_command.dart @@ -6,14 +6,14 @@ import '../better_command.dart'; import 'completion_embed_command.dart'; import 'completion_generate_command.dart'; import 'completion_install_command.dart'; -import 'completion_target.dart'; +import 'completion_tool.dart'; abstract final class CompletionOptions { - static const targetOption = EnumOption( - enumParser: EnumParser(CompletionTarget.values), - argName: 'target', + static const toolOption = EnumOption( + enumParser: EnumParser(CompletionTool.values), + argName: 'tool', argAbbrev: 't', - helpText: 'The target tool format', + helpText: 'The completion tool to target', allowedHelp: { 'completely': 'Use the `completely` tool (https://github.com/bashly-framework/completely)', diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_embed_command.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_embed_command.dart index 5d758d6..08e77ae 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion_embed_command.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion_embed_command.dart @@ -10,7 +10,7 @@ import '../better_command_runner.dart' show StandardGlobalOption; import 'completion_command.dart' show CompletionOptions; enum CompletionEmbedOption implements OptionDefinition { - target(CompletionOptions.targetOption), + tool(CompletionOptions.toolOption), scriptFileName(StringOption( argName: 'script-file', argAbbrev: 'f', @@ -22,7 +22,7 @@ enum CompletionEmbedOption implements OptionDefinition { helpText: 'The Dart file name to write ("-" for stdout)', fromCustom: _outputSourceFileName, customValidator: _validateSourceFileName, - defaultsTo: 'completion_script_.dart', + defaultsTo: 'completion_script_.dart', )), outDir(DirOption( argName: 'output-dir', @@ -62,8 +62,8 @@ Directory _defaultWriteDir() { } String _outputSourceFileName(final Configuration cfg) { - final target = cfg.value(CompletionEmbedOption.target); - return 'completion_script_${target.name}.dart'; + final tool = cfg.value(CompletionEmbedOption.tool); + return 'completion_script_${tool.name}.dart'; } void _validateSourceFileName(final String value) { @@ -95,7 +95,7 @@ class CompletionEmbedCommand @override Future runWithConfig( final Configuration commandConfig) async { - final target = commandConfig.value(CompletionEmbedOption.target); + final tool = commandConfig.value(CompletionEmbedOption.tool); final scriptFileName = commandConfig.optionalValue(CompletionEmbedOption.scriptFileName); final writeFile = commandConfig.value(CompletionEmbedOption.outFileName); @@ -113,15 +113,15 @@ class CompletionEmbedCommand /// This file is auto-generated. library; -import 'package:cli_tools/better_command_runner.dart' show CompletionTarget; +import 'package:cli_tools/better_command_runner.dart' show CompletionTool; const String _completionScript = r''' $scriptContent '''; -/// Embedded script for command line completion for `${target.name}`. -const completionScript${target.name.capitalize()} = ( - target: $target, +/// Embedded script for command line completion for `${tool.name}`. +const completionScript${tool.name.capitalize()} = ( + tool: $tool, script: _completionScript, ); """; diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_generate_command.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_generate_command.dart index cebcf1f..2914c1b 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion_generate_command.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion_generate_command.dart @@ -7,11 +7,11 @@ import '../better_command_runner.dart' show StandardGlobalOption; import 'carapace_generator.dart'; import 'completely_generator.dart'; import 'completion_command.dart' show CompletionOptions; -import 'completion_target.dart'; +import 'completion_tool.dart'; import 'usage_representation.dart'; enum CompletionGenerateOption implements OptionDefinition { - target(CompletionOptions.targetOption), + tool(CompletionOptions.toolOption), execName(CompletionOptions.execNameOption), file(FileOption( argName: 'file', @@ -38,7 +38,7 @@ class CompletionGenerateCommand @override Future runWithConfig( final Configuration commandConfig) async { - final target = commandConfig.value(CompletionGenerateOption.target); + final tool = commandConfig.value(CompletionGenerateOption.tool); final execName = commandConfig.optionalValue(CompletionGenerateOption.execName); final file = commandConfig.optionalValue(CompletionGenerateOption.file); @@ -55,11 +55,11 @@ class CompletionGenerateCommand final IOSink out = file?.openWrite() ?? stdout; - switch (target) { - case CompletionTarget.completely: + switch (tool) { + case CompletionTool.completely: CompletelyYamlGenerator().generate(out, usage); break; - case CompletionTarget.carapace: + case CompletionTool.carapace: CarapaceYamlGenerator().generate(out, usage); break; } diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_install_command.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_install_command.dart index e5271b7..cd144c5 100644 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion_install_command.dart +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion_install_command.dart @@ -7,10 +7,10 @@ import '../better_command.dart'; import '../better_command_runner.dart' show StandardGlobalOption; import '../exit_exception.dart'; import 'completion_command.dart' show CompletionOptions; -import 'completion_target.dart'; +import 'completion_tool.dart'; enum CompletionInstallOption implements OptionDefinition { - target(CompletionOptions.targetOption), + tool(CompletionOptions.toolOption), execName(CompletionOptions.execNameOption), writeDir(DirOption( argName: 'write-dir', @@ -27,12 +27,12 @@ enum CompletionInstallOption implements OptionDefinition { class CompletionInstallCommand extends BetterCommand { - final Map _embeddedCompletions; + final Map _embeddedCompletions; CompletionInstallCommand({ required final Iterable embeddedCompletions, }) : _embeddedCompletions = Map.fromEntries(embeddedCompletions.map( - (final e) => MapEntry(e.target, e.script), + (final e) => MapEntry(e.tool, e.script), )), super(options: CompletionInstallOption.values); @@ -45,7 +45,7 @@ class CompletionInstallCommand @override Future runWithConfig( final Configuration commandConfig) async { - final target = commandConfig.value(CompletionInstallOption.target); + final tool = commandConfig.value(CompletionInstallOption.tool); final execName = commandConfig.optionalValue(CompletionInstallOption.execName); final writeDir = @@ -56,28 +56,28 @@ class CompletionInstallCommand throw StateError('BetterCommandRunner not set'); } - final scriptContent = _embeddedCompletions[target]; + final scriptContent = _embeddedCompletions[tool]; if (scriptContent == null) { - stderr.writeln('No embedded script found for target: $target'); + stderr.writeln('No embedded script found for tool "$tool"'); throw ExitException.error(); } final executableName = execName ?? betterRunner.executableName; - final writeFileName = switch (target) { - CompletionTarget.completely => '$executableName.bash', - CompletionTarget.carapace => '$executableName.yaml', + final writeFileName = switch (tool) { + CompletionTool.completely => '$executableName.bash', + CompletionTool.carapace => '$executableName.yaml', }; final writeDirPath = writeDir?.path ?? - switch (target) { - CompletionTarget.completely => p.join( + switch (tool) { + CompletionTool.completely => p.join( _getHomeDir(), '.local', 'share', 'bash-completion', 'completions', ), - CompletionTarget.carapace => p.join( + CompletionTool.carapace => p.join( _getUserConfigDir(), 'carapace', 'specs', diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_target.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_target.dart deleted file mode 100644 index f850246..0000000 --- a/packages/cli_tools/lib/src/better_command_runner/completion/completion_target.dart +++ /dev/null @@ -1,6 +0,0 @@ -enum CompletionTarget { - completely, - carapace, -} - -typedef CompletionScript = ({CompletionTarget target, String script}); diff --git a/packages/cli_tools/lib/src/better_command_runner/completion/completion_tool.dart b/packages/cli_tools/lib/src/better_command_runner/completion/completion_tool.dart new file mode 100644 index 0000000..705923b --- /dev/null +++ b/packages/cli_tools/lib/src/better_command_runner/completion/completion_tool.dart @@ -0,0 +1,6 @@ +enum CompletionTool { + completely, + carapace, +} + +typedef CompletionScript = ({CompletionTool tool, String script}); 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 c2fcf39..9c7cbbf 100644 --- a/packages/cli_tools/test/better_command_runner/completion_test.dart +++ b/packages/cli_tools/test/better_command_runner/completion_test.dart @@ -90,7 +90,7 @@ void main() { ' - -q', ' - --verbose', ' - -v', - 'test completion generate*--target:', + 'test completion generate*--tool:', ' - completely', ' - carapace', 'test completion generate*-t:', @@ -126,7 +126,7 @@ void main() { stringContainsInOrder([ 'other-exec-name:', ' - completion', - 'other-exec-name completion generate*--target:', + 'other-exec-name completion generate*--tool:', ])); await expectLater(spec.validate(), completes); }); @@ -160,12 +160,12 @@ void main() { ' commands:', ' - name: generate', ' flags:', - ' -t, --target=!: "The target tool format"', + ' -t, --tool=!: "The completion tool to target"', ' -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"]', + ' tool: ["completely", "carapace"]', r' file: ["$files"]', ])); await expectLater(spec.validate(), completes); @@ -232,7 +232,7 @@ _example_completions_filter() { stringContainsInOrder([ '/// This file is auto-generated.', 'library;', - "import 'package:cli_tools/better_command_runner.dart' show CompletionTarget;", + "import 'package:cli_tools/better_command_runner.dart' show CompletionTool;", 'const String _completionScript = r', r''' # example completion -*- shell-script -*- @@ -247,7 +247,7 @@ _example_completions_filter() { r''' /// Embedded script for command line completion for `completely`. const completionScriptCompletely = ( - target: CompletionTarget.completely, + tool: CompletionTool.completely, script: _completionScript, ); ''', @@ -287,7 +287,7 @@ persistentFlags: stringContainsInOrder([ '/// This file is auto-generated.', 'library;', - "import 'package:cli_tools/better_command_runner.dart' show CompletionTarget;", + "import 'package:cli_tools/better_command_runner.dart' show CompletionTool;", 'const String _completionScript = r', r''' # yaml-language-server: $schema=https://carapace.sh/schemas/command.json @@ -299,7 +299,7 @@ persistentFlags: r''' /// Embedded script for command line completion for `carapace`. const completionScriptCarapace = ( - target: CompletionTarget.carapace, + tool: CompletionTool.carapace, script: _completionScript, ); ''', @@ -334,11 +334,11 @@ persistentFlags: -v, --verbose: Prints additional information useful for development. Overrides --q, --quiet. '''; const completionScriptCompletely = ( - target: CompletionTarget.completely, + tool: CompletionTool.completely, script: completelyCompletionScript, ); const completionScriptCarapace = ( - target: CompletionTarget.carapace, + tool: CompletionTool.carapace, script: carapaceCompletionScript, );