about summary refs log tree commit diff
path: root/Completion/Unix/Command/_ruby
blob: 9955253b3460d2a06a7c025dc7eaa6573a7c0e88 (plain) (blame)
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#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 error_highlight did_you_mean syntax_suggest rubyopt frozen_string_literal mjit yjit all)'
  \!--{en,dis}able-{gems,rubyopt,all}
  '--dump=[dump debug information]:information:_sequence compadd - insns insns_without_opt yydebug parsetree parsetree_with_comment'
  --{external,internal}'-encoding=:charset:->charsets'
  '--backtrace-limit=[limit the maximum length of backtrace]:number'
  '!'{-y,--yydebug}
  '!--dump=:target:(version copyright usage yydebug syntax parsetree parsetree_with_comment insns)'
  '(--mjit --yjit)--jit[enable jit for the platform]'
  '(--jit --yjit)--mjit[enable C compiler-based JIT compiler]'
  '(--jit --mjit)--yjit[enable in-process JIT compiler]'
  '--mjit-warnings[enable printing JIT warnings]'
  '--mjit-debug[enable JIT debugging (very slow)]'
  '--mjit-wait[wait until JIT compilation finishes every time (for testing)]'
  '--mjit-save-temps[save JIT temporary files]'
  '--mjit-verbose=-[print JIT logs of level num or less to stderr]:maximum log level [0]'
  '--mjit-max-cache=-[specify max number of methods to be JIT-ed in a cache]:number [100]'
  '--mjit-min-calls=-[specify number of calls to trigger JIT]:calls [10000]'
  '--yjit-stat[enable collecting YJIT statistics]'
  '--yjit-exec-mem-size=-[size of executable memory block in MiB]:mem size'
  '--yjit-call-threshold=-[number of calls to trigger JIT]:number'
  '--yjit-max-versions=-[maximum number of versions per basic block]:versions'
  '--yjit-greedy-versioning[greedy versioning mode]'
)

irb=(
  '-f[suppress read of ~/.irbrc]'
  $opts[(r)*-d\[*]
  '(--noinspect)--inspect[use inspect for output]'
  "(--inspect)--noinspect[don't use inspect for output]"
  '(--prompt --prompt-mode --inf-ruby-mode --simple-prompt --noprompt)'{--prompt=,--prompt-mode=}'[switch prompt mode]:prompt mode:(default classic simple inf-ruby xmp null)'
  '(--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'
  '--extra-doc-dir[add an extra doc dir for the doc dialog]'
  '(--noecho)--echo[show result]'
  "(--echo)--noecho[don't show result]"
  '(--noecho-on-assignment)--echo-on-assignment[show result on assignment]'
  "(--echo-on-assignment)--noecho-on-assignment[don't show result on assignment]"
  '--truncate-echo-on-assignment[show truncated result on assignment]'
  '(--nomultiline)--multiline[use multiline editor module]'
  "(--multiline)--nomultiline[don't use multiline editor module]"
  '(--nosingleline)--singleline[use single line editor module]'
  "(--singleline)--nosingleline[don't use single line editor module]"
  '(--nocolorize)--colorize[use color-highlighting]'
  "(--colorize)--nocolorize[don't use color-highlighting]"
  '(--noautocomplete)--autocomplete[use auto-completion]'
  "(--autocomplete)--noautocomplete[don't use auto-completion]"
  '(--regexp-completor)--type-completor[use regexp based completion]'
  '(--type-completor)--regexp-completor[use type based completion]'
  '(--noscript)--script[script mode]'
  '(--script)--noscript[no script mode]'
  '--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[print ruby script with line number]'
  '-x[print ruby script]'
  '-v[enable verbose mode]'
)

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