fish-shell/share/completions/sbt.fish
2024-02-27 16:25:01 +01:00

73 lines
3.9 KiB
Fish

############
# COMMANDS #
############
# 1. In general it's not recommended to run commands one by one, because sbt startup is quite slow
# 2. Only commands without arguments are completed, because any commands with args have to be quoted: `sbt "show key"`
# 3. Only those commands are completed that could be useful to run as one off, like `sbt new ...`, the rest should be run in an interactive sbt shell
# 4. Tasks is somewhat dynamic and depends on the project definition, so only most common are offered
# 5. Same about settings (none are offered)
# These commands can be combined in any order
complete -c sbt -f -a '(string split "\n" "
about Display basic information about sbt and the build
clean Delete files produced by the build
compile Compile sources
console Scala REPL: project classes
consoleQuick Scala REPL: only project dependencies
doc Generate API documentation
help Display help message
package Produce the main artifact
plugins List currently available plugins
projects List the names of available projects
publish Publish artifacts to a repository
publishLocal Publish artifacts to the local Ivy repository
publishM2 Publish artifacts to the local Maven repository
run Run a main class
settings List the settings defined for the current project
shell Launch an interactive sbt prompt
tasks List the tasks defined for the current project
test Execute all tests
" | string trim | string replace -r "\s+" "\t")' \
-n 'not contains -- "new" (commandline -cpx);
and not contains -- "client" (commandline -cpx)'
# These cannot be combined with any other commands and require an argument
complete -c sbt -f -n 'test (count (commandline -cpx)) = 1 ' -a new -d 'Create a new sbt project from the given template'
complete -c sbt -f -n 'test (count (commandline -cpx)) = 1 ' -a client -d 'Connect to a server with an interactive sbt prompt'
###########
# OPTIONS #
###########
# This is based on the output of `sbt -help`:
# general options without arguments
complete -c sbt -o help -s h -f -d "Print options help message"
complete -c sbt -o verbose -s v -f -d "Print more details"
complete -c sbt -o debug -s d -f -d "Set log level to debug"
complete -c sbt -o no-colors -f -d "Disable ANSI color codes"
complete -c sbt -o sbt-create -f -d "Launch even if there's no sbt project"
complete -c sbt -o no-share -f -d "Use all local caches"
complete -c sbt -o no-global -f -d "Use global caches, but not global ~/.sbt directory"
complete -c sbt -o batch -f -d "Disable interactive mode"
# general options with arguments
complete -c sbt -o sbt-dir -d "Specify path to global settings/plugins" -r # path
complete -c sbt -o sbt-boot -d "Specify path to shared boot directory" -r # path
complete -c sbt -o ivy -d "Specify path to local Ivy repository" -r # path
complete -c sbt -o mem -d "Set memory options" -x # integer? (default: -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxPermSize=256m)
complete -c sbt -o port -d "Turn on JVM debugging, open at the given port" -r # port
# sbt version
complete -c sbt -o sbt-version -d "Use specified version of sbt" -x -a '0.13.(seq 0 6)\t"" 1.0.0\t""'
complete -c sbt -o sbt-jar -d "Use specified jar as the sbt launcher" -r # jar path
complete -c sbt -o sbt-rc -d "Use an RC version of sbt" -f
complete -c sbt -o sbt-snapshot -d "Use a snapshot version of sbt" -f
# java-related
complete -c sbt -o java-home -d "Alternate JAVA_HOME" -r # path
complete -c sbt -o D -d "Pass -D option directly to the Java runtime" -x # -Dkey=val
complete -c sbt -o J-X -d "Pass -X option directly to the Java runtime" -x # -X*
complete -c sbt -o S-X -d "Pass -X option to sbt's scalacOptions" -x # -X*
# TODO: list available -X options if it's possible to do in an automatic way