1 2 3 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 31 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
|
#compdef ruby irb erb ruby-mri -P (ruby|[ei]rb)[0-9.]# -value-,RUBY(LIB|OPT|PATH),-default-
local curcontext="$curcontext" state line expl desc RUBY ret=1
typeset -A opt_args
local -a opts irb erb all common charsets suf
all=(
'*-r+[require the library before executing your script]:library name:->library'
'(--internal-encoding)-U[set internal encoding to UTF-8]'
'(-E --encoding -K --external-encoding)'{-E+,--encoding=}'[specify default external and internal character encodings]:charset:->charsets'
'(1 * -)'{-h,--help}'[print help message]'
'(1 * -)--version[print the version]'
)
common=(
'*-I+[specify $LOAD_PATH directory (may be used more than once)]:library directory:_files -/'
'-w[turn warnings on for your script]'
'-W-[set warning level]:warning level:((0\:silent 1\:medium 2\:verbose \\\:deprecated \\\:experimental))'
'(-)1:ruby script:_files -g "*.rb(-.)"'
'*::script argument:= ->normal'
)
opts=(
'-0-[specify record separator]:input record separator in octal [\0]'
'-a[autosplit mode with -n or -p (splits $_ into $F)]'
'-c[check syntax only]'
'-C+[cd to directory before executing your script]:directory:_files -/'
'(-d --debug)'{-d,--debug}'[set debugging flags (set $DEBUG to true)]'
"(1)*-e+[one line script (several -e's allowed, omit program file)]:one line of script"
'-F-[split() pattern for autosplit (-a)]:input field separator:'
'-i-[edit ARGV files in place (make backup if extension supplied)]:suffix for in-place-edit mode:(.bak)'
'-K-[specifies KANJI (Japanese) code-set]:KANJI encoding:((e\:EUC-JP s\:Shift_JIS u\:UTF-8 N\:None))'
"-l[assume 'while gets(); ... end' loop around your script]"
"(-p)-n[assume 'while gets(); ... end' loop around your script]"
'(-n)-p[assume loop like -n but print line also like sed]'
'-s[enable some switch parsing for switches after script name]'
'-S[look for the script using PATH environment variable]'
'!-T-[turn on tainting checks]::taint level [1]:((0\:strings\ from\ streams/environment/ARGV\ are\ tainted 1\:no\ dangerous\ operation\ by\ tainted\ value 2\:process/file\ operations\ prohibited 3\:all\ generated\ objects\ are\ tainted 4\:no\ global\ \(non-tainted\)\ variable\ modification/no\ direct\ output))'
'(--verbose)-v[print version number, then turn on verbose mode]'
'(-v)--verbose[turn on verbose mode and disable script from stdin]'
'-x-[strip off text before #!ruby line and perhaps cd to directory]:directory:_files -/'
'(1 * -)--copyright[print the copyright]'
--{en,dis}'able=[enable or disable features]:feature:(gems did_you_mean rubyopt frozen_string_literal jit all)'
\!--{en,dis}able-{gems,rubyopt,all}
'--dump=[dump debug information]:information:_sequence compadd - insns yydebug parsetree parsetree_with_comment'
--{external,internal}'-encoding=:charset:->charsets'
'!'{-y,--yydebug}
'!--dump=:target:(version copyright usage yydebug syntax parsetree parsetree_with_comment insns)'
'--jit[enable jit with default options]'
'--jit-warnings[enable printing JIT warnings]'
'--jit-debug[enable JIT debugging (very slow)]'
'--jit-wait[wait until JIT compilation finishes every time (for testing)]'
'--jit-save-temps[save JIT temporary files]'
'--jit-verbose=-[print JIT logs of level num or less to stderr]:maximum log level [0]'
'--jit-max-cache=-[specify max number of methods to be JIT-ed in a cache]:number [100]'
'--jit-min-calls=-[specify number of calls to trigger JIT]:calls [10000]'
)
irb=(
'-f[suppress read of ~/.irbrc]'
'(--noinspect)-m[bc mode (load mathn, fraction, matrix)]'
$opts[(r)*-d\[*]
'(--noinspect)--inspect[use inspect for output]'
"(--inspect)--noinspect[don't use inspect for output]"
'(--noreadline)--readline[use readline extension]'
"(--readline)--noreadline[don't use readline extension]"
'(--prompt --prompt-mode --inf-ruby-mode --simple-prompt --noprompt)'{--prompt,--prompt-mode}'[switch prompt mode]:prompt mode:(default simple xmp inf-ruby)'
'(--prompt --prompt-mode --inf-ruby-mode --simple-prompt --noprompt)'{--inf-ruby-mode,--simple-prompt,--noprompt}
'--tracer[display trace for each command execution]'
'--back-trace-limit[set limit for backtraces]:limit [16]:'
'!--irb_debug:level'
'--context-mode:n'
'(--noecho)--echo[show result]'
"(--echo)--noecho[don't show result]"
'--single-irb[share self with sub-irb]'
'(--noverbose)--verbose[show details]'
"(--verbose)--noverbose[don't show details]"
)
erb=(
"-P[don't evaluate lines which start with %]"
'-T[specify trim mode]:mode [0]:((0\:EOL\ remains 1\:EOL\ removed\ if\ line\ ends\ with\ %\> 2\:EOL\ removed\ if\ line\ starts\ with\ \<%\ and\ ends\ with\ %\> -\:EOL\ is\ removed\ if\ line\ ends\ with\ -%\>,\ leading\ whitespace\ removed\ after\ \<%-))'
'(-d --debug)'{-d,--debug}'[set debugging flags (set $DEBUG to true)]'
'-n[used with -x, prepends line number to output]'
'-x[convert eRuby to Ruby]'
)
case "$service" in
*RUBY(LIB|PATH)*)
_dir_list && return 0
;;
*RUBYOPT*)
compset -q
words=( fake "$words[@]" )
(( CURRENT++ ))
_arguments -C -s : "${(@M)opts:#*-[IdvwrK](|[-+])\[*}" && ret=0
RUBY=ruby
;;
ruby[0-9.]#)
RUBY=$words[1]
_arguments -C -s -S : $opts $all $common && ret=0
;;
irb[0-9.]#)
RUBY=${words[1]/irb/ruby}
_arguments -C -s : $irb $all $common && ret=0
;;
erb[0-9.]#)
RUBY=${words[1]/erb/ruby}
_arguments -C -s : $erb $all \
'*:erb file:_files -g "*.erb(-.)"' && ret=0
;;
esac
case "$state" in
normal)
if (( ! $+opt_args[-e] )); then
shift words
(( CURRENT-- ))
fi
_normal && ret=0
;;
charsets)
charsets=( $(_call_program charsets $RUBY -e 'puts\ Encoding.list' 2>/dev/null) )
# could also add Encoding.aliases.map(&:first) for aliases
desc='charset'
if [[ $curcontext = *option-(E|-encoding)-1 ]]; then
if compset -P '*:'; then
desc='internal charset'
else
desc='external charset'
compset -S ':*' || suf=( -S: )
fi
fi
_wanted charsets expl $desc compadd $suf -a charsets && ret=0
;;
library)
local -a dirs
dirs=( $(_call_program libraries $RUBY -e 'puts\ \$:' 2>/dev/null) ${(s.:.)opt_args[-I]} )
_wanted libraries expl library _path_files -W dirs && ret=0
;;
esac
return ret
|