# shellcheck shell=dash

___x_cmd_solo___detect(){
    local x_
    ___x_cmd_solo___detect_ "$@" || return $?
    printf "%s\n" "$x_"
}

___x_cmd_solo___detect_(){
    local filepath="${1:?filepath}"; shift
    local ext="${filepath##*.}"
    x_=
    case "$ext" in
        "$filepath")        return 126      ;;
        py)                 x_=python       ;;
        mojo)               x_=mojo         ;;
        jl)                 x_=julia        ;;

        pl)                 x_=perl         ;;
        rb)                 x_=ruby         ;;

        js|ts)
                            case "$filepath" in
                                *".bun.js"|*".bun.ts")      x_=bun  ;;
                                *".deno.js"|*".deno.ts")    x_=deno ;;
                                *)                          x_=node ;;
                            esac            ;;

        hy)                 x_=hy           ;;
        lisp)               x_=lisp         ;;
        el)                 x_=elisp        ;;

        go)                 x_=go           ;;
        gop)                x_=gop          ;;
        xgo)                x_=xgo          ;;
        raku|rakumod)       x_=raku         ;;

        7z)                 x_=7z           ;;

        bash)               x_=bash         ;;
        zsh)                x_=zsh          ;;
        fish)               x_=fish         ;;
        ksh)                x_=ksh          ;;
        sh)                 x_=sh           ;;

        java)               x_=java         ;;      # No File Header for this.
        jar)                x_=jar          ;;      # No File Header for this.
        groovy)             x_=groovy       ;;
        kts)                x_=kts          ;;      # No File Header for this.

        lua|zig|c|cpp)      x_="$ext"       ;;

        txt)                x_=bat          ;;
        yml|yaml)           x_=yml          ;;
        json|jso)           x_=ja           ;;
        toml)               x_=bat          ;;

        ipynb)              x_=ipynb        ;;
        slidev.md)          x_=slidev       ;;
        reveal.md)          x_=reveal       ;;

        wx|speg)            x_="$ext"       ;;

        *)                  return 126      ;;
    esac
}