mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	21449: limit completed options available to RUBYOPT to -[IdvwrK]
This commit is contained in:
		
							parent
							
								
									f5e61d18b0
								
							
						
					
					
						commit
						bbe1c9bd17
					
				
					 2 changed files with 48 additions and 34 deletions
				
			
		|  | @ -1,16 +1,45 @@ | |||
| #compdef ruby -P -value-,RUBY(LIB|OPT|PATH),-default- | ||||
| 
 | ||||
| # ruby 1.8.0 (2003-08-14) [i686-linux] | ||||
| # ruby 1.8.2 (2004-12-25) [i686-linux] | ||||
| 
 | ||||
| local curcontext="$curcontext" state line expl ret=1 | ||||
| typeset -A opt_args | ||||
| 
 | ||||
| local -a args | ||||
| local -a args opts | ||||
| 
 | ||||
| args=( | ||||
|   '(-)1:script file:_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 of 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)' | ||||
|   '*-I+[specify $LOAD_PATH directory (may be used more than once)]:library directory:_files -/' | ||||
|   '-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]' | ||||
|   '*-r+[require the library, before executing your script]:library name:->library' | ||||
|   '-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 (default 0):((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]' | ||||
|   '-w[turn warnings on for your script]' | ||||
|   '-W-[set warning level]:warning level (default 2):((0\:silent 1\:medium 2\:verbose))' | ||||
|   '(-y --yydebug)'{-y,--yydebug}'[enable yacc debugging in the parser]' | ||||
|   '-x-[strip off text before #!ruby line and perhaps cd to directory]:directory:_files -/' | ||||
|   '(1 * -)--copyright[print the copyright]' | ||||
|   '(1 * -)'{-h,--help}'[print help message]' | ||||
|   '(1 * -)--version[print the version]' | ||||
| ) | ||||
| 
 | ||||
| case "$service" in | ||||
|   *RUBY(LIB|PATH)*) | ||||
|     _dir_list && return 0 | ||||
|  | @ -19,43 +48,24 @@ case "$service" in | |||
|     compset -q | ||||
|     words=( fake "$words[@]" ) | ||||
|     (( CURRENT++ )) | ||||
|     args=() | ||||
|     _arguments -C -s : "${(@M)opts:#*-[IdvwrK](|[-+])\[*}" && ret=0 | ||||
|   ;; | ||||
|   ruby) | ||||
|     _arguments -C -s -S : "$opts[@]" "$args[@]" && ret=0 | ||||
|   ;; | ||||
| esac | ||||
| 
 | ||||
| _arguments -C -s -S \ | ||||
|   '-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 of 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)' \ | ||||
|   '*-I+[specify $LOAD_PATH directory (may be used more than once)]:library directory:_files -/' \ | ||||
|   '-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]' \ | ||||
|   '*-r+[require the library, before executing your script]:library name:->library' \ | ||||
|   '-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 (default 0):((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]' \ | ||||
|   '-w[turn warnings on for your script]' \ | ||||
|   '-W-[set warning level]:warning level (default 2):((0\:silent 1\:medium 2\:verbose))' \ | ||||
|   '(-y --yydebug)'{-y,--yydebug}'[enable yacc debugging in the parser]' \ | ||||
|   '-x-[strip off text before #!ruby line and perhaps cd to directory]:directory:_files -/' \ | ||||
|   '(1 * -)--copyright[print the copyright]' \ | ||||
|   '(1 * -)'{-h,--help}'[print help message]' \ | ||||
|   '(1 * -)--version[print the version]' \ | ||||
|   "$args[@]" && ret=0 | ||||
| 
 | ||||
| case $state in | ||||
| case "$state" in | ||||
|   library) | ||||
|     local -a dirs | ||||
|     dirs=($(_call_program directories $words[1] -e 'puts\ \$:')) | ||||
|     _wanted directories expl library _path_files -W dirs && ret=0 | ||||
|     local cmd | ||||
|     if [[ "$service" = *RUBYOPT* ]]; then | ||||
|       cmd=ruby | ||||
|     else | ||||
|       cmd=$words[1] | ||||
|     fi | ||||
|     dirs=( $(_call_program directories $cmd -e 'puts\ \$:' 2>/dev/null) ${(s.:.)opt_args[-I]} ) | ||||
|     _wanted libraries expl library _path_files -W dirs && ret=0 | ||||
|   ;; | ||||
| esac | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue