rusty1s/dotfiles

View on GitHub

Showing 27 of 27 total issues

Avoid deeply nested control flow statements.
Open

                if all([
                        act['status'] == 'completed'
                        and act['conclusion'] == 'success' for act in actions
                ]):
                    action = 'success'
Severity: Major
Found in widgets/github/script.py - About 45 mins to fix

    Avoid commands that rely on user settings
    Open

        %s/\s\+$//e
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    Can't follow non-constant source. Use a directive to specify location.
    Open

    source "$HOME/dotfiles/ubuntu/.pathrc"
    Severity: Minor
    Found in ubuntu/install_linuxbrew.sh by shellcheck

    Can't follow non-constant source. Use a directive to specify location.

    Problematic code:

    . "$(find_install_dir)/lib.sh"

    Correct code:

    # shellcheck source=src/lib.sh
    . "$(find_install_dir)/lib.sh"

    Rationale:

    ShellCheck is not able to include sourced files from paths that are determined at runtime. The file will not be read, potentially resulting in warnings about unassigned variables and similar.

    Use a [[Directive]] to point shellcheck to a fixed location it can read instead.

    Exceptions:

    If you don't care that ShellCheck is unable to account for the file, specify # shellcheck source=/dev/null.

    Notice

    Original content from the ShellCheck https://github.com/koalaman/shellcheck/wiki.

    Use scriptencoding when multibyte char exists
    Open

    set clipboard=unnamed
    Severity: Minor
    Found in vim/plugin/settings.vim by vint

    :help :scriptencoding

    Avoid commands that rely on user settings
    Open

      :silent! %s#\($\n\s*\)\+\%$##
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    In POSIX sh, 'source' in place of '.' is undefined.
    Open

    source "$HOME/dotfiles/ubuntu/.pathrc"
    Severity: Minor
    Found in ubuntu/install_linuxbrew.sh by shellcheck

    In POSIX sh, something is undefined.

    You have declared that your script works with /bin/sh, but you are using features that have undefined behavior according to the POSIX specification.

    It may currently work for you, but it can or will fail on other OS, the same OS with different configurations, from different contexts (like initramfs/chroot), or in different versions of the same OS, including future updates to your current system.

    Either declare that your script requires a specific shell like #!/bin/bash or #!/bin/dash, or rewrite the script in a portable way.

    For help with rewrites, the Ubuntu wiki has a list of portability issues that broke people's #!/bin/sh scripts when Ubuntu switched from Bash to Dash. See also Bashism on wooledge's wiki. ShellCheck may not warn about all these issues.

    $'c-style-escapes'

    bash, ksh:

    a=$' \t\n'

    POSIX:

    a="$(printf '%b_' ' \t\n')"; a="${a%_}" # protect trailing \n

    Want some good news? See http://austingroupbugs.net/view.php?id=249#c590.

    $"msgid"

    Bash:

    echo $"foo $(bar) baz"

    POSIX:

    . gettext.sh # GNU Gettext sh library
    # ...
    barout=$(bar)
    eval_gettext 'foo $barout baz' # See GNU Gettext doc for more info.

    Or you can change them to normal double quotes so you go without gettext.

    Arithmetic for loops

    Bash:

    for ((init; test; next)); do foo; done

    POSIX:

    : $((init))
    while [ $((test)) -ne 0 ]; do foo; : $((next)); done

    Arithmetic exponentiation

    Bash:

    printf "%s\n" "$(( 2**63 ))"

    POSIX:

    The POSIX standard does not allow for exponents. However, you can replicate them completely built-in using a POSIX compatible function. As an example, the pow function from here.

    pow () {
        set "$1" "$2" 1
        while [ "$2" -gt 0 ]; do
          set "$1" $(($2-1)) $(($1*$3))
        done
        # %d = signed decimal, %u = unsigned decimal
        # Either should overflow to 0
        printf "%d\n" "$3"
    }

    To compare:

    $ echo "$(( 2**62 ))"
    4611686018427387904
    $ pow 2 62
    4611686018427387904

    Alternatively, if you don't mind using an external program, you can use bc. Be aware though: bash and other programs may abide by a certain maximum integer that bc does not (for bash that's: 64-bit signed long int, failing back to 32-bit signed long int).

    Example:

    # Note the overflow that gives a negative number
    $ echo "$(( 2**63 ))"
    -9223372036854775808
    
    # No such problem
    $ echo 2^63 | bc
    9223372036854775808
    
    # 'bc' just keeps on going
    $ echo 2^1280 | bc
    20815864389328798163850480654728171077230524494533409610638224700807\
    21611934672059602447888346464836968484322790856201558276713249664692\
    98162798132113546415258482590187784406915463666993231671009459188410\
    95379622423387354295096957733925002768876520583464697770622321657076\
    83317005651120933244966378183760369413644440628104205339687097746591\
    6057756101739472373801429441421111406337458176

    standalone ((..))

    Bash:

    ((a=c+d))
    ((d)) && echo d is true.

    POSIX:

    : $((a=c+d)) # discard the output of the arith expn with `:` command
    [ $((d)) -ne 0 ] && echo d is true. # manually check non-zero => true

    select loops

    It takes extra care over terminal columns to make select loop look like bash's, which generates a list with multiple items on one line, or like ls.

    It is, however, still possible to make a naive translation for select foo in bar baz; do eat; done:

    while
      _i=0 _foo= foo=
      for _name in bar baz; do echo "$((_i+=1))) $_name"; done
      printf '$# '; read _foo
    do
      case _foo in 1) foo=bar;; 2) foo=baz;; *) continue;; esac
      eat
    done

    Here-strings

    Bash, ksh:

    grep aaa <<< "$g"

    POSIX:

    # not exactly the same -- <<< adds a trailing \n if $g doesn't end with \n
    printf '%s' "$g" | grep aaa

    echo flags

    See https://unix.stackexchange.com/tags/echo/info.

    ${var/pat/replacement}

    Bash:

    echo "${TERM/%-256*}"

    POSIX:

    echo "$TERM" | sed -e 's/-256.*$//g'
    # Special case for this since we are matching the end:
    echo "${TERM%-256*}"

    printf %q

    Bash:

    printf '%q ' "$@"

    POSIX:

    # TODO: Interpret it back to printf escapes for hard-to-copy chars like \t?
    # See also: http://git.savannah.gnu.org/cgit/libtool.git/tree/gl/build-aux/funclib.sh?id=c60e054#n1029
    reuse_quote()(
      for i; do
        __i_quote=$(printf '%s\n' "$i" | sed -e "s/'/'\\\\''/g"; echo x)
        printf "'%s'" "${__i_quote%x}"
      done
    )
    reuse_quote "$@"

    Exception

    Depends on what your expected POSIX shell providers would use.

    Notice

    Original content from the ShellCheck https://github.com/koalaman/shellcheck/wiki.

    Avoid commands that rely on user settings
    Open

        normal 'yz<CR>
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    First header should be a top level header
    Open

    ## Marked
    Severity: Info
    Found in macos/README.md by markdownlint

    MD002 - First header should be a top level header

    Tags: headers

    Aliases: first-header-h1

    Parameters: level (number; default 1)

    This rule is triggered when the first header in the document isn't a h1 header:

    ## This isn't a H1 header
    
    ### Another header

    The first header in the document should be a h1 header:

    # Start with a H1 header
    
    ## Then use a H2 for subsections

    Do not use a command that has unintended side effects
    Open

        %s/\s\+$//e
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Dangerous)

    Unordered list indentation
    Open

       * Set `darkwake=8` to enable sleep
    Severity: Info
    Found in settings/hackintosh.md by markdownlint

    MD007 - Unordered list indentation

    Tags: bullet, ul, indentation

    Aliases: ul-indent

    Parameters: indent (number; default 2)

    This rule is triggered when list items are not indented by the configured number of spaces (default: 2).

    Example:

    * List item
       * Nested list item indented by 3 spaces

    Corrected Example:

    * List item
      * Nested list item indented by 2 spaces

    Rationale (2 space indent): indenting by 2 spaces allows the content of a nested list to be in line with the start of the content of the parent list when a single space is used after the list marker.

    Rationale (4 space indent): Same indent as code blocks, simpler for editors to implement. See http://www.cirosantilli.com/markdown-styleguide/#indented-lists for more information.

    In addition, this is a compatibility issue with multi-markdown parsers, which require a 4 space indents. See http://support.markedapp.com/discussions/problems/21-sub-lists-not-indenting for a description of the problem.

    Ordered list item prefix
    Open

    2. Setup Miniconda
    Severity: Info
    Found in new/README.md by markdownlint

    MD029 - Ordered list item prefix

    Tags: ol

    Aliases: ol-prefix

    Parameters: style ("one", "ordered"; default "one")

    This rule is triggered on ordered lists that do not either start with '1.' or do not have a prefix that increases in numerical order (depending on the configured style, which defaults to 'one').

    Example valid list if the style is configured as 'one':

    1. Do this.
    1. Do that.
    1. Done.

    Example valid list if the style is configured as 'ordered':

    1. Do this.
    2. Do that.
    3. Done.

    Avoid commands that rely on user settings
    Open

        normal `z
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    Avoid commands that rely on user settings
    Open

        normal Hmy
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    In POSIX sh, [[ ]] is undefined.
    Open

      if [[ "$artist" != *"]"* ]]; then
    Severity: Minor
    Found in i3/spotify.sh by shellcheck

    In POSIX sh, something is undefined.

    You have declared that your script works with /bin/sh, but you are using features that have undefined behavior according to the POSIX specification.

    It may currently work for you, but it can or will fail on other OS, the same OS with different configurations, from different contexts (like initramfs/chroot), or in different versions of the same OS, including future updates to your current system.

    Either declare that your script requires a specific shell like #!/bin/bash or #!/bin/dash, or rewrite the script in a portable way.

    For help with rewrites, the Ubuntu wiki has a list of portability issues that broke people's #!/bin/sh scripts when Ubuntu switched from Bash to Dash. See also Bashism on wooledge's wiki. ShellCheck may not warn about all these issues.

    $'c-style-escapes'

    bash, ksh:

    a=$' \t\n'

    POSIX:

    a="$(printf '%b_' ' \t\n')"; a="${a%_}" # protect trailing \n

    Want some good news? See http://austingroupbugs.net/view.php?id=249#c590.

    $"msgid"

    Bash:

    echo $"foo $(bar) baz"

    POSIX:

    . gettext.sh # GNU Gettext sh library
    # ...
    barout=$(bar)
    eval_gettext 'foo $barout baz' # See GNU Gettext doc for more info.

    Or you can change them to normal double quotes so you go without gettext.

    Arithmetic for loops

    Bash:

    for ((init; test; next)); do foo; done

    POSIX:

    : $((init))
    while [ $((test)) -ne 0 ]; do foo; : $((next)); done

    Arithmetic exponentiation

    Bash:

    printf "%s\n" "$(( 2**63 ))"

    POSIX:

    The POSIX standard does not allow for exponents. However, you can replicate them completely built-in using a POSIX compatible function. As an example, the pow function from here.

    pow () {
        set "$1" "$2" 1
        while [ "$2" -gt 0 ]; do
          set "$1" $(($2-1)) $(($1*$3))
        done
        # %d = signed decimal, %u = unsigned decimal
        # Either should overflow to 0
        printf "%d\n" "$3"
    }

    To compare:

    $ echo "$(( 2**62 ))"
    4611686018427387904
    $ pow 2 62
    4611686018427387904

    Alternatively, if you don't mind using an external program, you can use bc. Be aware though: bash and other programs may abide by a certain maximum integer that bc does not (for bash that's: 64-bit signed long int, failing back to 32-bit signed long int).

    Example:

    # Note the overflow that gives a negative number
    $ echo "$(( 2**63 ))"
    -9223372036854775808
    
    # No such problem
    $ echo 2^63 | bc
    9223372036854775808
    
    # 'bc' just keeps on going
    $ echo 2^1280 | bc
    20815864389328798163850480654728171077230524494533409610638224700807\
    21611934672059602447888346464836968484322790856201558276713249664692\
    98162798132113546415258482590187784406915463666993231671009459188410\
    95379622423387354295096957733925002768876520583464697770622321657076\
    83317005651120933244966378183760369413644440628104205339687097746591\
    6057756101739472373801429441421111406337458176

    standalone ((..))

    Bash:

    ((a=c+d))
    ((d)) && echo d is true.

    POSIX:

    : $((a=c+d)) # discard the output of the arith expn with `:` command
    [ $((d)) -ne 0 ] && echo d is true. # manually check non-zero => true

    select loops

    It takes extra care over terminal columns to make select loop look like bash's, which generates a list with multiple items on one line, or like ls.

    It is, however, still possible to make a naive translation for select foo in bar baz; do eat; done:

    while
      _i=0 _foo= foo=
      for _name in bar baz; do echo "$((_i+=1))) $_name"; done
      printf '$# '; read _foo
    do
      case _foo in 1) foo=bar;; 2) foo=baz;; *) continue;; esac
      eat
    done

    Here-strings

    Bash, ksh:

    grep aaa <<< "$g"

    POSIX:

    # not exactly the same -- <<< adds a trailing \n if $g doesn't end with \n
    printf '%s' "$g" | grep aaa

    echo flags

    See https://unix.stackexchange.com/tags/echo/info.

    ${var/pat/replacement}

    Bash:

    echo "${TERM/%-256*}"

    POSIX:

    echo "$TERM" | sed -e 's/-256.*$//g'
    # Special case for this since we are matching the end:
    echo "${TERM%-256*}"

    printf %q

    Bash:

    printf '%q ' "$@"

    POSIX:

    # TODO: Interpret it back to printf escapes for hard-to-copy chars like \t?
    # See also: http://git.savannah.gnu.org/cgit/libtool.git/tree/gl/build-aux/funclib.sh?id=c60e054#n1029
    reuse_quote()(
      for i; do
        __i_quote=$(printf '%s\n' "$i" | sed -e "s/'/'\\\\''/g"; echo x)
        printf "'%s'" "${__i_quote%x}"
      done
    )
    reuse_quote "$@"

    Exception

    Depends on what your expected POSIX shell providers would use.

    Notice

    Original content from the ShellCheck https://github.com/koalaman/shellcheck/wiki.

    E492: Not an editor command: packadd vim-happy-hacking
    Open

    packadd vim-happy-hacking
    Severity: Minor
    Found in new/init.vim by vint

    ynkdir/vim-vimlparser

    Use scriptencoding when multibyte char exists
    Open

    function! statusline#fileprefix() abort
    Severity: Minor
    Found in vim/autoload/statusline.vim by vint

    :help :scriptencoding

    Can't follow non-constant source. Use a directive to specify location.
    Open

    source "$HOME/dotfiles/ubuntu/.pathrc"
    Severity: Minor
    Found in ubuntu/conda.sh by shellcheck

    Can't follow non-constant source. Use a directive to specify location.

    Problematic code:

    . "$(find_install_dir)/lib.sh"

    Correct code:

    # shellcheck source=src/lib.sh
    . "$(find_install_dir)/lib.sh"

    Rationale:

    ShellCheck is not able to include sourced files from paths that are determined at runtime. The file will not be read, potentially resulting in warnings about unassigned variables and similar.

    Use a [[Directive]] to point shellcheck to a fixed location it can read instead.

    Exceptions:

    If you don't care that ShellCheck is unable to account for the file, specify # shellcheck source=/dev/null.

    Notice

    Original content from the ShellCheck https://github.com/koalaman/shellcheck/wiki.

    Ordered list item prefix
    Open

    5. Run `main.sh`
    Severity: Info
    Found in new/README.md by markdownlint

    MD029 - Ordered list item prefix

    Tags: ol

    Aliases: ol-prefix

    Parameters: style ("one", "ordered"; default "one")

    This rule is triggered on ordered lists that do not either start with '1.' or do not have a prefix that increases in numerical order (depending on the configured style, which defaults to 'one').

    Example valid list if the style is configured as 'one':

    1. Do this.
    1. Do that.
    1. Done.

    Example valid list if the style is configured as 'ordered':

    1. Do this.
    2. Do that.
    3. Done.

    Use scriptencoding when multibyte char exists
    Open

    set statusline=                                " Start with a clean line.
    Severity: Minor
    Found in vim/plugin/statusline.vim by vint

    :help :scriptencoding

    Avoid commands that rely on user settings
    Open

        normal mz
    Severity: Minor
    Found in vim/autoload/trim.vim by vint

    Google VimScript Style Guide (Fragile)

    Severity
    Category
    Status
    Source
    Language