python-poetry/cleo

use shellcheck on generated bash completion script

akeeman opened this issue · 0 comments

I suggest verifying the validity of a generated bash completion script using shellcheck. It would catch errors like mentioned in #260:

$ shellcheck <(poetry completions bash)

In /dev/fd/63 line 26:
        case "$com" in
        ^-- SC1009 (info): The mentioned syntax error was in this case expression.


In /dev/fd/63 line 40:
            (cache clear)
            ^-- SC1073 (error): Couldn't parse this case item. Fix to allow more checks.
                   ^-- SC1072 (error): Expected ) to open a new case item. Fix any mentioned problems and try again.
                   ^-- SC1085 (error): Did you forget to move the ;; after extending this case item?

For more information:
  https://www.shellcheck.net/wiki/SC1085 -- Did you forget to move the ;; aft...
  https://www.shellcheck.net/wiki/SC1072 -- Expected ) to open a new case ite...
  https://www.shellcheck.net/wiki/SC1073 -- Couldn't parse this case item. Fi...

once these are solved, shellcheck suggests some other non-critical changes:

$ shellcheck <(poetry completions bash)

In /dev/fd/63 line 1:
_poetry_6df9602aac65d588_complete()
^-- SC2148 (error): Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.


In /dev/fd/63 line 8:
    if [[ $(type -t ${words[0]}) == "alias" ]]; then
                    ^---------^ SC2154 (warning): words is referenced but not assigned (did you mean 'word'?).
                    ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
    if [[ $(type -t "${words[0]}") == "alias" ]]; then


In /dev/fd/63 line 9:
        script=$(alias ${words[0]} | sed -E "s/alias ${words[0]}='(.*)'/\1/")
                       ^---------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        script=$(alias "${words[0]}" | sed -E "s/alias ${words[0]}='(.*)'/\1/")


In /dev/fd/63 line 11:
        script=${words[0]}
        ^----^ SC2034 (warning): script appears unused. Verify use (or export if used externally).


In /dev/fd/63 line 15:
    for word in ${words[@]:1}; do
                ^-----------^ SC2068 (error): Double quote array expansions to avoid re-splitting elements.


In /dev/fd/63 line 182:
        COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
                   ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).
                                             ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        COMPREPLY=($(compgen -W "${opts}" -- "${cur}"))


In /dev/fd/63 line 189:
    if [[ $cur == $com ]]; then
                  ^--^ SC2053 (warning): Quote the right-hand side of == in [[ ]] to prevent glob matching.


In /dev/fd/63 line 192:
        COMPREPLY=($(compgen -W "${coms}" -- ${cur}))
                   ^-- SC2207 (warning): Prefer mapfile or read -a to split command output (or quote to avoid splitting).
                                             ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
        COMPREPLY=($(compgen -W "${coms}" -- "${cur}"))

For more information:
  https://www.shellcheck.net/wiki/SC2068 -- Double quote array expansions to ...
  https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
  https://www.shellcheck.net/wiki/SC2034 -- script appears unused. Verify use...