Files
would-reformat/_reformat-common.bash
2023-09-30 17:17:00 -06:00

164 lines
3.1 KiB
Bash

function get_os() {
un=$(uname)
if [[ "$un" = "Linux" ]]; then
echo -n "linux"
return 0
fi
if [[ "$un" = "Darwin" ]]; then
echo -n "osx"
return 0
fi
}
## OPERATING_SYSTEM=$(get_os)
# For a given file, return its corresponding project root.
function project_root() {
set +u
if [[ ! -z "${PROJECT_ROOT}" ]]; then
echo "$PROJECT_ROOT"
return 0
fi
set -u
pushd "$(dirname "$1")" >/dev/null 2>&1 || exit 101
out=$(git rev-parse --show-toplevel)
ret="$?"
popd >/dev/null 2>&1 || exit 1
if [[ "$ret" != "0" ]]; then
echo -n ""
return 1
fi
echo -n "$out"
return 0
}
# When run from a dir with would-format configured, return
# would-format's own directory
wf_root() {
arg=$(pwd)/bin/would-reformat.sh
pr=$(project_root "$arg")
link="$pr/bin/would-reformat.sh"
original0=$(resolve_symlink "$link")
original=$(normalize_dir_of_file "$original0")
out="$original"
echo "$out"
return 0
}
# FIXME: Make this bail if it fails
function normalize_dir_of_file() {
out0=$(readlink -m "$1")
out=$(dirname "$out0")
echo -n "$out"
return 0
}
function resolve_symlink() {
if [[ "$OPERATING_SYSTEM" = "osx" ]]; then
out=$(readlink "$1")
else
out=$(readlink -f "$1")
fi
echo "$out"
}
function custom_sniff() {
file="$1"
pr=$(project_root "$file")
if [[ -f "$pr/.would-reformat/custom-sniffer" ]]; then
custom=$("$pr/.would-reformat/custom-sniffer" "$1")
ret="$?"
echo "$custom"
return 0
fi
}
function custom_formatter() {
root="$1"
file_type="$2"
maybe="$root/.would-reformat/$file_type"
if [[ -f "$maybe" ]]; then
echo "$maybe"
return
fi
echo "use-default"
}
## WOULD_FORMAT_PROJECT_ROOT=$(project_root $1)
# FIXME: This needs to be made customizable
function sniff_file_type() {
ff=$1
shift
maybe_custom=$(custom_sniff "$ff")
if [[ "$maybe_custom" != "" ]]; then
echo "$maybe_custom"
return 0
fi
file_type=
if [[ $ff == *.py ]]; then
file_type="python"
elif [[ $ff == *.js ]]; then
file_type="javascript"
elif [[ $ff == *.ts ]]; then
file_type="typescript"
elif [[ $ff == *.vue ]]; then
file_type="vue"
elif [[ $ff == *.css ]]; then
file_type="css"
elif [[ $ff == *.php ]]; then
file_type="php"
elif [[ $ff == *.html ]]; then
file_type="html"
elif [[ $ff == *.jsx ]]; then
file_type="jsx"
elif [[ $ff == *.tsx ]]; then
file_type="tsx"
elif [[ $ff == *.css ]]; then
file_type="css"
elif [[ $ff == *.scss ]]; then
file_type="scss"
elif [[ $ff = *.sh ]]; then
file_type="sh"
elif [[ $ff = *.go ]]; then
file_type="golang"
elif [[ $ff = *.dart ]]; then
file_type="dart"
elif [[ $ff = *.pl ]]; then
file_type="perl"
fi
echo $file_type
}
function wrflog() {
echo "$@" >>/tmp/wrflog
}
# WOULD_FORMAT_INSTALLATION_ROOT=$(wfroot)
export WOULD_FORMAT_PROJECT_ROOT