From d2c0cafeb73809ae6503943012540efd134cef1c Mon Sep 17 00:00:00 2001 From: Alexey Alekhin Date: Tue, 29 Aug 2017 23:55:55 -0700 Subject: [PATCH] Added sbt completions (cherry picked from commit a43da0163a2e5b2e29a799382d4824996c80ebe5) --- share/completions/sbt.fish | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 share/completions/sbt.fish diff --git a/share/completions/sbt.fish b/share/completions/sbt.fish new file mode 100644 index 000000000..5332cfbd0 --- /dev/null +++ b/share/completions/sbt.fish @@ -0,0 +1,74 @@ +############ +# 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 -cpo); + and not contains -- "client" (commandline -cpo)' + +# These cannot be combined with any other commands and require an argument +complete -c sbt -f -n '[ (count (commandline -cpo)) = 1 ]' -a 'new' -d 'Create a new sbt project from the given template' +complete -c sbt -f -n '[ (count (commandline -cpo)) = 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