function __fisher_plugin_validate -a plugin
    switch "$plugin"
        case . /\* ./\* ../\*
            if test ! -e $plugin
                return 1
            end

            switch "$plugin"
                case /\*
                    printf "%s\n" $plugin

                case \*

                    printf "$PWD/%s/%s" (dirname $plugin) (basename $plugin)

            end | sed -E 's|[./]*$||; s|/([\./])/+|/|g'

        case \*
            set -l id "[A-Za-z0-9._-]"

            if not printf "%s\n" $plugin | grep -qE "^(($id+)[:/]*)*\$"
                printf "%s\n" $plugin
                return 1
            end

            printf "%s\n" $plugin \
                | sed -E "
                    s|^gh[:/]*|https://github.com/|
                    s|^gl[:/]*|https://gitlab.com/|
                    s|^bb[:/]*|https://bitbucket.org/|
                    s|^omf[:/]*|https://github.com/oh-my-fish/|
                    s|^($id+)/($id+)\$|https://github.com/\1/\2|
                    s|^http(s?)[:/]*|http\1://|
                    s|https://github((.com)?/)?|https://github.com/|
                    s|/*(\.git/*)*\$||g" \
                | tr "[A-Z]" "[a-z]"
    end
end

function __fisher_plugin_validate -a plugin
    switch "$plugin"
        case . /\* ./\* ../\*
            if test ! -e $plugin
                return 1
            end

            switch "$plugin"
                case /\*
                    printf "%s\n" $plugin

                case \*

                    printf "$PWD/%s/%s" (dirname $plugin) (basename $plugin)

            end | sed -E 's|[./]*$||; s|/([\./])/+|/|g'

        case \*
            set -l id "[A-Za-z0-9._-]"

            if not printf "%s\n" $plugin | grep -qE "^(($id+)[:/]*)*\$"
                printf "%s\n" $plugin
                return 1
            end

            printf "%s\n" $plugin \
                | sed -E "
                    s|^gh[:/]+|https://github.com/|
                    s|^gl[:/]+|https://gitlab.com/|
                    s|^bb[:/]+|https://bitbucket.org/|
                    s|^omf[:/]+|https://github.com/oh-my-fish/|
                    s|^($id+)/($id+)\$|https://github.com/\1/\2|
                    s|^http(s?)[:/]*|http\1://|
                    s|https://github((.com)?/)?|https://github.com/|
                    s|/*(\.git/*)*\$||g" \
                | tr "[A-Z]" "[a-z]"
    end
end

Tweak validate regex to correctly handle plugins named bb, gh, gl or omf.
Tweak validate regex to correctly handle plugins named bb, gh, gl or omf.

fisherman/fisherman