mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-25 04:11:14 -03:00
Replace the `build_tools/style.fish` script by an xtask. This eliminates the need for a fish binary for performing the formatting/checking. The `fish_indent` binary is still needed. Eventually, this should be made available as a library function, so the xtask can use that instead of requiring a `fish_indent` binary in the `$PATH`. The new xtask is called `format` rather than `style`, because that's a more fitting description of what it does (and what the script it replaces did). The old script's behavior is not replicated exactly: - Specifying `--all` and explicit paths is supported within a single invocation. - Explicit arguments no longer have to be files. If a directory is specified, all files within it will be considered. - The git check for un-staged changes is no longer filtered by file names, mainly to simplify the implementation. - A warning is now printed if neither the `--all` flag nor a path are provided as arguments. The reason for this is that one might assume that omitting these arguments would default to formatting everything in the current directory, but instead no formatting will happen in this case. - The wording of some messages is different. The design of the new code tries to make it easy to add formatters for additional languages, or change the ones we already have. This is achieved by separating the code into one function per language, which can be modified without touching the code for the other languages. Adding support for a new formatter/language only requires adding a function which builds the formatter command line based on the arguments to the xtask, and calling that function from the main `format` function. Closes #12467
95 lines
2.5 KiB
Bash
Executable File
95 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
{
|
|
set -ex
|
|
|
|
lint=true
|
|
if [ "$FISH_CHECK_LINT" = false ]; then
|
|
lint=false
|
|
fi
|
|
|
|
check_dependency_versions=false
|
|
if [ "${FISH_CHECK_DEPENDENCY_VERSIONS:-false}" != false ]; then
|
|
check_dependency_versions=true
|
|
fi
|
|
|
|
if $check_dependency_versions; then
|
|
command -v curl
|
|
command -v jq
|
|
command -v rustup
|
|
command -v uv
|
|
sort --version-sort </dev/null
|
|
# To match existing behavior, only check Rust/dockerfiles for now.
|
|
# TODO: remove this from this script.
|
|
updatecli diff --config=updatecli.d/docker.yml --config=updatecli.d/rust.yml
|
|
fi
|
|
|
|
cargo_args=$FISH_CHECK_CARGO_ARGS
|
|
target_triple=$FISH_CHECK_TARGET_TRIPLE
|
|
if [ -n "$target_triple" ]; then
|
|
cargo_args="$cargo_args --target=$FISH_CHECK_TARGET_TRIPLE"
|
|
fi
|
|
|
|
cargo() {
|
|
subcmd=$1
|
|
shift
|
|
if [ -n "$FISH_CHECK_RUST_TOOLCHAIN" ]; then
|
|
# shellcheck disable=2086
|
|
command cargo "+$FISH_CHECK_RUST_TOOLCHAIN" "$subcmd" $cargo_args "$@"
|
|
else
|
|
# shellcheck disable=2086
|
|
command cargo "$subcmd" $cargo_args "$@"
|
|
fi
|
|
}
|
|
|
|
cleanup () {
|
|
if [ -n "$gettext_template_dir" ] && [ -e "$gettext_template_dir" ]; then
|
|
rm -r "$gettext_template_dir"
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT INT TERM HUP
|
|
|
|
if $lint; then
|
|
export RUSTFLAGS="--deny=warnings ${RUSTFLAGS}"
|
|
export RUSTDOCFLAGS="--deny=warnings ${RUSTDOCFLAGS}"
|
|
fi
|
|
|
|
workspace_root="$(dirname "$0")/.."
|
|
target_dir=${CARGO_TARGET_DIR:-$workspace_root/target}
|
|
if [ -n "$target_triple" ]; then
|
|
target_dir="$target_dir/$target_triple"
|
|
fi
|
|
# The directory containing the binaries produced by cargo/rustc.
|
|
# Currently, all builds are debug builds.
|
|
build_dir="$target_dir/debug"
|
|
|
|
if [ -n "$FISH_TEST_MAX_CONCURRENCY" ]; then
|
|
export RUST_TEST_THREADS="$FISH_TEST_MAX_CONCURRENCY"
|
|
export CARGO_BUILD_JOBS="$FISH_TEST_MAX_CONCURRENCY"
|
|
fi
|
|
|
|
gettext_template_dir=$(mktemp -d)
|
|
(
|
|
export FISH_GETTEXT_EXTRACTION_DIR="$gettext_template_dir"
|
|
cargo build --workspace --all-targets --features=gettext-extract
|
|
)
|
|
if $lint; then
|
|
if command -v cargo-deny >/dev/null; then
|
|
cargo deny --all-features --locked --exclude-dev check licenses
|
|
fi
|
|
PATH="$build_dir:$PATH" cargo xtask format --all --check
|
|
for features in "" --no-default-features; do
|
|
cargo clippy --workspace --all-targets $features
|
|
done
|
|
fi
|
|
cargo test --no-default-features --workspace --all-targets
|
|
cargo test --doc --workspace
|
|
if $lint; then
|
|
cargo doc --workspace --no-deps
|
|
fi
|
|
FISH_GETTEXT_EXTRACTION_DIR=$gettext_template_dir "$workspace_root/tests/test_driver.py" "$build_dir"
|
|
|
|
exit
|
|
}
|