summaryrefslogtreecommitdiff
path: root/contrib/ri
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ri')
-rw-r--r--contrib/ri151
1 files changed, 79 insertions, 72 deletions
diff --git a/contrib/ri b/contrib/ri
index 9ec520c0..1d550898 100644
--- a/contrib/ri
+++ b/contrib/ri
@@ -1,89 +1,96 @@
-# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
-# ex: ts=8 sw=8 noet filetype=sh
-#
# ri completion for Ruby documentation by Ian Macdonald <ian@caliban.org>
+have ri && {
ri_get_methods()
{
- local regex
+ local regex
- if [ "$ri_version" = integrated ]; then
- if [ -z "$separator" ]; then
- regex="(Instance|Class)"
- elif [ "$separator" = "#" ]; then
- regex=Instance
- else
- regex=Class
- fi
+ if [ "$ri_version" = integrated ]; then
+ if [ -z "$separator" ]; then
+ regex="(Instance|Class)"
+ elif [ "$separator" = "#" ]; then
+ regex=Instance
+ else
+ regex=Class
+ fi
- COMPREPLY=( ${COMPREPLY[@]} \
- "$( ri ${classes[@]} 2>/dev/null | \
- ruby -ane 'if /^'"$regex"' methods:/.../^------------------|^$/ and \
- /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \
- end' | sort -u )" )
- else
- # older versions of ri didn't distinguish between class/module and
- # instance methods
- COMPREPLY=( ${COMPREPLY[@]} \
- "$( ruby -W0 $ri_path ${classes[@]} | ruby -ane 'if /^-/.../^-/ and \
- ! /^-/ and ! /^ +(class|module): / then \
- print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \
- end' | sort -u )" )
- fi
- COMPREPLY=( $( compgen $prefix -W '${COMPREPLY[@]}' -- $method ) )
+ COMPREPLY=( ${COMPREPLY[@]} \
+ "$( ri ${classes[@]} 2>/dev/null | ruby -ane \
+ 'if /^'"$regex"' methods:/.../^------------------|^$/ and \
+ /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \
+ end' | sort -u )" )
+ else
+ # older versions of ri didn't distinguish between class/module and
+ # instance methods
+ COMPREPLY=( ${COMPREPLY[@]} \
+ "$( ruby -W0 $ri_path ${classes[@]} | ruby -ane \
+ 'if /^-/.../^-/ and ! /^-/ and ! /^ +(class|module): / then \
+ print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \
+ end' | sort -u )" )
+ fi
+ COMPREPLY=( $( compgen $prefix -W '${COMPREPLY[@]}' -- $method ) )
}
# needs at least Ruby 1.8.0 in order to use -W0
_ri()
{
- local cur class method prefix ri_path ri_version separator IFS
- local -a classes
+ local cur class method prefix ri_path ri_version separator IFS
+ local -a classes
- COMPREPLY=()
- cur=`_get_cword`
+ COMPREPLY=()
+ cur=`_get_cword`
- ri_path=$(type -p ri)
- # which version of ri are we using?
- # -W0 is required here to stop warnings from older versions of ri
- # from being captured when used with Ruby 1.8.1 and later
- ri_version="$(ruby -W0 $ri_path -v 2>&1)" || ri_version=integrated
- [ "$ri_version" != "${ri_version%200*}" ] && ri_version=integrated
+ ri_path=$(type -p ri)
+ # which version of ri are we using?
+ # -W0 is required here to stop warnings from older versions of ri
+ # from being captured when used with Ruby 1.8.1 and later
+ ri_version="$(ruby -W0 $ri_path -v 2>&1)" || ri_version=integrated
+ [ "$ri_version" != "${ri_version%200*}" ] && ri_version=integrated
- # need to also split on commas
- IFS=$', \n\t'
- if [[ "$cur" == [A-Z]*[#.]* ]]; then
- [[ "$cur" == *#* ]] && separator=# || separator=.
- # we're completing on class and method
- class=${cur%$separator*}
- method=${cur#*$separator}
- classes=( $class )
- prefix="-P $class$separator"
- ri_get_methods
- return 0
- fi
+ # need to also split on commas
+ IFS=$', \n\t'
+ if [[ "$cur" == [A-Z]*[#.]* ]]; then
+ [[ "$cur" == *#* ]] && separator=# || separator=.
+ # we're completing on class and method
+ class=${cur%$separator*}
+ method=${cur#*$separator}
+ classes=( $class )
+ prefix="-P $class$separator"
+ ri_get_methods
+ return 0
+ fi
- if [ "$ri_version" = integrated ]; then
- # integrated ri from Ruby 1.9
- classes=( $( ri -c | ruby -ne 'if /^\s*$/..$stdin.eof then \
- if /, [A-Z]+/ then print; end; end' ) )
- elif [ "$ri_version" = "ri 1.8a" ]; then
- classes=( $( ruby -W0 $ri_path | \
- ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \
- if /^ .*[A-Z]/ then print; end; end' ))
- else
- classes=( $( ruby -W0 $ri_path | \
- ruby -ne 'if /^I have/..$stdin.eof then \
- if /^ .*[A-Z]/ then print; end; end' ))
- fi
+ if [ "$ri_version" = integrated ]; then
+ # integrated ri from Ruby 1.9
+ classes=( $( ri -c | ruby -ne 'if /^\s*$/..$stdin.eof then \
+ if /, [A-Z]+/ then print; end; end' ) )
+ elif [ "$ri_version" = "ri 1.8a" ]; then
+ classes=( $( ruby -W0 $ri_path | \
+ ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \
+ if /^ .*[A-Z]/ then print; end; end' ))
+ else
+ classes=( $( ruby -W0 $ri_path | \
+ ruby -ne 'if /^I have/..$stdin.eof then \
+ if /^ .*[A-Z]/ then print; end; end' ))
+ fi
- COMPREPLY=( $( compgen -W '${classes[@]}' -- $cur ) )
- if [[ "$cur" == [A-Z]* ]]; then
- # we're completing on class or module alone
- return 0
- fi
+ COMPREPLY=( $( compgen -W '${classes[@]}' -- "$cur" ) )
+ if [[ "$cur" == [A-Z]* ]]; then
+ # we're completing on class or module alone
+ return 0
+ fi
- # we're completing on methods
- method=$cur
- ri_get_methods
-}
-complete -F _ri ri
+ # we're completing on methods
+ method=$cur
+ ri_get_methods
+ }
+ complete -F _ri ri
+ }
+
+ # Local variables:
+ # mode: shell-script
+ # sh-basic-offset: 4
+ # sh-indent-comment: t
+ # indent-tabs-mode: nil
+ # End:
+ # ex: ts=4 sw=4 et filetype=sh