1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-04-26 11:55:13 +02:00

48105: Update ctags completion with format fix

This commit is contained in:
Jacob Gelbman 2021-02-24 01:20:24 -06:00 committed by Peter Stephenson
parent 055ce78401
commit 5ede2c55f1
2 changed files with 196 additions and 198 deletions

View File

@ -1,3 +1,8 @@
2021-02-24 Peter Stephenson <p.stephenson@samsung.com>
* 48105: Jacob Gelbman:Completion/Unix/Command/_ctags: update and
fix formatting nad import.
2021-02-23 Peter Stephenson <p.stephenson@samsung.com>
* 48096: Jacob Gelbman: Completion/Unix/Command/_ctags: new

View File

@ -1,204 +1,197 @@
#compdef ctags
local state
local context state line expl
local -A opt_args
_arguments \
"-?[help text]" \
"-a[append the tags to an existing tag file]" \
"-B[use backward searching patterns (?...?)]" \
"-D[give definition for macro]:macro definition:" \
"-e[output tag file for use with emacs]" \
"-f[write tags to specified file. - is stdout]:file:_files" \
"-F[use forward searching patterns]" \
"-G[equivalent to --guess-language-eagerly]" \
"-h[specify list of file extensions to be treated as include files]:" \
"-I[a list of tokens to be specifically handled is read from either the command line or the specified file]:" \
"-L[a list of input file names is read from the specified file. - is stdin]:file:_files" \
"-n[equivalent to --excmd=number]" \
"-N[equivalent to --excmd=pattern]" \
"-o[alternative to -f]:file:_files" \
"-R[equivalent to --recurse]" \
"-u[equivalent to --sort=no]" \
"-V[equivalent to --verbose]" \
I wrote a completion script for the ctags program. Someone might be able to use it:
#compdef ctags
local state
_arguments \
"-?[help text]" \
"-a[append the tags to an existing tag file]" \
"-B[use backward searching patterns (?...?)]" \
"-D[give definition for macro]:macro definition:" \
"-e[output tag file for use with emacs]" \
"-f[write tags to specified file. - is stdout]:file:_files" \
"-F[use forward searching patterns]" \
"-G[equivalent to --guess-language-eagerly]" \
"-h[specify list of file extensions to be treated as include files]:" \
"-I[a list of tokens to be specifically handled is read from either the command line or the specified file]:" \
"-L[a list of input file names is read from the specified file. - is stdin]:file:_files" \
"-n[equivalent to --excmd=number]" \
"-N[equivalent to --excmd=pattern]" \
"-o[alternative to -f]:file:_files" \
"-R[equivalent to --recurse]" \
"-u[equivalent to --sort=no]" \
"-V[equivalent to --verbose]" \
"-x[print a tabular cross reference file to stdout]" \
"--alias-<lang>=[add a pattern detecting a name, can be used as an alt name for lang]:pattern" \
"--append=[should tags be appended to existing tag file]:bool:(yes no)" \
"--etags-include=[include reference to file in emacs style tag file]:file:_files" \
"--exclude=[exclude files and directories matching pattern]:pattern" \
"--exclude-exception=[don't exclude files and directories matching pattern even if they match the pattern specified with --exclude]:pattern" \
"--excmd=[uses the specified type of ex command to locate tags]:ex command type:(number pattern mix combine)" \
"--extras=[include extra tag entries for selected information (flags fFgpqrs)]:flags" \
"--extras-<lang>=[include <lang> own extra tag entries for selected information]:flags" \
"--fields=[include selected extension fields (flags aCeEfFikKlmnNpPrRsStxzZ)]:flags" \
"--fields-<lang>=[include selected <lang> own extension fields]:flags" \
"--filter=[behave as a filter, reading file names from stdin and writing tags to stdout]:bool:(yes no)" \
"--filter-terminator=[specify string to print to stdout following the tags for each file parsed when --filter is enabled]:string" \
"--format=[force output of specified tag file format]:level" \
"--guess-language-eagerly[guess the language of input file more eagerly]" \
"--help[help text]" \
"--help-full[help text with experimental features]" \
"--if0=[should code within #if 0 conditionals be parsed]:bool:(yes no)" \
"--input-encoding=[specify encoding of all input files]:encoding" \
"--input-encoding-<lang>=[specify encoding of the <lang> input files]:encoding" \
"--kinddef-<lang>=[define new kind for <lang>]:kind" \
"--kinds-<lang>=[enable/disable tag kinds for <lang>]:kind" \
"--langdef=[define a new language to be parsed with regular expressions]:name" \
"--langmap=[override default mapping of language to input file extension]:maps" \
"--language-force=[force all files to be interpreted using specified language]:language:->language" \
"--languages=[restrict files scanned to these comma-separated languages]:language:->languages" \
"--license[print details of software license]" \
"--line-directives=[should #line directives be processed]:bool:(yes no)" \
"--links=[indicate whether symlinks should be followed]:bool:(yes no)" \
"--list-aliases=[list of alias patterns]:language:->language" \
"--list-excludes[list of exclude patterns for files/dirs]" \
"--list-extras=[list of extra tag flags]:language:->language" \
"--list-features[list of compiled features]" \
"--list-fields=[list of fields]:language:->language" \
"--list-kinds=[list of all tag kinds for lang]:language:->language" \
"--list-kinds-full=[list details of all tag kinds for lang]:language:->language" \
"--list-languages[list of supported languages]" \
"--list-map-extensions=[list of language extensions in mapping]:language:->language" \
"--list-map-patterns=[list of language patterns in mapping]:language:->language" \
"--list-maps=[list of language mappings (both extensions and patterns)]:language:->language" \
"--list-mline-regex-flags[list of flags which can be used in a multiline regex parser definition]" \
"--list-params=[list of language parameters. works with --machinable]:language:->language" \
"--list-pseudo-tags[list of pseudo tags]" \
"--list-regex-flags[list of flags which can be used in a regex parser definition]" \
"--list-roles=[list of all roles of tag kinds specified for langs]:language:->language" \
"--list-subparsers=[list of subparsers for the base lang]:language:->language" \
"--machinable=[use tab separated representation in --list-* output]:bool:(yes no)" \
"--map-<lang>=[set, add(+), or remove(-) the map for <lang>]:pattern" \
"--maxdepth=[specify maximum recursion depth]:depth" \
"--mline-regex-<lang>=[define multiline regex for locating tags in <lang>]:pattern" \
"--options=[specify file (or dir) from which command line options should be read]:file:_files" \
"--options-maybe=[same as --options but doesn't error]:file:_files" \
"--optlib-dir=[add or set dir to optlib search path]:dir:_files -/" \
"--output-encoding=[the encoding to write the tag file in]:encoding" \
"--output-format=[specify the output format]:format:(u-ctags e-ctags etags xref)" \
"--param-<lang>=[set <lang> specific parameter]:argument" \
"--pattern-length-limit=[cutoff patterns of tag entries after N characters]:number" \
"--print-language[don't make tags file but just print the guessed lang name for input file]" \
"--pseudo-tags=[enable/disable emitting pseudo tag named ptag. if *, enable emitting all pseudo tags]:ptag" \
"--put-field-prefix[put UCTAGS as prefix for the name of fields newly introducted in universal ctags]" \
"--quiet=[don't print notice class messages]:bool:(yes no)" \
"--recurse=[recurse]:bool:(yes no)" \
"--regex-<lang>=[define regex for locating tags in specific lang]:pattern" \
"--roles-<lang>.<kind>=[enable/disable tag roles for kinds of <lang>]:role" \
"--sort=[should tags be sorted]:argument:(yes no foldcase)" \
"--tag-relative=[should paths be relative to location of tag file]:argument:(yes no always never)" \
"--totals=[print stats about input and tag files]:arguments:(yes no extra)" \
"--verbose=[enable verbose messages describing actions]:bool:(yes no)" \
"--version[print version]" \
"--with-list-header=[prepend the column descriptions in --list-* output]:bool:(yes no)" \
"*:file:_files"
if [ "$state" = "language" ]; then
compadd `ctags --list-languages | cut -d" " -f1`
elif [ "$state" = "languages" ]; then
_values -s , "languages" `ctags --list-languages | cut -d" " -f1`
if [ -z "$_ctags_type" ]; then
local output=`ctags --version 2>&1`
if [[ "$output" = *Universal\ Ctags* ]]; then
_ctags_type="universal"
elif [[ "$output" = *Exuberant\ Ctags* ]]; then
_ctags_type="exuberant"
elif [[ "$output" = *usage:\ ctags* ]]; then
_ctags_type="bsd"
elif [[ "$output" = *Emacs* ]]; then
_ctags_type="etags"
else
_ctags_type="universal"
fi
fi
"-x[print a tabular cross reference file to stdout]" \
"--alias-<lang>=[add a pattern detecting a name, can be used as an alt name for lang]:pattern" \
"--append=[should tags be appended to existing tag file]:bool:(yes no)" \
"--etags-include=[include reference to file in emacs style tag file]:file:_files" \
"--exclude=[exclude files and directories matching pattern]:pattern" \
"--exclude-exception=[don't exclude files and directories matching pattern even if they match the pattern specified with --exclude]:pattern" \
"--excmd=[uses the specified type of ex command to locate tags]:ex command type:(number pattern mix combine)" \
"--extras=[include extra tag entries for selected information (flags fFgpqrs)]:flags" \
"--extras-<lang>=[include <lang> own extra tag entries for selected information]:flags" \
"--fields=[include selected extension fields (flags aCeEfFikKlmnNpPrRsStxzZ)]:flags" \
"--fields-<lang>=[include selected <lang> own extension fields]:flags" \
"--filter=[behave as a filter, reading file names from stdin and writing tags to stdout]:bool:(yes no)" \
"--filter-terminator=[specify string to print to stdout following the tags for each file parsed when --filter is enabled]:string" \
"--format=[force output of specified tag file format]:level" \
"--guess-language-eagerly[guess the language of input file more eagerly]" \
"--help[help text]" \
"--help-full[help text with experimental features]" \
"--if0=[should code within #if 0 conditionals be parsed]:bool:(yes no)" \
"--input-encoding=[specify encoding of all input files]:encoding" \
"--input-encoding-<lang>=[specify encoding of the <lang> input files]:encoding" \
"--kinddef-<lang>=[define new kind for <lang>]:kind" \
"--kinds-<lang>=[enable/disable tag kinds for <lang>]:kind" \
"--langdef=[define a new language to be parsed with regular expressions]:name" \
"--langmap=[override default mapping of language to input file extension]:maps" \
"--language-force=[force all files to be interpreted using specified language]:language:->language" \
"--languages=[restrict files scanned to these comma-separated languages]:language:->languages" \
"--license[print details of software license]" \
"--line-directives=[should #line directives be processed]:bool:(yes no)" \
"--links=[indicate whether symlinks should be followed]:bool:(yes no)" \
"--list-aliases=[list of alias patterns]:language:->language" \
"--list-excludes[list of exclude patterns for files/dirs]" \
"--list-extras=[list of extra tag flags]:language:->language" \
"--list-features[list of compiled features]" \
"--list-fields=[list of fields]:language:->language" \
"--list-kinds=[list of all tag kinds for lang]:language:->language" \
"--list-kinds-full=[list details of all tag kinds for lang]:language:->language" \
"--list-languages[list of supported languages]" \
"--list-map-extensions=[list of language extensions in mapping]:language:->language" \
"--list-map-patterns=[list of language patterns in mapping]:language:->language" \
"--list-maps=[list of language mappings (both extensions and patterns)]:language:->language" \
"--list-mline-regex-flags[list of flags which can be used in a multiline regex parser definition]" \
"--list-params=[list of language parameters. works with --machinable]:language:->language" \
"--list-pseudo-tags[list of pseudo tags]" \
"--list-regex-flags[list of flags which can be used in a regex parser definition]" \
"--list-roles=[list of all roles of tag kinds specified for langs]:language:->language" \
"--list-subparsers=[list of subparsers for the base lang]:language:->language" \
"--machinable=[use tab separated representation in --list-* output]:bool:(yes no)" \
"--map-<lang>=[set, add(+), or remove(-) the map for <lang>]:pattern" \
"--maxdepth=[specify maximum recursion depth]:depth" \
"--mline-regex-<lang>=[define multiline regex for locating tags in <lang>]:pattern" \
"--options=[specify file (or dir) from which command line options should be read]:file:_files" \
"--options-maybe=[same as --options but doesn't error]:file:_files" \
"--optlib-dir=[add or set dir to optlib search path]:dir:_files -/" \
"--output-encoding=[the encoding to write the tag file in]:encoding" \
"--output-format=[specify the output format]:format:(u-ctags e-ctags etags xref)" \
"--param-<lang>=[set <lang> specific parameter]:argument" \
"--pattern-length-limit=[cutoff patterns of tag entries after N characters]:number" \
"--print-language[don't make tags file but just print the guessed lang name for input file]" \
"--pseudo-tags=[enable/disable emitting pseudo tag named ptag. if *, enable emitting all pseudo tags]:ptag" \
"--put-field-prefix[put UCTAGS as prefix for the name of fields newly introducted in universal ctags]" \
"--quiet=[don't print notice class messages]:bool:(yes no)" \
"--recurse=[recurse]:bool:(yes no)" \
"--regex-<lang>=[define regex for locating tags in specific lang]:pattern" \
"--roles-<lang>.<kind>=[enable/disable tag roles for kinds of <lang>]:role" \
"--sort=[should tags be sorted]:argument:(yes no foldcase)" \
"--tag-relative=[should paths be relative to location of tag file]:argument:(yes no always never)" \
"--totals=[print stats about input and tag files]:arguments:(yes no extra)" \
"--verbose=[enable verbose messages describing actions]:bool:(yes no)" \
"--version[print version]" \
"--with-list-header=[prepend the column descriptions in --list-* output]:bool:(yes no)" \
"*:file:_files"
if [ "$state" = "language" ]; then
compadd `ctags --list-languages | cut -d" " -f1`
elif [ "$state" = "languages" ]; then
_values -s , "languages" `ctags --list-languages | cut -d" " -f1`
if [ "$_ctags_type" = "etags" ]; then
_etags
return $?
fi
local -a arguments
if [ "$_ctags_type" = "universal" ]; then
arguments=(
"-?[help text]"
"-a[append to tags file]"
"-B[use backward searching patterns (?...?)]"
"-D[give definition for macro]:macro definition:"
"-e[output tag file for use with emacs]"
"-f[write tags to specified file. - is stdout]:file:_files"
"-F[use forward searching patterns (/.../)]"
"-G[equivalent to --guess-language-eagerly]"
"-h[specify list of file extensions to be treated as include files]:"
"-I[a list of tokens to be specifically handled is read from either the command line or the specified file]:"
"-L[a list of input file names is read from the specified file. - is stdin]:file:_files"
"-n[equivalent to --excmd=number]"
"-N[equivalent to --excmd=pattern]"
"-o[alternative to -f]:file:_files"
"-R[equivalent to --recurse]"
"-u[equivalent to --sort=no]"
"-V[equivalent to --verbose]"
"-x[print a tabular cross reference file to stdout]"
"--alias-<lang>=[add a pattern detecting a name, can be used as an alt name for lang]:pattern"
"--append=[should tags be appended to existing tag file]:bool:(yes no)"
"--etags-include=[include reference to file in emacs style tag file]:file:_files"
"--exclude=[exclude files and directories matching pattern]:pattern"
"--exclude-exception=[don't exclude files and directories matching pattern even if they match the pattern specified with --exclude]:pattern"
"--excmd=[uses the specified type of ex command to locate tags]:ex command type:(number pattern mix combine)"
"--extras=[include extra tag entries for selected information (flags fFgpqrs)]:flags"
"--extras-<lang>=[include <lang> own extra tag entries for selected information]:flags"
"--fields=[include selected extension fields (flags aCeEfFikKlmnNpPrRsStxzZ)]:flags"
"--fields-<lang>=[include selected <lang> own extension fields]:flags"
"--filter=[behave as a filter, reading file names from stdin and writing tags to stdout]:bool:(yes no)"
"--filter-terminator=[specify string to print to stdout following the tags for each file parsed when --filter is enabled]:string"
"--format=[force output of specified tag file format]:level"
"--guess-language-eagerly[guess the language of input file more eagerly]"
"--help[help text]"
"--help-full[help text with experimental features]"
"--if0=[should code within #if 0 conditionals be parsed]:bool:(yes no)"
"--input-encoding=[specify encoding of all input files]:encoding"
"--input-encoding-<lang>=[specify encoding of the <lang> input files]:encoding"
"--kinddef-<lang>=[define new kind for <lang>]:kind"
"--kinds-<lang>=[enable/disable tag kinds for <lang>]:kind"
"--langdef=[define a new language to be parsed with regular expressions]:name"
"--langmap=[override default mapping of language to input file extension]:maps"
"--language-force=[force all files to be interpreted using specified language]:language:->language"
"--languages=[restrict files scanned to these comma-separated languages]:language:->languages"
"--license[print details of software license]"
"--line-directives=[should #line directives be processed]:bool:(yes no)"
"--links=[indicate whether symlinks should be followed]:bool:(yes no)"
"--list-aliases=[list of alias patterns]:language:->language"
"--list-excludes[list of exclude patterns for files/dirs]"
"--list-extras=[list of extra tag flags]:language:->language"
"--list-features[list of compiled features]"
"--list-fields=[list of fields]:language:->language"
"--list-kinds=[list of all tag kinds for lang]:language:->language"
"--list-kinds-full=[list details of all tag kinds for lang]:language:->language"
"--list-languages[list of supported languages]"
"--list-map-extensions=[list of language extensions in mapping]:language:->language"
"--list-map-patterns=[list of language patterns in mapping]:language:->language"
"--list-maps=[list of language mappings (both extensions and patterns)]:language:->language"
"--list-mline-regex-flags[list of flags which can be used in a multiline regex parser definition]"
"--list-params=[list of language parameters. works with --machinable]:language:->language"
"--list-pseudo-tags[list of pseudo tags]"
"--list-regex-flags[list of flags which can be used in a regex parser definition]"
"--list-roles=[list of all roles of tag kinds specified for langs]:language:->language"
"--list-subparsers=[list of subparsers for the base lang]:language:->language"
"--machinable=[use tab separated representation in --list-* output]:bool:(yes no)"
"--map-<lang>=[set, add(+), or remove(-) the map for <lang>]:pattern"
"--maxdepth=[specify maximum recursion depth]:depth"
"--mline-regex-<lang>=[define multiline regex for locating tags in <lang>]:pattern"
"--options=[specify file (or dir) from which command line options should be read]:file:_files"
"--options-maybe=[same as --options but doesn't error]:file:_files"
"--optlib-dir=[add or set dir to optlib search path]:dir:_files -/"
"--output-encoding=[the encoding to write the tag file in]:encoding"
"--output-format=[specify the output format]:format:(u-ctags e-ctags etags xref)"
"--param-<lang>=[set <lang> specific parameter]:argument"
"--pattern-length-limit=[cutoff patterns of tag entries after N characters]:number"
"--print-language[don't make tags file but just print the guessed lang name for input file]"
"--pseudo-tags=[enable/disable emitting pseudo tag named ptag. if *, enable emitting all pseudo tags]:ptag"
"--put-field-prefix[put UCTAGS as prefix for the name of fields newly introducted in universal ctags]"
"--quiet=[don't print notice class messages]:bool:(yes no)"
"--recurse=[recurse]:bool:(yes no)"
"--regex-<lang>=[define regex for locating tags in specific lang]:pattern"
"--roles-<lang>.<kind>=[enable/disable tag roles for kinds of <lang>]:role"
"--sort=[should tags be sorted]:argument:(yes no foldcase)"
"--tag-relative=[should paths be relative to location of tag file]:argument:(yes no always never)"
"--totals=[print stats about input and tag files]:arguments:(yes no extra)"
"--verbose=[enable verbose messages describing actions]:bool:(yes no)"
"--version[print version]"
"--with-list-header=[prepend the column descriptions in --list-* output]:bool:(yes no)"
"*:file:_files"
)
elif [ "$_ctags_type" = "exuberant" ]; then
arguments=(
"-a[append to tags file]"
"-B[use backward searching patterns (?...?)]"
"-e[output tag file for use with emacs]"
"-f[write tags to specified file. - is stdout]:file:_files"
"-F[use forward searching patterns (/.../)]"
"-h[specify list of file extensions to be treated as include files]:"
"-I[a list of tokens to be specifically handled is read from either the command line or the specified file]:"
"-L[a list of input file names is read from the specified file. - is stdin]:file:_files"
"-n[equivalent to --excmd=number]"
"-N[equivalent to --excmd=pattern]"
"-o[alternative to -f]:file:_files"
"-R[equivalent to --recurse]"
"-u[equivalent to --sort=no]"
"-V[equivalent to --verbose]"
"-x[print a tabular cross reference file to stdout]"
"--append=[should tags be appended to existing tag file]:bool:(yes no)"
"--etags-include=[include reference to file in emacs style tag file]:file:_files"
"--exclude=[exclude files and directories matching pattern]:pattern"
"--excmd=[uses the specified type of ex command to locate tags]:ex command type:(number pattern mix)"
"--extra=[include extra tag entries for selected information (flags fq)]:flags"
"--fields=[include selected extension fields (flags afmikKlnsStz)]:flags"
"--file-scope=[should tags scoped only for a single file be included in output]:bool:(yes no)"
"--filter=[behave as a filter, reading file names from stdin and writing tags to stdout]:bool:(yes no)"
"--filter-terminator=[specify string to print to stdout following the tags for each file parsed when --filter is enabled]:string"
"--format=[force output of specified tag file format]:level"
"--help[help text]"
"--if0=[should code within #if 0 conditionals be parsed]:bool:(yes no)"
"--<lang>-kinds=[enable/disable tag kinds for <lang>]:kind"
"--langdef=[define a new language to be parsed with regular expressions]:name"
"--langmap=[override default mapping of language to input file extension]:maps"
"--language-force=[force all files to be interpreted using specified language]:language:->language"
"--languages=[restrict files scanned to these comma-separated languages]:language:->languages"
"--license[print details of software license]"
"--line-directives=[should #line directives be processed]:bool:(yes no)"
"--links=[indicate whether symlinks should be followed]:bool:(yes no)"
"--list-kinds=[list of all tag kinds for lang]:language:->language"
"--list-languages[list of supported languages]"
"--list-maps=[list of language mappings (both extensions and patterns)]:language:->language"
"--options=[specify file (or dir) from which command line options should be read]:file:_files"
"--recurse=[recurse]:bool:(yes no)"
"--regex-<lang>=[define regex for locating tags in specific lang]:pattern"
"--sort=[should tags be sorted]:argument:(yes no foldcase)"
"--tag-relative=[should paths be relative to location of tag file]:argument:(yes no)"
"--totals=[print stats about input and tag files]:arguments:(yes no)"
"--verbose=[enable verbose messages describing actions]:bool:(yes no)"
"--version[print version]”
"*:file:_files"
)
elif [ "$_ctags_type" = "bsd" ]; then
arguments=(
"-a[append to tags file]"
"-B[use backward searching patterns (?...?)]"
"-d[create tags for #defines that don't take arguments]"
"-F[use forward searching patterns (/.../)]"
"-f[write tags to specified file]:file:_files"
"-t[create tags for typedefs, structs, unions, and enums]"
"-u[update the specified files in the tags file]"
"-v[an index of the form expected by vgrind(1) is produced]"
"-w[suppress warning diagnostics]"
"-x[ctags produces a simple function index]"
"*:file:_files"
)
fi
_arguments $arguments
if [[ "$state" = language* ]]; then
local -a languages
languages=(`ctags --list-languages | cut -d" " -f1`)
if [ "$state" = "language" ]; then
_wanted languages expl language compadd $languages
elif [ "$state" = "languages" ]; then
_values -s , languages $languages
fi
fi
return $(( compstate[nmatches] > 0 ? 0 : 1 ))