From 82be58060232ab765a0ef178d17118f4b0e93cb8 Mon Sep 17 00:00:00 2001 From: OJarrisonn Date: Sat, 1 Jun 2024 17:40:04 -0300 Subject: [PATCH] feat: improved completions for version in commands Improved completions for commands such as `asdf global ` to list the installed versions Added "complete asdf plugin versions installed" and "complete asdf plugin versions all" that produce completions for the installed versions and for all versions available for a given plugin Improved `asdf install` completion to list the installed plugins and all the available versions --- asdf.nu | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/asdf.nu b/asdf.nu index 244f64228..3d558fae0 100644 --- a/asdf.nu +++ b/asdf.nu @@ -74,6 +74,30 @@ module asdf { } } + def "complete asdf plugin versions all" [context: string] { + let plugin = $context | str trim | split words | last + ^asdf list all $plugin + | lines + | each { |line| $line | str trim } + | prepend "latest" + } + + def "complete asdf plugin versions installed" [context: string] { + let plugin = $context | str trim | split words | last + let versions = ^asdf list $plugin + | lines + | each { |line| $line | str trim } + | each { |version| if ($version | str starts-with "*") {{value: ($version | str substring 1..), description: "current global"}} else {{value: $version, description: ""}} } + + let latest = ^asdf latest $plugin | str trim + + if ($versions | get value | any {|el| $el == $latest}) { + $versions | prepend {value: "latest", description: $"alias to ($latest)"} + } else { + $versions + } + } + # ASDF version manager export extern main [ subcommand?: string@"complete asdf sub-commands" @@ -145,15 +169,15 @@ module asdf { # install a package version export extern "asdf install" [ - name?: string # Name of the package - version?: string # Version of the package or latest + name?: string@"complete asdf installed plugins" # Name of the package + version?: string@"complete asdf plugin versions all" # Version of the package or latest ] # Remove an installed package version export extern "asdf uninstall" [ name: string@"complete asdf installed" # Name of the package - version: string # Version of the package + version: string@"complete asdf plugin versions installed" # Version of the package ] # Display current version @@ -169,31 +193,31 @@ module asdf { # Display install path for an installled package version export extern "asdf where" [ name: string@"complete asdf installed" # Name of installed package - version?: string # Version of installed package + version?: string@"complete asdf plugin versions installed" # Version of installed package ] # Set the package local version export extern "asdf local" [ name: string@"complete asdf installed" # Name of the package - version?: string # Version of the package or latest + version?: string@"complete asdf plugin versions installed" # Version of the package or latest ] # Set the package global version export extern "asdf global" [ name: string@"complete asdf installed" # Name of the package - version?: string # Version of the package or latest + version?: string@"complete asdf plugin versions installed" # Version of the package or latest ] # Set the package to version in the current shell export extern "asdf shell" [ name: string@"complete asdf installed" # Name of the package - version?: string # Version of the package or latest + version?: string@"complete asdf plugin versions installed" # Version of the package or latest ] # Show latest stable version of a package export extern "asdf latest" [ - name: string # Name of the package - version?: string # Filter latest stable version from this version + name: string@"complete asdf installed" # Name of the package + version?: string@"complete asdf plugin versions installed" # Filter latest stable version from this version ] # Show latest stable version for all installed packages @@ -202,13 +226,13 @@ module asdf { # List installed package versions export extern "asdf list" [ name?: string@"complete asdf installed" # Name of the package - version?: string # Filter the version + version?: string@"complete asdf plugin versions installed" # Filter the version ] # List all available package versions export def "asdf list all" [ name: string@"complete asdf installed" # Name of the package - version?: string="" # Filter the version + version?: string@"complete asdf plugin versions installed"="" # Filter the version ] { ^asdf list all $name $version | lines | parse "{version}" | str trim } @@ -216,7 +240,7 @@ module asdf { # Show documentation for plugin export extern "asdf help" [ name: string@"complete asdf installed" # Name of the plugin - version?: string # Version of the plugin + version?: string@"complete asdf plugin versions installed" # Version of the plugin ] # Execute a command shim for the current version @@ -237,7 +261,7 @@ module asdf { # Recreate shims for version package export extern "asdf reshim" [ name?: string@"complete asdf installed" # Name of the package - version?: string # Version of the package + version?: string@"complete asdf plugin versions installed" # Version of the package ] # List the plugins and versions that provide a command