_scala 14.9 KB
Newer Older
Mirko Caserta's avatar
Mirko Caserta committed
1
2
#compdef scala scalac
# ------------------------------------------------------------------------------
Janosch Schwalm's avatar
Janosch Schwalm committed
3
# Copyright (c) 2012 Github zsh-users - https://github.com/zsh-users
Mirko Caserta's avatar
Mirko Caserta committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the zsh-users nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
Janosch Schwalm's avatar
Janosch Schwalm committed
31
#  Completion script for scala and scalac (https://www.scala-lang.org/).
Mirko Caserta's avatar
Mirko Caserta committed
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
#  * Tony Sloane <inkytonik@gmail.com>
#
# ------------------------------------------------------------------------------

typeset -A opt_args
local context state line

_scala_features () {
   compadd "postfixOps" "reflectiveCalls" "implicitConversions" "higherKinds" \
     "existentials" "experimental.macros" "_"
}

_scala_phases () {
   compadd "parser" "namer" "packageobjects" "typer" "patmat" "superaccessors" \
     "extmethods" "pickler" "refchecks" "selectiveanf" "selectivecps" "uncurry" \
     "tailcalls" "specialize" "explicitouter" "erasure" "posterasure" "lazyvals" \
     "lambdalift" "constructors" "flatten" "mixin" "cleanup" "icode" "inliner" \
     "inlineExceptionHandlers" "closelim" "dce" "jvm" "terminal"
}

local -a shared_opts
shared_opts=(
  "-bootclasspath+[Override location of bootstrap class files]:bootstrap class directory:_files -/"
  "-classpath+[Specify where to find user class files]:directory:_files -/"
  "-D-[Pass -Dproperty=value directly to the runtime system]"
  "-d+[Destination for generated classfiles]: directory or jar file:_files"
  "-dependencyfile+[Set dependency tracking file]:dependency tracking file:_files"
  "-deprecation[Emit warning and location for usages of deprecated APIs]"
  "-encoding+[Specify character encoding used by source files]:encoding:"
  "-explaintypes[Explain type errors in more detail]"
  "-extdirs+[Override location of installed extensions]:extensions directory:_files -/"
  "-g\:-[Set level of generated debugging info (default\: vars)]:debugging info level:(none source line vars notailcalls)"
  "-help[Print a synopsis of standard options]"
  "-J-[pass argument directly to Java runtime system]:JVM argument:"
  "-javabootclasspath+[Override java boot classpath]:Java boot class path directory]:_files -/"
  "-javaextdirs+[Override java extdirs classpath]:Java extdirs directory:_files -/"
  "-language\:-[Enable one or more language features]:feature:_scala_features"
  "-no-specialization[Ignore @specialize annotations]"
  "-nobootcp[Do not use the boot classpath for the scala jars]"
  "-nowarn[Generate no warnings]"
  "-optimise[Generate faster bytecode by applying optimisations to the program]"
  "-P\:-[Pass an option to a plugin (written plugin\:opt)]:plugin option:"
  "-print[Print program with Scala-specific features removed]"
  "-sourcepath+[Specify location(s) of source files]:source file directory:_files -/"
  "-target\:-[Target platform for object files (default\: jvm-1.5)]:platform name:(jvm-1.5 msil)"
  "-toolcp+[Add to the runner classpath]:directory:_files -/"
  "-unchecked[Enable detailed unchecked (erasure) warnings]"
  "-uniqid[Uniquely tag all identifiers in debugging output]"
  "-usejavacp[Utilize the java.class.path in classpath resolution]"
  "-verbose[Output messages about what the compiler is doing]"
  "-version[Print product version and exit]"
  "-X[Print a synopsis of advanced options]"
  "-Y[Print a synopsis of private options]"
)

local -a X_opts
X_opts=(
  "-Xcheck-null[Warn upon selection of nullable reference]"
  "-Xcheckinit[Wrap field accessors to throw an exception on uninitialized access]"
  "-Xdisable-assertions[Generate no assertions or assumptions]"
  "-Xelide-below+[Calls to @elidable methods are omitted if method priority is lower than integer argument]"
  "-Xexperimental[Enable experimental extensions]"
  "-Xfatal-warnings[Fail the compilation if there are any warnings]"
  "-Xfull-lubs[Retains pre 2.10 behavior of less aggressive truncation of least upper bounds]"
  "-Xfuture[Turn on future language features]"
  "-Xgenerate-phase-graph+[Generate the phase graphs (outputs .dot files) to fileX.dot]:output file:_files"
  "-Xlint[Enable recommended additional warnings]"
  "-Xlog-free-terms[Print a message when reification creates a free term]"
  "-Xlog-free-types[Print a message when reification resorts to generating a free type]"
  "-Xlog-implicits[Show more detail on why some implicits are not applicable]"
  "-Xlog-implicit-conversions[Print a message whenever an implicit conversion is inserted]"
  "-Xlog-reflective-calls[Print a message when a reflective method call is generated]"
  "-Xmacro-settings\:-[Custom settings for macros]:option"
  "-Xmain-class+[Class for manifest's Main-Class entry (only useful with -d jar)]:path:"
  "-Xmax-classfile-name+[Maximum filename length for generated classes]"
  "-Xmigration[Warn about constructs whose behavior may have changed]"
  "-Xno-forwarders[Do not generate static forwarders in mirror classes]"
  "-Xno-patmat-analysis[Don't perform exhaustivity/unreachability analysis. Also, ignore @switch annotation]"
  "-Xno-uescape[Disable handling of \u unicode escapes]"
  "-Xnojline[Do not use JLine for editing]"
  "-Xoldpatmat[Use the pre-2.10 pattern matcher. Otherwise, the 'virtualizing' pattern matcher is used in 2.10]"
  "-Xprint\:-[Print out program after <phase>]:phase name:_scala_phases"
  "-Xprint-icode\:-[Log internal icode to *.icode files after phase (default\: icode)]:phase name:_scala_phases"
  "-Xprint-pos[Print tree positions, as offsets]"
  "-Xprint-types[Print tree types (debugging option)]"
  "-Xprompt[Display a prompt after each error (debugging option)]"
  "-Xresident[Compiler stays resident: read source filenames from standard input]"
  "-Xscript+[Treat the source file as a script and wrap it in a main method]:main object name"
  "-Xshow-class+[Show internal representation of class]:class name"
  "-Xshow-object+[Show internal representation of object]:object name"
  "-Xshow-phases[Print a synopsis of compiler phases]"
  "-Xsource-reader+[Specify a class name for a custom method of reading source files]:class name"
  "-Xverify[Verify generic signatures in generated bytecode]"

  "-Xassem-extdirs+[List of directories containing assemblies (requires -target:msil) (default\: lib)]:assembly directory:_files -/"
  "-Xassem-name+[Name of the output assembly (requires -target:msil)]:assembly name:_files"
  "-Xassem-path+[List of assemblies referenced by the program (requires -target:msil)]:assembly path:_files"
  "-Xsourcedir+[Mirror source folder structure in output directory (requires -target:msil)]:source directory:_files -/"

  "-Xplugin\:-[Load one or more plugins from file]:plugin file:_files"
  "-Xpluginsdir+[Path to search compiler plugins]:plugin directory:_files -/"
  "-Xplugin-list[Print a synopsis of loaded plugins]"
  "-Xplugin-disable\:-[Disable the given plugin(s)]"
  "-Xplugin-require\:-[Abort unless the given plugin(s) are available]"
)

local -a Y_opts
Y_opts=(
  "-Y[Print a synopsis of private options]"
  "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]"
  "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:build manager:(none refined simple)"
  "-Yclosure-elim[Perform closure elimination]"
  "-Ycompact-trees[Use compact tree printer when displaying trees]"
  "-Ydead-code[Perform dead code elimination]"
  "-Ydependent-method-types[Allow dependent method types]"
  "-Ydump-classes+[Dump the generated bytecode to .class files (useful for reflective compilation that utilizes in-memory classloaders)]:output directory:_files -/"
  "-Yeta-expand-keeps-star[Eta-expand varargs methods to T* rather than Seq[T].  This is a temporary option to ease transition.]"
  "-Ygen-javap+[Generate a parallel output directory of .javap files]:output directory:_files -/"
155
  "-Yinfer-argument-types[Infer types for arguments of overridden methods]"
Mirko Caserta's avatar
Mirko Caserta committed
156
157
  "-Yinline[Perform inlining when possible]"
  "-Yinline-handlers[Perform exception handler inlining when possible]"
158
  "-Yinline-warnings[Emit inlining warnings (normally suppressed due to high volume)]"
Mirko Caserta's avatar
Mirko Caserta committed
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
  "-Yinvalidate+[Invalidate classpath entry before run]:classpath entry"
  "-Ylinearizer\:-[Linearizer to use (default\: rpo)]:linearizer:(normal dfs rpo dump)"
  "-Ylog-classpath[Output information about what classpath is being applied]"
  "-Yno-adapted-args[Do not adapt an argument list (either by inserting unit or creating a tuple) to match the receiver]"
  "-Ymacro-debug-lite[Trace essential macro-related activities]"
  "-Ymacro-debug-verbose[Trace all macro-related activities: compilation, generation of synthetics, classloading, expansion, exceptions]"
  "-Yno-completion[Disable tab-completion in the REPL]"
  "-Yno-generic-signatures[Suppress generation of generic signatures for Java]"
  "-Yno-imports[Compile without any implicit imports]"
  "-Yno-predef[Compile without importing Predef]"
  "-Yno-self-type-checks[Suppress check for self-type conformance among inherited members]"
  "-Yno-squeeze[Disable creation of compact code in matching]"
  "-Ynotnull[Enable (experimental and incomplete) scala.NotNull]"
  "-Yoverride-objects[Allow member objects to be overridden]"
  "-Yoverride-vars[Allow vars to be overridden]"
  "-Ypmat-naive[Desugar matches as naively as possible]"
  "-Ypresentation-delay+[Wait number of ms after typing before starting typechecking]"
  "-Ypresentation-log+[Log presentation compiler events into file]:log file:_files"
  "-Ypresentation-replay+[Replay presentation compiler events from file]:log file:_files"
  "-Ypresentation-strict[Do not report type errors in sources with syntax errors]"
  "-Ypresentation-verbose[Print information about presentation compiler tasks]"
  "-Yprofile-class+[Specify name of profiler class]:profiler class name"
  "-Yprofile-memory[Heap snapshot after compiler run (requires jgpagent on JVM -agentpath)]"
  "-Yrangepos[Use range positions for syntax trees]"
  "-Yrecursion+[Set recursion depth used when locking symbols]"
  "-Yreify-copypaste[Dump the reified trees in copypasteable representation]"
  "-Yrepl-sync[Do not use asynchronous code for REPL startup]"
  "-Yresolve-term-conflict\:-[Resolve term conflicts (default\: error)]:resolution strategy:(package object error)"
  "-Yself-in-annots[Include a \"self\" identifier inside of annotations]"
  "-Yshow\:-[Show after <phase> (requires -Xshow-class or -Xshow-object)]:phase name:_scala_phases"
  "-Yshow-syms[Print the AST symbol hierarchy after each phase]"
  "-Yshow-symkinds[Print abbreviated symbol kinds next to symbol names]"
  "-Yshow-trees[Print detailed ASTs (requires -Xprint\:phase)]"
  "-Yshow-trees-compact[Print detailed ASTs in compact form (requires -Xprint\:)]"
  "-Yshow-trees-stringified[Print stringifications along with detailed ASTs (requires -Xprint\:)]"
  "-Ystatistics[Print compiler statistics]"
  "-Ystruct-dispatch\:-[Structural method dispatch policy (default\: poly-cache)]:policy name:(no-cache mono-cache poly-cache invoke-dynamic)"

  "-Ybrowse\:-[Browse the abstract syntax tree after <phase>]:phase name:_scala_phases"
  "-Ycheck\:-[Check the tree at the end of <phase>]:phase name:_scala_phases"
  "-Ylog\:-[Log operations during <phase>]:phase name:_scala_phases"
  "-Yprofile\:-[Profile CPU usage of given phases (requires jgpagent on JVM -agentpath)]:phase name:_scala_phases"
  "-Yskip\:-[Skip <phase>]:phase name:_scala_phases"
  "-Ystop-after\:-[Stop after given phase <phase>]:phase name:_scala_phases"
  "-Ystop-before\:-[Stop before given phase <phase>]:phase name:_scala_phases"

  "-Ywarn-adapted-args[Warn if an argument list is modified to match the receiver]"
  "-Ywarn-all[Enable all -Y warnings]"
  "-Ywarn-dead-code[Warn when dead code is identified]"
  "-Ywarn-inaccessible[Warn about inaccessible types in method signatures]"
  "-Ywarn-nullary-override[Warn when non-nullary overrides nullary, e.g. def foo() over def foo]"
  "-Ywarn-nullary-unit[Warn when nullary methods return Unit]"
  "-Ywarn-numeric-widen[Warn when numerics are widened]"
  "-Ywarn-value-discard[Warn when non-Unit expression results are unused]"

  "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]"
  "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:manager:(none refined simple)"
  "-Ycompletion-debug[Trace all tab completion activity]"
  "-Ydebug[Increase the quantity of debugging output]"
  "-Ydoc-debug[Trace all scaladoc activity]"
  "-Yide-debug[Generate, validate and output trees using the interactive compiler]"
  "-Yinfer-debug[Trace type inference and implicit search]"
  "-Yissue-debug[Print stack traces when a context issues an error]"
  "-Ypatmat-debug[Trace pattern matching translation]"
  "-Ypmat-debug[Trace all pattern matcher activity]"
  "-Ypos-debug[Trace position validation]"
  "-Ypresentation-debug[Enable debugging output for the presentation compiler]"
  "-Yreify-debug[Trace reification]"
  "-Yrepl-debug[Trace all REPL activity]"
  "-Ytyper-debug[Trace all type assignments]"
)

local -a scala_opts
scala_opts=(
  "-e+[execute <string> as if entered in the repl]:string" \
  "-howtorun+[what to run (default\: guess)]:execution mode:(script object jar guess)" \
  "-i+[preload <file> before starting the repl]:file to preload:_files" \
  "-nc[no compilation daemon\: do not use the fsc offline compiler]" \
  "-save[save the compiled script in a jar for future use]"
)

case $words[$CURRENT] in
    -X*) _arguments $X_opts;;
    -Y*) _arguments $Y_opts;;
      *) case $service in
           scala)  _arguments $scala_opts $shared_opts "*::filename:_files";;
           scalac) _arguments $shared_opts "*::filename:_files";;
         esac
esac

return 0