Skip to content

Commit 18fac2b

Browse files
authored
Merge pull request #1083 from akinomyoga/_comp_split-1
fix(ri): fix several problems and use `_comp_split`
2 parents 7ae466e + c95baa1 commit 18fac2b

File tree

1 file changed

+31
-30
lines changed
  • completions

1 file changed

+31
-30
lines changed

completions/ri

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
11
# ri completion for Ruby documentation -*- shell-script -*-
22
# by Ian Macdonald <ian@caliban.org>
33

4-
_comp_cmd_ri__methods()
4+
# @var[in] ri_version
5+
# @var[in] prefix
6+
# @var[in] classes
7+
_comp_cmd_ri__compgen_methods()
58
{
6-
local regex IFS=$' \t\n'
9+
local _regex
10+
local IFS=$' \t\n' # needed for ${classes[@]+"${classes[@]}"} in bash-5.2
711

12+
local _methods
813
if [[ $ri_version == integrated ]]; then
914
if [[ ! $separator ]]; then
10-
regex="(Instance|Class)"
15+
_regex="(Instance|Class)"
1116
elif [[ $separator == "#" ]]; then
12-
regex=Instance
17+
_regex=Instance
1318
else
14-
regex=Class
19+
_regex=Class
1520
fi
1621

17-
COMPREPLY+=(
22+
_comp_split -la _methods \
1823
"$(ri ${classes[@]+"${classes[@]}"} 2>/dev/null | ruby -ane \
19-
'if /^'"$regex"' methods:/.../^------------------|^$/ and \
24+
'if /^'"$_regex"' methods:/.../^------------------|^$/ and \
2025
/^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \
21-
end' 2>/dev/null | sort -u)")
26+
end' 2>/dev/null | sort -u)"
2227
else
2328
# older versions of ri didn't distinguish between class/module and
2429
# instance methods
25-
COMPREPLY+=(
30+
_comp_split -la _methods \
2631
"$(ruby -W0 "$ri_path" ${classes[@]+"${classes[@]}"} 2>/dev/null | ruby -ane \
2732
'if /^-/.../^-/ and ! /^-/ and ! /^ +(class|module): / then \
2833
print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \
29-
end' | sort -u)")
30-
fi
31-
((${#COMPREPLY[@]})) &&
32-
_comp_compgen -c "$method" -- "$prefix" -W '"${COMPREPLY[@]}"'
34+
end' | sort -u)"
35+
fi &&
36+
_comp_compgen -- -P "$prefix" -W '"${_methods[@]}"'
3337
}
3438

3539
# needs at least Ruby 1.8.0 in order to use -W0
@@ -66,7 +70,7 @@ _comp_cmd_ri()
6670
return
6771
fi
6872

69-
local class method prefix ri_path ri_version ri_major separator IFS
73+
local class method prefix="" ri_path ri_version ri_major="" separator
7074
local -a classes
7175

7276
ri_path=$(type -p ri)
@@ -78,35 +82,33 @@ _comp_cmd_ri()
7882
[[ $ri_version =~ ri[[:space:]]v?([0-9]+) ]] && ri_major=${BASH_REMATCH[1]}
7983

8084
# need to also split on commas
81-
IFS=$', \n\t'
8285
if [[ $cur == [A-Z]*[#.]* ]]; then
8386
[[ $cur == *#* ]] && separator=# || separator=.
8487
# we're completing on class and method
8588
class=${cur%"$separator"*}
8689
method=${cur#*"$separator"}
87-
classes=($class)
88-
prefix="-P $class$separator"
89-
_comp_cmd_ri__methods
90+
_comp_split -F $', \n\t' classes "$class"
91+
prefix=$class$separator
92+
_comp_compgen -c "$method" -i ri methods
9093
return
9194
fi
9295

9396
if [[ $ri_version == integrated ]]; then
9497
# integrated ri from Ruby 1.9
95-
classes=($(ri -c 2>/dev/null | ruby -ne 'if /^\s*$/..$stdin.eof then \
96-
if /^ +[A-Z]/ then print; end; end' 2>/dev/null))
98+
_comp_split -F $', \n\t' classes \
99+
"$(ri -c 2>/dev/null | ruby -ne 'if /^\s*$/..$stdin.eof then \
100+
if /^ +[A-Z]/ then print; end; end' 2>/dev/null)"
97101
elif [[ $ri_major && $ri_major -ge 3 ]]; then
98-
classes=($(ri -l 2>/dev/null))
102+
_comp_split -F $', \n\t' classes "$(ri -l 2>/dev/null)"
99103
elif [[ $ri_version == "ri 1.8a" ]]; then
100-
classes=($(ruby -W0 "$ri_path" |
104+
_comp_split -F $', \n\t' classes "$(ruby -W0 "$ri_path" |
101105
ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \
102-
if /^ .*[A-Z]/ then print; end; end'))
106+
if /^ .*[A-Z]/ then print; end; end')"
103107
else
104-
classes=($(ruby -W0 "$ri_path" |
108+
_comp_split -F $', \n\t' classes "$(ruby -W0 "$ri_path" |
105109
ruby -ne 'if /^I have/..$stdin.eof then \
106-
if /^ .*[A-Z]/ then print; end; end'))
107-
fi
108-
109-
((${#classes[@]})) &&
110+
if /^ .*[A-Z]/ then print; end; end')"
111+
fi &&
110112
_comp_compgen -- -W '"${classes[@]}"'
111113
_comp_ltrim_colon_completions "$cur"
112114

@@ -116,8 +118,7 @@ _comp_cmd_ri()
116118
fi
117119

118120
# we're completing on methods
119-
method=$cur
120-
_comp_cmd_ri__methods
121+
_comp_cmd_ri__compgen_methods
121122
} &&
122123
complete -F _comp_cmd_ri ri
123124

0 commit comments

Comments
 (0)