summary refs log tree commit diff
path: root/Completion/Unix/Command/_ruby
blob: bb0558fdec267f1426280672302314386d4fc6af (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
#compdef ruby irb erb -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 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))'
  '(-)1:ruby script:_files -g "*.rb(-.)"'
  '*::script argument:= ->normal'
)

opts=(
  '-0-[specify record separator]:input record separator in octal [default \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))'
  '(-v --verbose)'{-v,--verbose}'[print version number, then turn on verbose mode]'
  '-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 all)'
  \!--{en,dis}able-{gems,rubyopt,all}
  --{external,internal}'-encoding=:charset:->charsets'
  '!'{-y,--yydebug}
  '!--dump=:target:(version copyright usage yydebug syntax parsetree parsetree_with_comment insns)'
)

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 %]"
  '-S[specify safe level for running script]:level:(1 2 3 4)'
  '-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