diff options
author | Ben Sima <ben@bsima.me> | 2024-04-01 15:19:49 -0400 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2024-04-01 15:19:49 -0400 |
commit | 2d40ec3a03f4684f6fabba7dee2981c992a13785 (patch) | |
tree | 1edc1522fd5eb8e6d20b1b4dbde89f3e49ad9e51 /Biz/Ide/repl.sh | |
parent | db373a8c727cad91d375b40a6c70b11ed73bdafb (diff) |
Rename .bash files to .sh
I was already using .sh to refer to shell scripts. When I added .bash, I didn't
realize that the linter was set to act on .sh files and not .bash files, so all
of these bash scripts escaped the linter.
This commit renames them to .sh, removes the .bash extension support from
Biz.Namespace, and fixes all the reported shellcheck errors.
Diffstat (limited to 'Biz/Ide/repl.sh')
-rwxr-xr-x | Biz/Ide/repl.sh | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Biz/Ide/repl.sh b/Biz/Ide/repl.sh new file mode 100755 index 0000000..78fe1eb --- /dev/null +++ b/Biz/Ide/repl.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +### +### a simple complement to bild which only deals with launching repls +### +### > repl [opts] <target..> +### +### Starts a repl/shell for one or more targets. (Currently, all targets must +### have the same extension for this to work.) Repls started with this script +### should bind to `localhost:$PORT`. +### +### Options: +### --bash start bash instead of the target language repl +help() { + sed -rn 's/^### ?//;T;p' "$0" +} +if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then + help + exit 1 +fi +## + set -e + CMD= + if [[ "$1" == "--bash" ]]; then + CMD="bash" + shift + fi + targets="${*:?}" + json=$(bild --plan "${targets[@]}") + mapfile -t langdeps < <(jq --raw-output '.[].langdeps | select(length > 0) | join("\n")' <<< "$json") + mapfile -t sysdeps < <(jq --raw-output '.[].sysdeps | select(length > 0) | join("\n")' <<< "$json") + mapfile -t rundeps < <(jq --raw-output '.[].rundeps | select(length > 0) | join("\n")' <<< "$json") + exts=$(jq --raw-output '.[].namespace.ext' <<< "$json" | sort | uniq) + packageSet=$(jq --raw-output '.[].packageSet' <<< "$json") + module=$(jq --raw-output '.[].mainModule' <<< "$json") + BILD="(import ${CODEROOT:?}/Biz/Bild.nix {})" + declare -a flags=(--packages "$BILD.pkgs.pkg-config") + for lib in "${sysdeps[@]}"; do + flags+=(--packages "$BILD.pkgs.${lib}") + done + for lib in "${rundeps[@]}"; do + flags+=(--packages "$BILD.pkgs.${lib}") + done + case $exts in + C) + flags+=(--packages "$BILD.pkgs.gcc") + command="bash" + ;; + Hs) + if [ -z ${var+PORT} ]; then + echo "warn: repl: ghci does not support binding to a port" + fi + flags+=(--packages "$BILD.bild.haskell.ghcWith (h: with h; [${langdeps[*]}])") + command=${CMD:-"ghci -i${CODEROOT:?} -ghci-script ${CODEROOT:?}/.ghci ${targets[@]}"} + ;; + Scm) + for lib in "${langdeps[@]}"; do + flags+=(--packages "$BILD.guile-${lib}") + done + flags+=(--packages "$BILD.guile") + command=${CMD:-"guile -L ${CODEROOT:?} -C ${CODEROOT:?}/_/int --r7rs --listen=${PORT:-37146}"} + ;; + Lisp) + flags+=(--packages "$BILD.bild.$packageSet (p: with p; [asdf swank ${langdeps[*]}])") + command=${CMD:-"sbcl --eval '(require :asdf)' --eval '(require :swank)' --eval '(swank:create-server :port ${PORT:-4005})' --load $targets"} + ;; + Rs) + flags+=(--packages "$BILD.nixpkgs.rustc") + command=bash + ;; + Py) + langdeps+=("mypy") + flags+=(--packages ruff) + flags+=(--packages "$BILD.bild.python.pythonWith (p: with p; [${langdeps[*]}])") + PYTHONPATH=$CODEROOT:$PYTHONPATH + pycommand="python -i $CODEROOT/Biz/Repl.py $module ${targets[*]}" + command=${CMD:-"$pycommand"} + ;; + *) + echo "unsupported targets: ${targets[*]}" + exit 1 + ;; + esac +## + nix-shell "${flags[@]}" --command "$command" +## |