Showing preview only (1,439K chars total). Download the full file or copy to clipboard to get everything.
Repository: casey/just
Branch: master
Commit: ab70c859006d
Files: 269
Total size: 1.3 MB
Directory structure:
gitextract_22bxt1ib/
├── .editorconfig
├── .gitattributes
├── .github/
│ └── workflows/
│ ├── ci.yaml
│ └── release.yaml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── GRAMMAR.md
├── LICENSE
├── README.md
├── README.中文.md
├── Vagrantfile
├── bin/
│ ├── forbid
│ └── package
├── book/
│ ├── en/
│ │ └── book.toml
│ └── zh/
│ └── book.toml
├── build.rs
├── clippy.toml
├── completions/
│ ├── just.bash
│ ├── just.elvish
│ ├── just.fish
│ ├── just.nu
│ ├── just.powershell
│ └── just.zsh
├── contrib/
│ └── just.sh
├── crates/
│ ├── generate-book/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── main.rs
│ └── update-contributors/
│ ├── Cargo.toml
│ └── src/
│ └── main.rs
├── crates-io-readme.md
├── examples/
│ ├── cross-platform.just
│ ├── keybase.just
│ ├── kitchen-sink.just
│ ├── powershell.just
│ ├── pre-commit.just
│ └── screenshot.just
├── fuzz/
│ ├── Cargo.toml
│ └── fuzz_targets/
│ └── compile.rs
├── justfile
├── rustfmt.toml
├── src/
│ ├── alias.rs
│ ├── alias_style.rs
│ ├── analyzer.rs
│ ├── arg_attribute.rs
│ ├── assignment.rs
│ ├── assignment_resolver.rs
│ ├── ast.rs
│ ├── attribute.rs
│ ├── attribute_set.rs
│ ├── binding.rs
│ ├── color.rs
│ ├── color_display.rs
│ ├── command_color.rs
│ ├── command_ext.rs
│ ├── compilation.rs
│ ├── compile_error.rs
│ ├── compile_error_kind.rs
│ ├── compiler.rs
│ ├── completions.rs
│ ├── condition.rs
│ ├── conditional_operator.rs
│ ├── config.rs
│ ├── config_error.rs
│ ├── const_error.rs
│ ├── constants.rs
│ ├── count.rs
│ ├── delimiter.rs
│ ├── dependency.rs
│ ├── dump_format.rs
│ ├── enclosure.rs
│ ├── error.rs
│ ├── evaluator.rs
│ ├── execution_context.rs
│ ├── executor.rs
│ ├── expression.rs
│ ├── filesystem.rs
│ ├── format_string_part.rs
│ ├── fragment.rs
│ ├── function.rs
│ ├── fuzzing.rs
│ ├── interpreter.rs
│ ├── invocation.rs
│ ├── invocation_parser.rs
│ ├── item.rs
│ ├── justfile.rs
│ ├── keyed.rs
│ ├── keyword.rs
│ ├── lexer.rs
│ ├── lib.rs
│ ├── line.rs
│ ├── list.rs
│ ├── load_dotenv.rs
│ ├── loader.rs
│ ├── main.rs
│ ├── modulepath.rs
│ ├── name.rs
│ ├── namepath.rs
│ ├── node.rs
│ ├── number.rs
│ ├── numerator.rs
│ ├── ordinal.rs
│ ├── output_error.rs
│ ├── parameter.rs
│ ├── parameter_kind.rs
│ ├── parser.rs
│ ├── pattern.rs
│ ├── platform/
│ │ ├── unix.rs
│ │ └── windows.rs
│ ├── platform.rs
│ ├── platform_interface.rs
│ ├── position.rs
│ ├── positional.rs
│ ├── ran.rs
│ ├── range_ext.rs
│ ├── recipe.rs
│ ├── recipe_resolver.rs
│ ├── recipe_signature.rs
│ ├── request.rs
│ ├── run.rs
│ ├── scope.rs
│ ├── search.rs
│ ├── search_config.rs
│ ├── search_error.rs
│ ├── set.rs
│ ├── setting.rs
│ ├── settings.rs
│ ├── shebang.rs
│ ├── show_whitespace.rs
│ ├── sigil.rs
│ ├── signal.rs
│ ├── signal_handler.rs
│ ├── signals.rs
│ ├── source.rs
│ ├── string_delimiter.rs
│ ├── string_kind.rs
│ ├── string_literal.rs
│ ├── string_state.rs
│ ├── subcommand.rs
│ ├── suggestion.rs
│ ├── summary.rs
│ ├── switch.rs
│ ├── table.rs
│ ├── testing.rs
│ ├── thunk.rs
│ ├── token.rs
│ ├── token_kind.rs
│ ├── tree.rs
│ ├── unindent.rs
│ ├── unresolved_dependency.rs
│ ├── unresolved_recipe.rs
│ ├── unstable_feature.rs
│ ├── usage.rs
│ ├── use_color.rs
│ ├── variables.rs
│ ├── verbosity.rs
│ ├── warning.rs
│ └── which.rs
├── tests/
│ ├── alias.rs
│ ├── alias_style.rs
│ ├── allow_duplicate_recipes.rs
│ ├── allow_duplicate_variables.rs
│ ├── allow_missing.rs
│ ├── arg_attribute.rs
│ ├── assert_stdout.rs
│ ├── assert_success.rs
│ ├── assertions.rs
│ ├── assignment.rs
│ ├── attributes.rs
│ ├── backticks.rs
│ ├── byte_order_mark.rs
│ ├── ceiling.rs
│ ├── changelog.rs
│ ├── choose.rs
│ ├── command.rs
│ ├── completions/
│ │ ├── just.bash
│ │ ├── justfile
│ │ └── subdir/
│ │ └── justfile
│ ├── completions.rs
│ ├── conditional.rs
│ ├── confirm.rs
│ ├── constants.rs
│ ├── datetime.rs
│ ├── default.rs
│ ├── delimiters.rs
│ ├── dependencies.rs
│ ├── directories.rs
│ ├── dotenv.rs
│ ├── dump.rs
│ ├── edit.rs
│ ├── equals.rs
│ ├── error_messages.rs
│ ├── evaluate.rs
│ ├── examples.rs
│ ├── explain.rs
│ ├── export.rs
│ ├── fallback.rs
│ ├── format.rs
│ ├── format_string.rs
│ ├── functions.rs
│ ├── global.rs
│ ├── groups.rs
│ ├── guards.rs
│ ├── ignore_comments.rs
│ ├── imports.rs
│ ├── init.rs
│ ├── interpolation.rs
│ ├── invocation_directory.rs
│ ├── json.rs
│ ├── lazy.rs
│ ├── lib.rs
│ ├── line_prefixes.rs
│ ├── list.rs
│ ├── logical_operators.rs
│ ├── man.rs
│ ├── misc.rs
│ ├── modules.rs
│ ├── multibyte_char.rs
│ ├── newline_escape.rs
│ ├── no_aliases.rs
│ ├── no_cd.rs
│ ├── no_dependencies.rs
│ ├── no_exit_message.rs
│ ├── options.rs
│ ├── os_attributes.rs
│ ├── overrides.rs
│ ├── parallel.rs
│ ├── parameters.rs
│ ├── parser.rs
│ ├── positional_arguments.rs
│ ├── private.rs
│ ├── quiet.rs
│ ├── quote.rs
│ ├── readme.rs
│ ├── recursion_limit.rs
│ ├── regexes.rs
│ ├── request.rs
│ ├── run.rs
│ ├── scope.rs
│ ├── script.rs
│ ├── search.rs
│ ├── search_arguments.rs
│ ├── settings.rs
│ ├── shadowing_parameters.rs
│ ├── shebang.rs
│ ├── shell.rs
│ ├── shell_expansion.rs
│ ├── show.rs
│ ├── signals.rs
│ ├── slash_operator.rs
│ ├── string.rs
│ ├── subsequents.rs
│ ├── summary.rs
│ ├── tempdir.rs
│ ├── test.rs
│ ├── timestamps.rs
│ ├── undefined_variables.rs
│ ├── unexport.rs
│ ├── unstable.rs
│ ├── usage.rs
│ ├── which_function.rs
│ ├── windows.rs
│ ├── windows_shell.rs
│ └── working_directory.rs
└── www/
├── .nojekyll
├── CNAME
├── index.css
├── index.html
└── install.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
# Text is UTF-8
charset = utf-8
# Unix-style newlines
end_of_line = lf
# Newline ending every file
insert_final_newline = true
# Soft tabs
indent_style = space
# Two-space indentation
indent_size = 2
# Trim trailing whitespace
trim_trailing_whitespace = true
================================================
FILE: .gitattributes
================================================
* -text
================================================
FILE: .github/workflows/ci.yaml
================================================
name: CI
on:
pull_request:
branches:
- '*'
push:
branches:
- master
defaults:
run:
shell: bash
env:
RUSTFLAGS: --deny warnings
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: Swatinem/rust-cache@v2
- name: Clippy
run: cargo clippy --all --all-targets
- name: Format
run: cargo fmt --all -- --check
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install ripgrep shellcheck
- name: Check for Forbidden Words
run: ./bin/forbid
- name: Check Install Script
run: shellcheck www/install.sh
msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.85.0
- uses: Swatinem/rust-cache@v2
- name: Check
run: cargo check
pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: Swatinem/rust-cache@v2
- name: Install `mdbook`
run: cargo install --locked mdbook@0.4.52
- name: Install `mdbook-linkcheck`
run: cargo install --locked mdbook-linkcheck@0.7.7
- name: Build book
run: |
cargo run --package generate-book
mdbook build book/en
mdbook build book/zh
test:
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v6
- name: Remove Broken WSL bash executable
if: ${{ matrix.os == 'windows-latest' }}
shell: cmd
run: |
takeown /F C:\Windows\System32\bash.exe
icacls C:\Windows\System32\bash.exe /grant administrators:F
del C:\Windows\System32\bash.exe
- uses: Swatinem/rust-cache@v2
- name: Test
run: cargo test --all
- name: Test install.sh
run: |
bash www/install.sh --to /tmp --tag 1.25.0
/tmp/just --version
================================================
FILE: .github/workflows/release.yaml
================================================
name: Release
on:
push:
tags:
- '*'
defaults:
run:
shell: bash
env:
RUSTFLAGS: --deny warnings
jobs:
prerelease:
runs-on: ubuntu-latest
outputs:
value: ${{ steps.prerelease.outputs.value }}
steps:
- name: Prerelease Check
id: prerelease
run: |
if [[ ${{ github.ref_name }} =~ ^[0-9]+[.][0-9]+[.][0-9]+$ ]]; then
echo value=false >> $GITHUB_OUTPUT
else
echo value=true >> $GITHUB_OUTPUT
fi
package:
strategy:
matrix:
target:
- aarch64-apple-darwin
- aarch64-pc-windows-msvc
- aarch64-unknown-linux-musl
- arm-unknown-linux-musleabihf
- armv7-unknown-linux-musleabihf
- loongarch64-unknown-linux-musl
- x86_64-apple-darwin
- x86_64-pc-windows-msvc
- x86_64-unknown-linux-musl
include:
- target: aarch64-apple-darwin
os: macos-latest
target_rustflags: ''
- target: aarch64-pc-windows-msvc
os: windows-latest
target_rustflags: ''
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: '--codegen linker=aarch64-linux-gnu-gcc'
- target: arm-unknown-linux-musleabihf
os: ubuntu-latest
target_rustflags: '--codegen linker=arm-linux-gnueabihf-gcc'
- target: armv7-unknown-linux-musleabihf
os: ubuntu-latest
target_rustflags: '--codegen linker=arm-linux-gnueabihf-gcc'
- target: loongarch64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: '--codegen linker=loongarch64-linux-gnu-gcc-14'
- target: x86_64-apple-darwin
os: macos-latest
target_rustflags: ''
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: ''
runs-on: ${{matrix.os}}
needs:
- prerelease
steps:
- uses: actions/checkout@v6
- name: Install Target Dependencies
run: |
case ${{ matrix.target }} in
aarch64-pc-windows-msvc)
rustup target add aarch64-pc-windows-msvc
;;
aarch64-unknown-linux-musl)
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu libc6-dev-i386
;;
arm-unknown-linux-musleabihf|armv7-unknown-linux-musleabihf)
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf
;;
loongarch64-unknown-linux-musl)
sudo apt-get update
sudo apt-get install gcc-14-loongarch64-linux-gnu
;;
esac
- name: Generate Manpage
run: |
set -euxo pipefail
cargo build
mkdir -p man
./target/debug/just --man > man/just.1
- name: Package
id: package
env:
TARGET: ${{ matrix.target }}
REF: ${{ github.ref }}
OS: ${{ matrix.os }}
TARGET_RUSTFLAGS: ${{ matrix.target_rustflags }}
run: ./bin/package
shell: bash
- name: Publish Archive
uses: softprops/action-gh-release@v2.5.0
if: ${{ startsWith(github.ref, 'refs/tags/') }}
with:
draft: false
files: ${{ steps.package.outputs.archive }}
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish Changelog
uses: softprops/action-gh-release@v2.5.0
if: >-
${{
startsWith(github.ref, 'refs/tags/')
&& matrix.target == 'x86_64-unknown-linux-musl'
}}
with:
draft: false
files: CHANGELOG.md
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
checksum:
runs-on: ubuntu-latest
needs:
- package
- prerelease
steps:
- name: Download Release Archives
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >-
gh release download
--repo casey/just
--pattern '*'
--dir release
${{ github.ref_name }}
- name: Create Checksums
run: |
cd release
shasum -a 256 * > ../SHA256SUMS
- name: Publish Checksums
uses: softprops/action-gh-release@v2.5.0
with:
draft: false
files: SHA256SUMS
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
pages:
runs-on: ubuntu-latest
needs:
- prerelease
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- uses: Swatinem/rust-cache@v2
- name: Install `mdbook`
run: cargo install --locked mdbook@0.4.52
- name: Install `mdbook-linkcheck`
run: cargo install --locked mdbook-linkcheck@0.7.7
- name: Build book
run: |
cargo run --package generate-book
mdbook build book/en
mdbook build book/zh
- name: Deploy Pages
uses: peaceiris/actions-gh-pages@v4
if: ${{ needs.prerelease.outputs.value == 'false' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: www
================================================
FILE: .gitignore
================================================
.DS_Store
.idea
/.vagrant
/.vscode
/README.html
/book/en/build
/book/en/src
/book/zh/build
/book/zh/src
/fuzz/artifacts
/fuzz/corpus
/fuzz/target
/man
/target
/test-utilities/Cargo.lock
/test-utilities/target
/tmp
================================================
FILE: CHANGELOG.md
================================================
Changelog
=========
[1.47.1](https://github.com/casey/just/releases/tag/1.47.1) - 2026-03-16
------------------------------------------------------------------------
### Fixed
- Block on running parallel dependencies ([#3139](https://github.com/casey/just/pull/3139) by [casey](https://github.com/casey))
- Fix setting-exported assignment visibility in child modules ([#3128](https://github.com/casey/just/pull/3128) by [casey](https://github.com/casey))
### Added
- Add `eager` keyword to force evaluation of unused assignments ([#3131](https://github.com/casey/just/pull/3131) by [casey](https://github.com/casey))
### Changed
- Only evaluate used variables in --evaluate and --command ([#3130](https://github.com/casey/just/pull/3130) by [casey](https://github.com/casey))
### Misc
- Make eager assignments unstable ([#3140](https://github.com/casey/just/pull/3140) by [casey](https://github.com/casey))
- Include path to .env file in error messages ([#3135](https://github.com/casey/just/pull/3135) by [casey](https://github.com/casey))
- Consolidate override checking ([#3127](https://github.com/casey/just/pull/3127) by [casey](https://github.com/casey))
- Update readme version references ([#3126](https://github.com/casey/just/pull/3126) by [casey](https://github.com/casey))
[1.47.0](https://github.com/casey/just/releases/tag/1.47.0) - 2026-03-14
------------------------------------------------------------------------
### Added
- Add lazy evaluation setting ([#3083](https://github.com/casey/just/pull/3083) by [casey](https://github.com/casey))
- Add guard sigil `?` ([#2547](https://github.com/casey/just/pull/2547) by [casey](https://github.com/casey))
- Add `--group` flag to filter `--list` output by group ([#3117](https://github.com/casey/just/pull/3117) by [terror](https://github.com/terror))
- Add attributes for DragonFly BSD, FreeBSD, and NetBSD ([#3115](https://github.com/casey/just/pull/3115) by [jakewilliami](https://github.com/jakewilliami))
- Add `[env(NAME, VALUE)` recipe attribute ([#2957](https://github.com/casey/just/pull/2957) by [neunenak](https://github.com/neunenak))
### Changed
- Make `--timestamp` print timestamps unconditionally ([#3114](https://github.com/casey/just/pull/3114) by [casey](https://github.com/casey))
- Print `--timestamps` with script recipes ([#3050](https://github.com/casey/just/pull/3050) by [casey](https://github.com/casey))
- `[private]` modules are excluded from `--list` output ([#2889](https://github.com/casey/just/pull/2889) by [Scott-Guest](https://github.com/Scott-Guest))
### Misc
- Fix readme typo ([#3122](https://github.com/casey/just/pull/3122) by [Rohan5commit](https://github.com/Rohan5commit))
- Move choose and run into match statement ([#3120](https://github.com/casey/just/pull/3120) by [casey](https://github.com/casey))
- Add uv install instructions to readme ([#3062](https://github.com/casey/just/pull/3062) by [npikall](https://github.com/npikall))
- Suppress error when --choose is cancelled by user ([#3098](https://github.com/casey/just/pull/3098) by [cobyfrombrooklyn-bot](https://github.com/cobyfrombrooklyn-bot))
- Test formatting justfile with undefined variable succeeds ([#3110](https://github.com/casey/just/pull/3110) by [casey](https://github.com/casey))
- Format without compiling ([#3103](https://github.com/casey/just/pull/3103) by [terror](https://github.com/terror))
- Fix Gentoo installation instructions ([#3085](https://github.com/casey/just/pull/3085) by [DarthGandalf](https://github.com/DarthGandalf))
- Deny unreachable pub ([#3080](https://github.com/casey/just/pull/3080) by [casey](https://github.com/casey))
- Fix readme typo ([#3079](https://github.com/casey/just/pull/3079) by [pvinis](https://github.com/pvinis))
- Include blank chapters in book ([#3076](https://github.com/casey/just/pull/3076) by [casey](https://github.com/casey))
- Clean up build script ([#3078](https://github.com/casey/just/pull/3078) by [casey](https://github.com/casey))
- Increase stack size on Windows ([#3077](https://github.com/casey/just/pull/3077) by [casey](https://github.com/casey))
- Fix readme typo ([#3066](https://github.com/casey/just/pull/3066) by [kenden](https://github.com/kenden))
- Remove dependency on executable-path ([#3058](https://github.com/casey/just/pull/3058) by [casey](https://github.com/casey))
- Fix typos ([#3056](https://github.com/casey/just/pull/3056) by [galenseilis](https://github.com/galenseilis))
- Avoid conditional compilation in integration tests ([#3055](https://github.com/casey/just/pull/3055) by [casey](https://github.com/casey))
- Assert exit status last in `Test` builder ([#3054](https://github.com/casey/just/pull/3054) by [casey](https://github.com/casey))
- Remove makedeb/MPR installation instructions ([#3053](https://github.com/casey/just/pull/3053) by [Chengings](https://github.com/Chengings))
- Handle errors when checking for files ([#3051](https://github.com/casey/just/pull/3051) by [casey](https://github.com/casey))
[1.46.0](https://github.com/casey/just/releases/tag/1.46.0) - 2026-01-01
------------------------------------------------------------------------
### Fixed
- Don't leak signal handler pipe into child processes ([#3035](https://github.com/casey/just/pull/3035) by [rjmac](https://github.com/rjmac))
### Added
- Allow `long` to default to to parameter name ([#3041](https://github.com/casey/just/pull/3041) by [casey](https://github.com/casey))
- Allow const expressions in all settings ([#3037](https://github.com/casey/just/pull/3037) by [casey](https://github.com/casey))
- Allow const expressions in `working-directory` ([#3033](https://github.com/casey/just/pull/3033) by [casey](https://github.com/casey))
- Add --usage subcommand and argument help strings ([#3031](https://github.com/casey/just/pull/3031) by [casey](https://github.com/casey))
- Add flags without values ([#3029](https://github.com/casey/just/pull/3029) by [casey](https://github.com/casey))
- Allow passing arguments as short `-x` options ([#3028](https://github.com/casey/just/pull/3028) by [casey](https://github.com/casey))
- Allow recipes to take `--long` options ([#3026](https://github.com/casey/just/pull/3026) by [casey](https://github.com/casey))
### Misc
- Add original token to string literal ([#3042](https://github.com/casey/just/pull/3042) by [casey](https://github.com/casey))
- Remove string literal lifetime ([#3036](https://github.com/casey/just/pull/3036) by [casey](https://github.com/casey))
- Move overrides into config ([#3032](https://github.com/casey/just/pull/3032) by [casey](https://github.com/casey))
- Test that options are passed as positional arguments ([#3030](https://github.com/casey/just/pull/3030) by [casey](https://github.com/casey))
- Group arguments by parameter ([#3025](https://github.com/casey/just/pull/3025) by [casey](https://github.com/casey))
- Add OpenBSD package to readme ([#2900](https://github.com/casey/just/pull/2900) by [vext01](https://github.com/vext01))
- Re-enable mdbook-linkcheck ([#3011](https://github.com/casey/just/pull/3011) by [casey](https://github.com/casey))
- Disable dependabot ([#3010](https://github.com/casey/just/pull/3010) by [casey](https://github.com/casey))
- Fix pre-release check in pages deploy job ([#3009](https://github.com/casey/just/pull/3009) by [casey](https://github.com/casey))
[1.45.0](https://github.com/casey/just/releases/tag/1.45.0) - 2025-12-10
------------------------------------------------------------------------
### Added
- Allow requiring recipe arguments to match regular expression patterns ([#3000](https://github.com/casey/just/pull/3000) by [casey](https://github.com/casey))
### Fixed
- Allow shell-expanded strings in attributes ([#3007](https://github.com/casey/just/pull/3007) by [casey](https://github.com/casey))
- Fix arg pattern anchoring ([#3002](https://github.com/casey/just/pull/3002) by [casey](https://github.com/casey))
### Misc
- Use non-capturing group in arg pattern regex ([#3006](https://github.com/casey/just/pull/3006) by [casey](https://github.com/casey))
- Remove redundant type annotation ([#3004](https://github.com/casey/just/pull/3004) by [casey](https://github.com/casey))
[1.44.1](https://github.com/casey/just/releases/tag/1.44.1) - 2025-12-09
------------------------------------------------------------------------
### Fixed
- Properly close format string delimiter ([#2997](https://github.com/casey/just/pull/2997) by [casey](https://github.com/casey))
[1.44.0](https://github.com/casey/just/releases/tag/1.44.0) - 2025-12-06
------------------------------------------------------------------------
### Added
- Add f'{format}' strings ([#2985](https://github.com/casey/just/pull/2985) by [casey](https://github.com/casey))
- Use double braces `{{…}}` for format strings ([#2993](https://github.com/casey/just/pull/2993) by [casey](https://github.com/casey))
- Stabilize `[script]` attribute ([#2988](https://github.com/casey/just/pull/2988) by [casey](https://github.com/casey))
### Changed
- Allow newlines in interpolations and `}` to abut interpolation `}}` ([#2992](https://github.com/casey/just/pull/2992) by [casey](https://github.com/casey))
### Misc
- Test format strings with conditionals ([#2991](https://github.com/casey/just/pull/2991) by [casey](https://github.com/casey))
- Move StringState into module ([#2989](https://github.com/casey/just/pull/2989) by [casey](https://github.com/casey))
- Test undefined variable in format string error ([#2987](https://github.com/casey/just/pull/2987) by [casey](https://github.com/casey))
- Update `softprops/action-gh-release` to 2.5.0 ([#2979](https://github.com/casey/just/pull/2979) by [app/dependabot](https://github.com/app/dependabot))
- Link to `just-lsp` in readme ([#2846](https://github.com/casey/just/pull/2846) by [terror](https://github.com/terror))
- Fix `just --list` submodule example in readme ([#2973](https://github.com/casey/just/pull/2973) by [neodejack](https://github.com/neodejack))
- Update `actions/checkout` ([#2969](https://github.com/casey/just/pull/2969) by [app/dependabot](https://github.com/app/dependabot))
- Disable mdbook-linkcheck ([#2970](https://github.com/casey/just/pull/2970) by [casey](https://github.com/casey))
[1.43.1](https://github.com/casey/just/releases/tag/1.43.1) - 2025-11-12
------------------------------------------------------------------------
### Fixed
- Only initialize signal handler once ([#2953](https://github.com/casey/just/pull/2953) by [casey](https://github.com/casey))
- Preserve module docs when formatting ([#2931](https://github.com/casey/just/pull/2931) by [casey](https://github.com/casey))
- Preserve module groups when formatting ([#2930](https://github.com/casey/just/pull/2930) by [casey](https://github.com/casey))
- Don't suggest private recipes and aliases ([#2916](https://github.com/casey/just/pull/2916) by [casey](https://github.com/casey))
### Misc
- Update softprops/action-gh-release to 2.4.2 ([#2948](https://github.com/casey/just/pull/2948) by [app/dependabot](https://github.com/app/dependabot))
- Fix `env()` usage in readme ([#2936](https://github.com/casey/just/pull/2936) by [laniakea64](https://github.com/laniakea64))
- Use a case statement to install target dependencies ([#2929](https://github.com/casey/just/pull/2929) by [casey](https://github.com/casey))
- Build loongarch64 release binaries ([#2886](https://github.com/casey/just/pull/2886) by [SkyBird233](https://github.com/SkyBird233))
- Bump softprops/action-gh-release to 2.4.1 ([#2919](https://github.com/casey/just/pull/2919) by [app/dependabot](https://github.com/app/dependabot))
- Update softprops/action-gh-release to 2.3.4 ([#2910](https://github.com/casey/just/pull/2910) by [app/dependabot](https://github.com/app/dependabot))
[1.43.0](https://github.com/casey/just/releases/tag/1.43.0) - 2025-09-27
------------------------------------------------------------------------
### Added
- Add `[default]` attribute ([#2878](https://github.com/casey/just/pull/2878) by [casey](https://github.com/casey))
- Do not ascend above `--ceiling` when looking for justfile ([#2870](https://github.com/casey/just/pull/2870) by [casey](https://github.com/casey))
### Misc
- Don't generate completions at runtime ([#2896](https://github.com/casey/just/pull/2896) by [casey](https://github.com/casey))
- Update `softprops/action-gh-release` to 2.3.3 ([#2879](https://github.com/casey/just/pull/2879) by [app/dependabot](https://github.com/app/dependabot))
- Add submodule alias and dependency targets to grammar ([#2877](https://github.com/casey/just/pull/2877) by [casey](https://github.com/casey))
- Bump `actions/checkout` to v5 ([#2864](https://github.com/casey/just/pull/2864) by [app/dependabot](https://github.com/app/dependabot))
- Fix Windows `PATH_SEP` value in readme ([#2859](https://github.com/casey/just/pull/2859) by [casey](https://github.com/casey))
- Fix lints for Rust 1.89 ([#2860](https://github.com/casey/just/pull/2860) by [casey](https://github.com/casey))
- Note that Debian 13 has been released ([#2856](https://github.com/casey/just/pull/2856) by [sblondon](https://github.com/sblondon))
- Mention `just-mcp` in readme ([#2843](https://github.com/casey/just/pull/2843) by [casey](https://github.com/casey))
- Expand Windows instructions in readme ([#2842](https://github.com/casey/just/pull/2842) by [casey](https://github.com/casey))
- Note `[parallel]` attribute in parallelism section ([#2837](https://github.com/casey/just/pull/2837) by [casey](https://github.com/casey))
[1.42.4](https://github.com/casey/just/releases/tag/1.42.4) - 2025-07-24
------------------------------------------------------------------------
### Fixed
- Run imported recipes in correct scope ([#2835](https://github.com/casey/just/pull/2835) by [casey](https://github.com/casey))
- Fix alias doc comment ([#2833](https://github.com/casey/just/pull/2833) by [casey](https://github.com/casey))
[1.42.3](https://github.com/casey/just/releases/tag/1.42.3) - 2025-07-18
------------------------------------------------------------------------
### Fixed
- Run recipes from submodules in correct directory ([#2829](https://github.com/casey/just/pull/2829) by [eisbaw](https://github.com/eisbaw))
[1.42.2](https://github.com/casey/just/releases/tag/1.42.2) - 2025-07-15
------------------------------------------------------------------------
### Fixed
- Fix scope lookup for nested submodules ([#2820](https://github.com/casey/just/pull/2820) by [casey](https://github.com/casey))
[1.42.1](https://github.com/casey/just/releases/tag/1.42.1) - 2025-07-14
------------------------------------------------------------------------
### Fixed
- Export variables to submodules ([#2816](https://github.com/casey/just/pull/2816) by [casey](https://github.com/casey))
- Only override root-justfile variable assignments ([#2815](https://github.com/casey/just/pull/2815) by [casey](https://github.com/casey))
[1.42.0](https://github.com/casey/just/releases/tag/1.42.0) - 2025-07-13
------------------------------------------------------------------------
### Fixed
- Use correct scope when running recipes in submodules ([#2810](https://github.com/casey/just/pull/2810) by [casey](https://github.com/casey))
### Added
- Add `[parallel]` attribute to run dependencies in parallel ([#2803](https://github.com/casey/just/pull/2803) by [casey](https://github.com/casey))
- Allow configuring `cygpath` with `--cygpath` and `$JUST_CYGPATH` ([#2804](https://github.com/casey/just/pull/2804) by [hyrious](https://github.com/hyrious))
- Use GitHub token in `install.sh` if available ([#2676](https://github.com/casey/just/pull/2676) by [jpeeler](https://github.com/jpeeler))
- Add `[metadata]` recipe attribute ([#2794](https://github.com/casey/just/pull/2794) by [wiktor-k](https://github.com/wiktor-k))
- Allow depending on recipes in submodules ([#2672](https://github.com/casey/just/pull/2672) by [corvusrabus](https://github.com/corvusrabus))
### Changed
- Allow completing multiple recipes in bash ([#2764](https://github.com/casey/just/pull/2764) by [antirais](https://github.com/antirais))
- Make global justfile filename case-insensitive ([#2802](https://github.com/casey/just/pull/2802) by [casey](https://github.com/casey))
[1.41.0](https://github.com/casey/just/releases/tag/1.41.0) - 2025-07-01
------------------------------------------------------------------------
### Changed
- Treat SIGINFO as non-fatal ([#2788](https://github.com/casey/just/pull/2788) by [casey](https://github.com/casey))
- Improve signal handling ([#2488](https://github.com/casey/just/pull/2488) by [casey](https://github.com/casey))
### Added
- Add `dotenv-override` setting ([#2785](https://github.com/casey/just/pull/2785) by [Lun4m](https://github.com/Lun4m))
- Add `PATH_SEP` and `PATH_VAR_SEP` constants ([#2679](https://github.com/casey/just/pull/2679) by [casey](https://github.com/casey))
- Add `--tempdir` command-line option ([#2798](https://github.com/casey/just/pull/2798) by [casey](https://github.com/casey))
### Fixed
- Pin `clap_complete` to last compatible version ([#2800](https://github.com/casey/just/pull/2800) by [casey](https://github.com/casey))
### Misc
- Add `arkade` to readme ([#2700](https://github.com/casey/just/pull/2700) by [rgee0](https://github.com/rgee0))
- Link to pipx instead of pypi in readme ([#2799](https://github.com/casey/just/pull/2799) by [casey](https://github.com/casey))
- Add reasons to `#[ignore]` attributes ([#2797](https://github.com/casey/just/pull/2797) by [casey](https://github.com/casey))
- Mention that command-line environment variables are inherited ([#2783](https://github.com/casey/just/pull/2783) by [philipmgrant](https://github.com/philipmgrant))
- Fix attribute grammar and update documentation ([#2790](https://github.com/casey/just/pull/2790) by [casey](https://github.com/casey))
- Tweak prose in groups section of readme ([#2767](https://github.com/casey/just/pull/2767) by [offby1](https://github.com/offby1))
- Update `extractions/setup-just` version in readme ([#2735](https://github.com/casey/just/pull/2735) by [esadek](https://github.com/esadek))
- Remove `return` in `Recipe::confirm` ([#2789](https://github.com/casey/just/pull/2789) by [casey](https://github.com/casey))
- Add `mise` to alternatives in readem ([#2758](https://github.com/casey/just/pull/2758) by [koppor](https://github.com/koppor))
- Update `softprops/action-gh-release` ([#2781](https://github.com/casey/just/pull/2781) by [app/dependabot](https://github.com/app/dependabot))
- Use `default` as name of `--init` justfile default recipe ([#2777](https://github.com/casey/just/pull/2777) by [casey](https://github.com/casey))
- Add `just.systems` link to `--init` justfile ([#2776](https://github.com/casey/just/pull/2776) by [casey](https://github.com/casey))
- Fix `kitchen-sink.just` comment ([#2738](https://github.com/casey/just/pull/2738) by [azarmadr](https://github.com/azarmadr))
- Update `softprops/action-gh-release` ([#2716](https://github.com/casey/just/pull/2716) by [app/dependabot](https://github.com/app/dependabot))
- Fix clippy lints ([#2768](https://github.com/casey/just/pull/2768) by [casey](https://github.com/casey))
- Add back-to-the-top link to readme ([#2707](https://github.com/casey/just/pull/2707) by [bravesasha](https://github.com/bravesasha))
- Placate clippy lints for 1.86 ([#2708](https://github.com/casey/just/pull/2708) by [casey](https://github.com/casey))
- Use `-S` in `uv` example ([#2696](https://github.com/casey/just/pull/2696) by [rmoorman](https://github.com/rmoorman))
- Handle `--request` without parsing justfile ([#2683](https://github.com/casey/just/pull/2683) by [casey](https://github.com/casey))
- Bump MSRV to 1.77 and enforce on CI ([#2674](https://github.com/casey/just/pull/2674) by [casey](https://github.com/casey))
[1.40.0](https://github.com/casey/just/releases/tag/1.40.0) - 2025-03-09
------------------------------------------------------------------------
### Added
- Allow the target of aliases to be recipes in submodules ([#2632](https://github.com/casey/just/pull/2632) by [corvusrabus](https://github.com/corvusrabus))
- Make `--list-submodules` require `--list` ([#2622](https://github.com/casey/just/pull/2622) by [casey](https://github.com/casey))
### Fixed
- Star parameters may follow default parameters ([#2660](https://github.com/casey/just/pull/2660) by [casey](https://github.com/casey))
### Misc
- Remove `test!` macro from readme ([#2648](https://github.com/casey/just/pull/2648) by [casey](https://github.com/casey))
- Sort enum variant, struct member, and trait members alphabetically ([#2646](https://github.com/casey/just/pull/2646) by [casey](https://github.com/casey))
- Add Zed extension to readme ([#2640](https://github.com/casey/just/pull/2640) by [sectore](https://github.com/sectore))
- Refactor error checking in choose function ([#2643](https://github.com/casey/just/pull/2643) by [casey](https://github.com/casey))
- Use `Test` struct instead of `test!` macro ([#2642](https://github.com/casey/just/pull/2642) by [casey](https://github.com/casey))
- Include unicode codepoint in unknown start of token error ([#2637](https://github.com/casey/just/pull/2637) by [CramBL](https://github.com/CramBL))
- Ignore broken pipe error from chooser ([#2639](https://github.com/casey/just/pull/2639) by [casey](https://github.com/casey))
- Guarantee that `Namepath`s are non-empty ([#2638](https://github.com/casey/just/pull/2638) by [casey](https://github.com/casey))
- Remove unnecessary binding modifiers ([#2636](https://github.com/casey/just/pull/2636) by [casey](https://github.com/casey))
- Document Vim and Neovim built-in syntax highlighting ([#2619](https://github.com/casey/just/pull/2619) by [laniakea64](https://github.com/laniakea64))
- Remove rust:just Repology badge ([#2614](https://github.com/casey/just/pull/2614) by [laniakea64](https://github.com/laniakea64))
- Clarify --list argument ([#2609](https://github.com/casey/just/pull/2609) by [casey](https://github.com/casey))
- Expand Windows path documentation ([#2602](https://github.com/casey/just/pull/2602) by [casey](https://github.com/casey))
- Fix readme typos ([#2596](https://github.com/casey/just/pull/2596) by [CramBL](https://github.com/CramBL))
[1.39.0](https://github.com/casey/just/releases/tag/1.39.0) - 2025-01-22
------------------------------------------------------------------------
### Added
- Add `which()` and `require()` for finding executables ([#2440](https://github.com/casey/just/pull/2440) by [0xzhzh](https://github.com/0xzhzh))
- Add `no-exit-message` Setting and `[exit-message]` attribute ([#2568](https://github.com/casey/just/pull/2568) by [ArchieAtkinson](https://github.com/ArchieAtkinson))
- Configure alias style in `--list` with `--alias-style` ([#2342](https://github.com/casey/just/pull/2342) by [marcaddeo](https://github.com/marcaddeo))
- Add regex mismatch conditional operator ([#2490](https://github.com/casey/just/pull/2490) by [laniakea64](https://github.com/laniakea64))
- Add `read_to_string(path)` function ([#2507](https://github.com/casey/just/pull/2507) by [begoon](https://github.com/begoon))
### Changed
- Rename `read_to_string()` to `read()` ([#2518](https://github.com/casey/just/pull/2518) by [casey](https://github.com/casey))
### Fixed
- Keep `[private]` attribute when formatting assignments ([#2592](https://github.com/casey/just/pull/2592) by [casey](https://github.com/casey))
- Format `if … else if …` without superfluous braces ([#2573](https://github.com/casey/just/pull/2573) by [casey](https://github.com/casey))
- Fix error when lexing `!` at end-of-file ([#2520](https://github.com/casey/just/pull/2520) by [casey](https://github.com/casey))
- Handle recipes in submodules in fish completion script ([#2514](https://github.com/casey/just/pull/2514) by [senekor](https://github.com/senekor))
### Misc
- Add tests for `require()` ([#2594](https://github.com/casey/just/pull/2594) by [casey](https://github.com/casey))
- Evaluate concatenations and joins from left to right ([#2593](https://github.com/casey/just/pull/2593) by [casey](https://github.com/casey))
- Disable links to empty chapters in book ([#2589](https://github.com/casey/just/pull/2589) by [casey](https://github.com/casey))
- Link to CI workflow in readme ([#2586](https://github.com/casey/just/pull/2586) by [bravesasha](https://github.com/bravesasha))
- Clarify that `trim_*_match` functions take subtrings ([#2574](https://github.com/casey/just/pull/2574) by [xavdid](https://github.com/xavdid))
- Update `softprops/action-gh-release` from 2.2.0 to 2.2.1 ([#2570](https://github.com/casey/just/pull/2570) by [app/dependabot](https://github.com/app/dependabot))
- Check attributes in parser instead of analyzer ([#2560](https://github.com/casey/just/pull/2560) by [casey](https://github.com/casey))
- Ignore I/O errors when writing changelog to stdout ([#2558](https://github.com/casey/just/pull/2558) by [casey](https://github.com/casey))
- Add `quiet` setting and fix typos in readme ([#2549](https://github.com/casey/just/pull/2549) by [unennhexium](https://github.com/unennhexium))
- Update readme to use `env()` instead of `env_var*()` ([#2546](https://github.com/casey/just/pull/2546) by [laniakea64](https://github.com/laniakea64))
- Document using `||` to provide default for empty environment variable ([#2545](https://github.com/casey/just/pull/2545) by [casey](https://github.com/casey))
- Refactor `Line` predicates ([#2543](https://github.com/casey/just/pull/2543) by [casey](https://github.com/casey))
- Fix typos in README.md ([#2542](https://github.com/casey/just/pull/2542) by [laniakea64](https://github.com/laniakea64))
- Add full example getting XDG user directory to readme ([#2536](https://github.com/casey/just/pull/2536) by [laniakea64](https://github.com/laniakea64))
- Document weird behavior of duplicate definitions in imports ([#2541](https://github.com/casey/just/pull/2541) by [casey](https://github.com/casey))
- Update readme to reflect actual behavior of user directory functions ([#2535](https://github.com/casey/just/pull/2535) by [casey](https://github.com/casey))
- Update softprops/action-gh-release to 2.2.0 ([#2530](https://github.com/casey/just/pull/2530) by [app/dependabot](https://github.com/app/dependabot))
- Document running python recipes with `uv` ([#2526](https://github.com/casey/just/pull/2526) by [casey](https://github.com/casey))
- Sort functions alphabetically ([#2525](https://github.com/casey/just/pull/2525) by [casey](https://github.com/casey))
- Fix truncated bang operator error message ([#2522](https://github.com/casey/just/pull/2522) by [casey](https://github.com/casey))
- Include source path in dump JSON ([#2466](https://github.com/casey/just/pull/2466) by [psibi](https://github.com/psibi))
- Add attribute set ([#2419](https://github.com/casey/just/pull/2419) by [neunenak](https://github.com/neunenak))
[1.38.0](https://github.com/casey/just/releases/tag/1.38.0) - 2024-12-10
------------------------------------------------------------------------
### Added
- Add `[openbsd]` recipe attribute ([#2497](https://github.com/casey/just/pull/2497) by [vtamara](https://github.com/vtamara))
- Add `[working-directory]` recipe attribute ([#2438](https://github.com/casey/just/pull/2438) by [bcheidemann](https://github.com/bcheidemann))
- Add `--allow-missing` to ignore missing recipe and submodule errors ([#2460](https://github.com/casey/just/pull/2460) by [R3ZV](https://github.com/R3ZV))
### Changed
- Add snap package back to readme ([#2506](https://github.com/casey/just/pull/2506) by [casey](https://github.com/casey))
- Forbid duplicate non-repeatable attributes ([#2483](https://github.com/casey/just/pull/2483) by [casey](https://github.com/casey))
### Misc
- Publish docs to GitHub pages on release only ([#2516](https://github.com/casey/just/pull/2516) by [casey](https://github.com/casey))
- Note lack of support for string interpolation ([#2515](https://github.com/casey/just/pull/2515) by [casey](https://github.com/casey))
- Embolden help text errors ([#2502](https://github.com/casey/just/pull/2502) by [casey](https://github.com/casey))
- Style help text ([#2501](https://github.com/casey/just/pull/2501) by [casey](https://github.com/casey))
- Add `--request` subcommand for testing ([#2498](https://github.com/casey/just/pull/2498) by [casey](https://github.com/casey))
- [bin/forbid] Improve error message if ripgrep is missing ([#2493](https://github.com/casey/just/pull/2493) by [casey](https://github.com/casey))
- Fix Rust 1.83 clippy warnings ([#2487](https://github.com/casey/just/pull/2487) by [casey](https://github.com/casey))
- Refactor JSON tests ([#2484](https://github.com/casey/just/pull/2484) by [casey](https://github.com/casey))
- Get `Config` from `ExecutionContext` instead of passing separately ([#2481](https://github.com/casey/just/pull/2481) by [casey](https://github.com/casey))
- Don't write justfiles unchanged by formatting ([#2479](https://github.com/casey/just/pull/2479) by [casey](https://github.com/casey))
[1.37.0](https://github.com/casey/just/releases/tag/1.37.0) - 2024-11-20
------------------------------------------------------------------------
### Added
- Add `style()` function ([#2462](https://github.com/casey/just/pull/2462) by [casey](https://github.com/casey))
- Terminal escape sequence constants ([#2461](https://github.com/casey/just/pull/2461) by [casey](https://github.com/casey))
- Add `&&` and `||` operators ([#2444](https://github.com/casey/just/pull/2444) by [casey](https://github.com/casey))
### Changed
- Make recipe doc attribute override comment ([#2470](https://github.com/casey/just/pull/2470) by [casey](https://github.com/casey))
- Don't export constants ([#2449](https://github.com/casey/just/pull/2449) by [casey](https://github.com/casey))
- Allow duplicate imports ([#2437](https://github.com/casey/just/pull/2437) by [casey](https://github.com/casey))
- Publish single SHA256SUM file with releases ([#2417](https://github.com/casey/just/pull/2417) by [casey](https://github.com/casey))
- Mark recipes with private attribute as private in JSON dump ([#2415](https://github.com/casey/just/pull/2415) by [casey](https://github.com/casey))
- Forbid invalid attributes on assignments ([#2412](https://github.com/casey/just/pull/2412) by [casey](https://github.com/casey))
### Misc
- Update `softprops/action-gh-release` ([#2471](https://github.com/casey/just/pull/2471) by [app/dependabot](https://github.com/app/dependabot))
- Add `-g` to `rust-just` install instructions ([#2459](https://github.com/casey/just/pull/2459) by [gnpaone](https://github.com/gnpaone))
- Change doc backtick color to cyan ([#2469](https://github.com/casey/just/pull/2469) by [casey](https://github.com/casey))
- Note that `set shell` is not used for `[script]` recipes ([#2468](https://github.com/casey/just/pull/2468) by [iloveitaly](https://github.com/iloveitaly))
- Replace `derivative` with `derive-where` ([#2465](https://github.com/casey/just/pull/2465) by [laniakea64](https://github.com/laniakea64))
- Highlight backticks in docs when listing recipes ([#2423](https://github.com/casey/just/pull/2423) by [neunenak](https://github.com/neunenak))
- Update setup-just version in README ([#2456](https://github.com/casey/just/pull/2456) by [Julian](https://github.com/Julian))
- Fix shell function example in readme ([#2454](https://github.com/casey/just/pull/2454) by [casey](https://github.com/casey))
- Update softprops/action-gh-release ([#2450](https://github.com/casey/just/pull/2450) by [app/dependabot](https://github.com/app/dependabot))
- Use `justfile` instead of `mf` on invalid examples in readme ([#2447](https://github.com/casey/just/pull/2447) by [casey](https://github.com/casey))
- Add advice on printing complex strings ([#2446](https://github.com/casey/just/pull/2446) by [casey](https://github.com/casey))
- Document using functions in variable assignments ([#2431](https://github.com/casey/just/pull/2431) by [offby1](https://github.com/offby1))
- Use prettier string comparison in tests ([#2435](https://github.com/casey/just/pull/2435) by [neunenak](https://github.com/neunenak))
- Note `shell(…)` as an alternative to backticks ([#2430](https://github.com/casey/just/pull/2430) by [offby1](https://github.com/offby1))
- Update nix package links ([#2441](https://github.com/casey/just/pull/2441) by [yunusey](https://github.com/yunusey))
- Update README.中文.md ([#2424](https://github.com/casey/just/pull/2424) by [Jannchie](https://github.com/Jannchie))
- Add Recipe::subsequents ([#2428](https://github.com/casey/just/pull/2428) by [casey](https://github.com/casey))
- Add subsequents to grammar ([#2427](https://github.com/casey/just/pull/2427) by [casey](https://github.com/casey))
- Document checking releases hashes ([#2418](https://github.com/casey/just/pull/2418) by [casey](https://github.com/casey))
- Show how to access positional arguments with powershell ([#2405](https://github.com/casey/just/pull/2405) by [casey](https://github.com/casey))
- Use `-CommandWithArgs` instead of `-cwa` ([#2404](https://github.com/casey/just/pull/2404) by [casey](https://github.com/casey))
- Document `-cwa` flag for PowerShell positional arguments ([#2403](https://github.com/casey/just/pull/2403) by [casey](https://github.com/casey))
- Use `unwrap_or` when creating relative path in loader ([#2400](https://github.com/casey/just/pull/2400) by [casey](https://github.com/casey))
[1.36.0](https://github.com/casey/just/releases/tag/1.36.0) - 2024-09-30
------------------------------------------------------------------------
### Changed
- Allow default values to use earlier recipe arguments ([#2382](https://github.com/casey/just/pull/2382) by [casey](https://github.com/casey))
### Added
- Add `--one` flag to forbid multiple recipes from being invoked on the command line ([#2374](https://github.com/casey/just/pull/2374) by [casey](https://github.com/casey))
- Allow including arbitrary characters in strings with `\u{…}` ([#2360](https://github.com/casey/just/pull/2360) by [laniakea64](https://github.com/laniakea64))
- Print recipe doc string when`--explain` flag is passed ([#2319](https://github.com/casey/just/pull/2319) by [neunenak](https://github.com/neunenak))
### Misc
- Use unwrap_or_default() when getting default color and verbosity ([#2397](https://github.com/casey/just/pull/2397) by [casey](https://github.com/casey))
- De-duplicate suggestion methods ([#2392](https://github.com/casey/just/pull/2392) by [neunenak](https://github.com/neunenak))
- Refactor analyzer ([#2378](https://github.com/casey/just/pull/2378) by [neunenak](https://github.com/neunenak))
- Use `console` codeblocks in readme ([#2388](https://github.com/casey/just/pull/2388) by [casey](https://github.com/casey))
- Split packages table by platform ([#2385](https://github.com/casey/just/pull/2385) by [casey](https://github.com/casey))
- Document npm package ([#2384](https://github.com/casey/just/pull/2384) by [casey](https://github.com/casey))
- Add PyPI install instructions ([#2383](https://github.com/casey/just/pull/2383) by [casey](https://github.com/casey))
- Remove alias shadows recipe error ([#2375](https://github.com/casey/just/pull/2375) by [neunenak](https://github.com/neunenak))
- Name instead of number book chapter files ([#2372](https://github.com/casey/just/pull/2372) by [casey](https://github.com/casey))
- Add groups to project justfile ([#2351](https://github.com/casey/just/pull/2351) by [neunenak](https://github.com/neunenak))
- Document `\u{...}` ([#2371](https://github.com/casey/just/pull/2371) by [laniakea64](https://github.com/laniakea64))
- Remove old recipes from project justfile ([#2367](https://github.com/casey/just/pull/2367) by [casey](https://github.com/casey))
- Document `--dotenv-path` in readme ([#2366](https://github.com/casey/just/pull/2366) by [willie](https://github.com/willie))
- Remove ref-type crate ([#2364](https://github.com/casey/just/pull/2364) by [casey](https://github.com/casey))
- Fix type names in redefinition error message ([#2353](https://github.com/casey/just/pull/2353) by [marcaddeo](https://github.com/marcaddeo))
- Use relative in `.sha256sum` files ([#2358](https://github.com/casey/just/pull/2358) by [casey](https://github.com/casey))
- Link to readme in CONTRIBUTING.md ([#2348](https://github.com/casey/just/pull/2348) by [casey](https://github.com/casey))
- Fix clippy lints ([#2347](https://github.com/casey/just/pull/2347) by [casey](https://github.com/casey))
- Simplify `Subcommand::run` ([#2336](https://github.com/casey/just/pull/2336) by [neunenak](https://github.com/neunenak))
- Update module issue link in readme ([#2345](https://github.com/casey/just/pull/2345) by [casey](https://github.com/casey))
- Add blank line between CI workflow jobs ([#2343](https://github.com/casey/just/pull/2343) by [casey](https://github.com/casey))
- Color groups in `--list` output ([#2340](https://github.com/casey/just/pull/2340) by [casey](https://github.com/casey))
- Refactor and document subcommand and search ([#2335](https://github.com/casey/just/pull/2335) by [neunenak](https://github.com/neunenak))
- Document private variables ([#2331](https://github.com/casey/just/pull/2331) by [Jasha10](https://github.com/Jasha10))
[1.35.0](https://github.com/casey/just/releases/tag/1.35.0) - 2024-08-28
------------------------------------------------------------------------
### Changed
- Allow fallback with recipes in submodules ([#2329](https://github.com/casey/just/pull/2329) by [casey](https://github.com/casey))
- Allow `[private]` attribute on assignments ([#2300](https://github.com/casey/just/pull/2300) by [adsnaider](https://github.com/adsnaider))
### Misc
- Generate `.sha256sum` files for release artifacts ([#2323](https://github.com/casey/just/pull/2323) by [twm](https://github.com/twm))
- Clarify that subsequent dependencies run immediately after recipe ([#2326](https://github.com/casey/just/pull/2326) by [casey](https://github.com/casey))
- Fix readme typo ([#2321](https://github.com/casey/just/pull/2321) by [arminius-smh](https://github.com/arminius-smh))
- Remove Config::run ([#2320](https://github.com/casey/just/pull/2320) by [neunenak](https://github.com/neunenak))
- Bump MSRV to 1.74 ([#2306](https://github.com/casey/just/pull/2306) by [casey](https://github.com/casey))
- Remove logging ([#2305](https://github.com/casey/just/pull/2305) by [casey](https://github.com/casey))
- Group commands under dedicated heading in `--help` output ([#2302](https://github.com/casey/just/pull/2302) by [casey](https://github.com/casey))
- Fix readme typo ([#2297](https://github.com/casey/just/pull/2297) by [nyurik](https://github.com/nyurik))
[1.34.0](https://github.com/casey/just/releases/tag/1.34.0) - 2024-08-02
------------------------------------------------------------------------
### Fixed
- Make function paths relative to correct working directory ([#2294](https://github.com/casey/just/pull/2294) by [casey](https://github.com/casey))
### Changed
- Keep multi-line shebangs together ([#2276](https://github.com/casey/just/pull/2276) by [vkstrm](https://github.com/vkstrm))
### Misc
- Document `set working-directory` ([#2288](https://github.com/casey/just/pull/2288) by [nyurik](https://github.com/nyurik))
- Fix readme typos ([#2289](https://github.com/casey/just/pull/2289) by [casey](https://github.com/casey))
[1.33.0](https://github.com/casey/just/releases/tag/1.33.0) - 2024-07-30
------------------------------------------------------------------------
### Fixed
- Use correct backtick and `shell()` expression working directory in submodules ([#2285](https://github.com/casey/just/pull/2285) by [casey](https://github.com/casey))
### Added
- Add `working-directory` setting ([#2283](https://github.com/casey/just/pull/2283) by [nyurik](https://github.com/nyurik))
- Allow `[group]` attribute on submodules ([#2263](https://github.com/casey/just/pull/2263) by [jmwoliver](https://github.com/jmwoliver))
- Allow empty `[script]` attribute and add `set script-interpreter` ([#2264](https://github.com/casey/just/pull/2264) by [casey](https://github.com/casey))
### Misc
- Document which attributes apply to which items ([#2282](https://github.com/casey/just/pull/2282) by [casey](https://github.com/casey))
- Add missing productions ([#2280](https://github.com/casey/just/pull/2280) by [poliorcetics](https://github.com/poliorcetics))
- Fix Rust 1.80.0 warnings ([#2281](https://github.com/casey/just/pull/2281) by [casey](https://github.com/casey))
- Update softprops/action-gh-release ([#2269](https://github.com/casey/just/pull/2269) by [app/dependabot](https://github.com/app/dependabot))
- Remove `(no group)` header before ungrouped recipes ([#2268](https://github.com/casey/just/pull/2268) by [casey](https://github.com/casey))
- Document `script-interpreter` setting ([#2265](https://github.com/casey/just/pull/2265) by [casey](https://github.com/casey))
- `set dotenv-path` does not override `set dotenv-filename` ([#2262](https://github.com/casey/just/pull/2262) by [casey](https://github.com/casey))
[1.32.0](https://github.com/casey/just/releases/tag/1.32.0) - 2024-07-17
------------------------------------------------------------------------
### Added
- Add unstable `[script(…)]` attribute ([#2259](https://github.com/casey/just/pull/2259) by [casey](https://github.com/casey))
- Add `[extension: 'EXT']` attribute to set shebang recipe script file extension ([#2256](https://github.com/casey/just/pull/2256) by [casey](https://github.com/casey))
- Suppress mod doc comment with empty `[doc]` attribute ([#2254](https://github.com/casey/just/pull/2254) by [casey](https://github.com/casey))
- Allow `[doc]` annotation on modules ([#2247](https://github.com/casey/just/pull/2247) by [neunenak](https://github.com/neunenak))
[1.31.0](https://github.com/casey/just/releases/tag/1.31.0) - 2024-07-14
------------------------------------------------------------------------
### Stabilized
- Stabilize modules ([#2250](https://github.com/casey/just/pull/2250) by [casey](https://github.com/casey))
### Added
- Allow `mod` path to be directory containing module source ([#2238](https://github.com/casey/just/pull/2238) by [casey](https://github.com/casey))
- Allow enabling unstable features with `set unstable` ([#2237](https://github.com/casey/just/pull/2237) by [casey](https://github.com/casey))
- Allow abbreviating functions ending in `_directory` to `_dir` ([#2235](https://github.com/casey/just/pull/2235) by [casey](https://github.com/casey))
### Fixed
- Lexiclean search directory so `..` does not check the current directory ([#2236](https://github.com/casey/just/pull/2236) by [casey](https://github.com/casey))
### Misc
- Print space before submodules in `--list` with groups ([#2244](https://github.com/casey/just/pull/2244) by [casey](https://github.com/casey))
[1.30.1](https://github.com/casey/just/releases/tag/1.30.1) - 2024-07-06
------------------------------------------------------------------------
### Fixed
- Fix function argument count mismatch error message ([#2231](https://github.com/casey/just/pull/2231) by [casey](https://github.com/casey))
[1.30.0](https://github.com/casey/just/releases/tag/1.30.0) - 2024-07-06
------------------------------------------------------------------------
### Fixed
- Allow comments after `mod` statements ([#2201](https://github.com/casey/just/pull/2201) by [casey](https://github.com/casey))
### Changed
- Allow unstable features with `--summary` ([#2210](https://github.com/casey/just/pull/2210) by [casey](https://github.com/casey))
- Don't analyze comments when `ignore-comments` is set ([#2180](https://github.com/casey/just/pull/2180) by [casey](https://github.com/casey))
- List recipes by group in group justfile order with `just --list --unsorted` ([#2164](https://github.com/casey/just/pull/2164) by [casey](https://github.com/casey))
- List groups in source order with `just --groups --unsorted` ([#2160](https://github.com/casey/just/pull/2160) by [casey](https://github.com/casey))
### Added
- Avoid `install` and add 32-bit arm targets to `install.sh` ([#2214](https://github.com/casey/just/pull/2214) by [CramBL](https://github.com/CramBL))
- Give modules doc comments for `--list` ([#2199](https://github.com/casey/just/pull/2199) by [Spatenheinz](https://github.com/Spatenheinz))
- Add `datetime()` and `datetime_utc()` functions ([#2167](https://github.com/casey/just/pull/2167) by [casey](https://github.com/casey))
- Allow setting more command-line options with environment variables ([#2161](https://github.com/casey/just/pull/2161) by [casey](https://github.com/casey))
### Library
- Don't exit process in `run()` on argument parse error ([#2176](https://github.com/casey/just/pull/2176) by [casey](https://github.com/casey))
- Allow passing command-line arguments into `run()` ([#2173](https://github.com/casey/just/pull/2173) by [casey](https://github.com/casey))
- Ignore env_logger initialization errors ([#2170](https://github.com/casey/just/pull/2170) by [EnigmaCurry](https://github.com/EnigmaCurry))
### Misc
- Tweak readme ([#2227](https://github.com/casey/just/pull/2227) by [casey](https://github.com/casey))
- Add development guide to readme ([#2226](https://github.com/casey/just/pull/2226) by [casey](https://github.com/casey))
- Add shell-expanded string syntax to grammar ([#2223](https://github.com/casey/just/pull/2223) by [casey](https://github.com/casey))
- Add recipe for testing bash completion script ([#2221](https://github.com/casey/just/pull/2221) by [casey](https://github.com/casey))
- Fix use of `justfile_directory()` in readme ([#2219](https://github.com/casey/just/pull/2219) by [casey](https://github.com/casey))
- Use default values for `--list-heading` and `--list-prefix` ([#2213](https://github.com/casey/just/pull/2213) by [casey](https://github.com/casey))
- Use `clap::ValueParser` ([#2211](https://github.com/casey/just/pull/2211) by [neunenak](https://github.com/neunenak))
- Document module doc comments in readme ([#2208](https://github.com/casey/just/pull/2208) by [casey](https://github.com/casey))
- Use `-and` instead of `&&` in PowerShell completion script ([#2204](https://github.com/casey/just/pull/2204) by [casey](https://github.com/casey))
- Fix readme formatting ([#2203](https://github.com/casey/just/pull/2203) by [casey](https://github.com/casey))
- Link to justfiles on GitHub in readme ([#2198](https://github.com/casey/just/pull/2198) by [bukowa](https://github.com/bukowa))
- Link to modules when first introduced in readme ([#2193](https://github.com/casey/just/pull/2193) by [casey](https://github.com/casey))
- Update `softprops/action-gh-release` ([#2183](https://github.com/casey/just/pull/2183) by [app/dependabot](https://github.com/app/dependabot))
- Document remote justfile workaround ([#2175](https://github.com/casey/just/pull/2175) by [casey](https://github.com/casey))
- Document library interface ([#2174](https://github.com/casey/just/pull/2174) by [casey](https://github.com/casey))
- Remove dependency on cradle ([#2169](https://github.com/casey/just/pull/2169) by [nc7s](https://github.com/nc7s))
- Add note to readme about quoting paths on Windows ([#2166](https://github.com/casey/just/pull/2166) by [casey](https://github.com/casey))
- Add missing changelog credits ([#2163](https://github.com/casey/just/pull/2163) by [casey](https://github.com/casey))
- Credit myself in changelog ([#2162](https://github.com/casey/just/pull/2162) by [casey](https://github.com/casey))
[1.29.1](https://github.com/casey/just/releases/tag/1.29.1) - 2024-06-14
------------------------------------------------------------------------
### Fixed
- Fix unexport syntax conflicts ([#2158](https://github.com/casey/just/pull/2158) by [casey](https://github.com/casey))
[1.29.0](https://github.com/casey/just/releases/tag/1.29.0) - 2024-06-13
------------------------------------------------------------------------
### Added
- Add [positional-arguments] attribute ([#2151](https://github.com/casey/just/pull/2151) by [casey](https://github.com/casey))
- Use `--justfile` in Fish shell completions ([#2148](https://github.com/casey/just/pull/2148) by [rubot](https://github.com/rubot))
- Add `is_dependency()` function ([#2139](https://github.com/casey/just/pull/2139) by [neunenak](https://github.com/neunenak))
- Allow printing nu completion script with `just --completions nushell` ([#2140](https://github.com/casey/just/pull/2140) by [casey](https://github.com/casey))
- Add `[ATTRIBUTE: VALUE]` shorthand ([#2136](https://github.com/casey/just/pull/2136) by [neunenak](https://github.com/neunenak))
- Allow unexporting environment variables ([#2098](https://github.com/casey/just/pull/2098) by [neunenak](https://github.com/neunenak))
### Fixed
- Load environment file from dotenv-path relative to working directory ([#2152](https://github.com/casey/just/pull/2152) by [casey](https://github.com/casey))
- Fix `fzf` chooser preview with space-separated module paths ([#2141](https://github.com/casey/just/pull/2141) by [casey](https://github.com/casey))
### Misc
- Improve argument parsing and error handling for submodules ([#2154](https://github.com/casey/just/pull/2154) by [casey](https://github.com/casey))
- Document shell expanded string defaults ([#2153](https://github.com/casey/just/pull/2153) by [casey](https://github.com/casey))
- Test bare bash path in shebang on windows ([#2144](https://github.com/casey/just/pull/2144) by [casey](https://github.com/casey))
- Test shell not found error messages ([#2145](https://github.com/casey/just/pull/2145) by [casey](https://github.com/casey))
- Refactor evaluator ([#2138](https://github.com/casey/just/pull/2138) by [neunenak](https://github.com/neunenak))
- Fix man page generation in release workflow ([#2132](https://github.com/casey/just/pull/2132) by [casey](https://github.com/casey))
[1.28.0](https://github.com/casey/just/releases/tag/1.28.0) - 2024-06-05
------------------------------------------------------------------------
### Changed
- Write shebang recipes to $XDG_RUNTIME_DIR ([#2128](https://github.com/casey/just/pull/2128) by [casey](https://github.com/casey))
- Add `set dotenv-required` to require an environment file ([#2116](https://github.com/casey/just/pull/2116) by [casey](https://github.com/casey))
- Don't display submodule recipes in `--list` ([#2112](https://github.com/casey/just/pull/2112) by [casey](https://github.com/casey))
### Added
- Allow listing recipes in submodules with `--list-submodules` ([#2113](https://github.com/casey/just/pull/2113) by [casey](https://github.com/casey))
- Show recipes in submodules with `--show RECIPE::PATH` ([#2111](https://github.com/casey/just/pull/2111) by [casey](https://github.com/casey))
- Add `--timestamp-format` ([#2106](https://github.com/casey/just/pull/2106) by [neunenak](https://github.com/neunenak))
- Allow listing submodule recipes with `--list PATH` ([#2108](https://github.com/casey/just/pull/2108) by [casey](https://github.com/casey))
- Print recipe command timestamps with `--timestamps` ([#2084](https://github.com/casey/just/pull/2084) by [neunenak](https://github.com/neunenak))
- Add `module_file()` and `module_directory()` functions ([#2105](https://github.com/casey/just/pull/2105) by [casey](https://github.com/casey))
### Fixed
- Use space-separated recipe paths in `--choose` ([#2115](https://github.com/casey/just/pull/2115) by [casey](https://github.com/casey))
- Fix bash completion for aliases ([#2104](https://github.com/casey/just/pull/2104) by [laniakea64](https://github.com/laniakea64))
### Misc
- Don't check in manpage ([#2130](https://github.com/casey/just/pull/2130) by [casey](https://github.com/casey))
- Document default shell ([#2129](https://github.com/casey/just/pull/2129) by [casey](https://github.com/casey))
- Remove duplicate section in Chinese readme ([#2127](https://github.com/casey/just/pull/2127) by [potterxu](https://github.com/potterxu))
- Update Chinese readme ([#2124](https://github.com/casey/just/pull/2124) by [potterxu](https://github.com/potterxu))
- Fix typo in readme ([#2122](https://github.com/casey/just/pull/2122) by [potterxu](https://github.com/potterxu))
- Don't check in auto-generated completion scripts ([#2120](https://github.com/casey/just/pull/2120) by [casey](https://github.com/casey))
- Document when dependencies run in readme ([#2103](https://github.com/casey/just/pull/2103) by [casey](https://github.com/casey))
- Build aarch64-pc-windows-msvc release binaries ([#2100](https://github.com/casey/just/pull/2100) by [alshdavid](https://github.com/alshdavid))
- Clarify that `dotenv-path`-given env file is required ([#2099](https://github.com/casey/just/pull/2099) by [casey](https://github.com/casey))
- Print multi-line doc comments before recipe in `--list` ([#2090](https://github.com/casey/just/pull/2090) by [casey](https://github.com/casey))
- List unsorted imported recipes by import depth and offset ([#2092](https://github.com/casey/just/pull/2092) by [casey](https://github.com/casey))
- Update README.md ([#2091](https://github.com/casey/just/pull/2091) by [laniakea64](https://github.com/laniakea64))
[1.27.0](https://github.com/casey/just/releases/tag/1.27.0) - 2024-05-25
------------------------------------------------------------------------
### Changed
- Use cache dir for temporary files ([#2067](https://github.com/casey/just/pull/2067) by [casey](https://github.com/casey))
### Added
- Add `[doc]` attribute to set and suppress documentation comments ([#2050](https://github.com/casey/just/pull/2050) by [neunenak](https://github.com/neunenak))
- Add source_file() and source_directory() functions ([#2088](https://github.com/casey/just/pull/2088) by [casey](https://github.com/casey))
- Add recipe groups ([#1842](https://github.com/casey/just/pull/1842) by [neunenak](https://github.com/neunenak))
- Add shell() function for running external commands ([#2047](https://github.com/casey/just/pull/2047) by [gyreas](https://github.com/gyreas))
- Add `--global-justfile` flag ([#1846](https://github.com/casey/just/pull/1846) by [neunenak](https://github.com/neunenak))
- Add shell-expanded strings ([#2055](https://github.com/casey/just/pull/2055) by [casey](https://github.com/casey))
- Add `encode_uri_component` function ([#2052](https://github.com/casey/just/pull/2052) by [laniakea64](https://github.com/laniakea64))
- Add `choose` function for generating random strings ([#2049](https://github.com/casey/just/pull/2049) by [laniakea64](https://github.com/laniakea64))
- Add predefined constants ([#2054](https://github.com/casey/just/pull/2054) by [casey](https://github.com/casey))
- Allow setting some command-line options with environment variables ([#2044](https://github.com/casey/just/pull/2044) by [neunenak](https://github.com/neunenak))
- Add prepend() function ([#2045](https://github.com/casey/just/pull/2045) by [gyreas](https://github.com/gyreas))
- Add append() function ([#2046](https://github.com/casey/just/pull/2046) by [gyreas](https://github.com/gyreas))
- Add --man subcommand ([#2041](https://github.com/casey/just/pull/2041) by [casey](https://github.com/casey))
- Make `dotenv-path` relative to working directory ([#2040](https://github.com/casey/just/pull/2040) by [casey](https://github.com/casey))
- Add `assert` expression ([#1845](https://github.com/casey/just/pull/1845) by [de1iza](https://github.com/de1iza))
- Add 'allow-duplicate-variables' setting ([#1922](https://github.com/casey/just/pull/1922) by [Mijago](https://github.com/Mijago))
### Fixed
- List modules in source order with `--unsorted` ([#2085](https://github.com/casey/just/pull/2085) by [casey](https://github.com/casey))
- Show submodule recipes in --choose ([#2069](https://github.com/casey/just/pull/2069) by [casey](https://github.com/casey))
- Allow multiple imports of the same file in different modules ([#2065](https://github.com/casey/just/pull/2065) by [casey](https://github.com/casey))
- Fix submodule recipe listing indentation ([#2063](https://github.com/casey/just/pull/2063) by [casey](https://github.com/casey))
- Pass command as first argument to `shell` ([#2061](https://github.com/casey/just/pull/2061) by [casey](https://github.com/casey))
- Allow shell expanded strings in mod and import paths ([#2059](https://github.com/casey/just/pull/2059) by [casey](https://github.com/casey))
- Run imported recipes in root justfile with correct working directory ([#2056](https://github.com/casey/just/pull/2056) by [casey](https://github.com/casey))
- Fix output `\r\n` stripping ([#2035](https://github.com/casey/just/pull/2035) by [casey](https://github.com/casey))
### Misc
- Forbid whitespace in shell-expanded string prefixes ([#2083](https://github.com/casey/just/pull/2083) by [casey](https://github.com/casey))
- Add Debian and Ubuntu install instructions to readme ([#2072](https://github.com/casey/just/pull/2072) by [casey](https://github.com/casey))
- Remove snap installation instructions from readme ([#2070](https://github.com/casey/just/pull/2070) by [casey](https://github.com/casey))
- Fallback to wget in install script if curl isn't available([#1913](https://github.com/casey/just/pull/1913) by [tgross35](https://github.com/tgross35))
- Use std::io::IsTerminal instead of atty crate ([#2066](https://github.com/casey/just/pull/2066) by [casey](https://github.com/casey))
- Improve `shell()` documentation ([#2060](https://github.com/casey/just/pull/2060) by [laniakea64](https://github.com/laniakea64))
- Add bash completion for snap ([#2058](https://github.com/casey/just/pull/2058) by [albertodonato](https://github.com/albertodonato))
- Refactor list subcommand ([#2062](https://github.com/casey/just/pull/2062) by [casey](https://github.com/casey))
- Document working directory ([#2053](https://github.com/casey/just/pull/2053) by [casey](https://github.com/casey))
- Replace FunctionContext with Evaluator ([#2048](https://github.com/casey/just/pull/2048) by [casey](https://github.com/casey))
- Update clap to version 4 ([#1924](https://github.com/casey/just/pull/1924) by [poliorcetics](https://github.com/poliorcetics))
- Cleanup ([#2026](https://github.com/casey/just/pull/2026) by [adamnemecek](https://github.com/adamnemecek))
- Increase --list maximum alignable width from 30 to 50 ([#2039](https://github.com/casey/just/pull/2039) by [casey](https://github.com/casey))
- Document using `env -S` ([#2038](https://github.com/casey/just/pull/2038) by [casey](https://github.com/casey))
- Update line continuation documentation ([#1998](https://github.com/casey/just/pull/1998) by [laniakea64](https://github.com/laniakea64))
- Add example using GNU parallel to run tasks in concurrently ([#1915](https://github.com/casey/just/pull/1915) by [amarao](https://github.com/amarao))
- Placate clippy: use `clone_into` ([#2037](https://github.com/casey/just/pull/2037) by [casey](https://github.com/casey))
- Use --command-color when printing shebang recipe commands ([#1911](https://github.com/casey/just/pull/1911) by [avi-cenna](https://github.com/avi-cenna))
- Document how to use watchexec to re-run recipes when files change ([#2036](https://github.com/casey/just/pull/2036) by [casey](https://github.com/casey))
- Update VS Code extensions in readme ([#2034](https://github.com/casey/just/pull/2034) by [casey](https://github.com/casey))
- Add rust:just repology package table to readme ([#2032](https://github.com/casey/just/pull/2032) by [casey](https://github.com/casey))
[1.26.0](https://github.com/casey/just/releases/tag/1.26.0) - 2024-05-13
------------------------------------------------------------------------
### Added
- Add --no-aliases to hide aliases in --list ([#1961](https://github.com/casey/just/pull/1961) by [WJehee](https://github.com/WJehee))
- Add -E as alias for --dotenv-path ([#1910](https://github.com/casey/just/pull/1910) by [amarao](https://github.com/amarao))
### Misc
- Update softprops/action-gh-release ([#2029](https://github.com/casey/just/pull/2029) by [app/dependabot](https://github.com/app/dependabot))
- Update dependencies ([#1999](https://github.com/casey/just/pull/1999) by [neunenak](https://github.com/neunenak))
- Bump peaceiris/actions-gh-pages to version 4 ([#2005](https://github.com/casey/just/pull/2005) by [app/dependabot](https://github.com/app/dependabot))
- Clarify that janus operates on public justfiles only ([#2021](https://github.com/casey/just/pull/2021) by [casey](https://github.com/casey))
- Fix Error::TmpdirIo error message ([#1987](https://github.com/casey/just/pull/1987) by [casey](https://github.com/casey))
- Update softprops/action-gh-release ([#1973](https://github.com/casey/just/pull/1973) by [app/dependabot](https://github.com/app/dependabot))
- Rename `delete` example recipe to `delete-all` ([#1966](https://github.com/casey/just/pull/1966) by [aarmn](https://github.com/aarmn))
- Update softprops/action-gh-release ([#1954](https://github.com/casey/just/pull/1954) by [app/dependabot](https://github.com/app/dependabot))
- Fix function name typo ([#1953](https://github.com/casey/just/pull/1953) by [racerole](https://github.com/racerole))
[1.25.2](https://github.com/casey/just/releases/tag/1.25.2) - 2024-03-10
------------------------------------------------------------------------
- Unpin ctrlc ([#1951](https://github.com/casey/just/pull/1951) by [casey](https://github.com/casey))
[1.25.1](https://github.com/casey/just/releases/tag/1.25.1) - 2024-03-09
------------------------------------------------------------------------
### Misc
- Pin ctrlc to version 3.1.1 ([#1945](https://github.com/casey/just/pull/1945) by [casey](https://github.com/casey))
- Fix AArch64 release build error ([#1942](https://github.com/casey/just/pull/1942) by [casey](https://github.com/casey))
[1.25.0](https://github.com/casey/just/releases/tag/1.25.0) - 2024-03-07
------------------------------------------------------------------------
### Added
- Add `blake3` and `blake3_file` functions ([#1860](https://github.com/casey/just/pull/1860) by [tgross35](https://github.com/tgross35))
### Misc
- Fix readme typo ([#1936](https://github.com/casey/just/pull/1936) by [Justintime50](https://github.com/Justintime50))
- Use unwrap_or_default ([#1928](https://github.com/casey/just/pull/1928) by [casey](https://github.com/casey))
- Set codegen-units to 1 reduce release binary size ([#1920](https://github.com/casey/just/pull/1920) by [amarao](https://github.com/amarao))
- Document openSUSE package ([#1918](https://github.com/casey/just/pull/1918) by [sfalken](https://github.com/sfalken))
- Fix install.sh shellcheck warnings ([#1912](https://github.com/casey/just/pull/1912) by [tgross35](https://github.com/tgross35))
[1.24.0](https://github.com/casey/just/releases/tag/1.24.0) - 2024-02-11
------------------------------------------------------------------------
### Added
- Support recipe paths containing `::` in Bash completion script ([#1863](https://github.com/casey/just/pull/1863) by [crdx](https://github.com/crdx))
- Add function to canonicalize paths ([#1859](https://github.com/casey/just/pull/1859) by [casey](https://github.com/casey))
### Misc
- Document installing just on Github Actions in readme ([#1867](https://github.com/casey/just/pull/1867) by [cclauss](https://github.com/cclauss))
- Use unlikely-to-be-set variable name in env tests ([#1882](https://github.com/casey/just/pull/1882) by [casey](https://github.com/casey))
- Skip write_error test if running as root ([#1881](https://github.com/casey/just/pull/1881) by [casey](https://github.com/casey))
- Convert run_shebang into integration test ([#1880](https://github.com/casey/just/pull/1880) by [casey](https://github.com/casey))
- Install mdbook with cargo in CI workflow ([#1877](https://github.com/casey/just/pull/1877) by [casey](https://github.com/casey))
- Remove deprecated actions-rs/toolchain ([#1874](https://github.com/casey/just/pull/1874) by [cclauss](https://github.com/cclauss))
- Fix Gentoo package link ([#1875](https://github.com/casey/just/pull/1875) by [vozbu](https://github.com/vozbu))
- Fix typos found by codespell ([#1872](https://github.com/casey/just/pull/1872) by [cclauss](https://github.com/cclauss))
- Replace deprecated set-output command in Github Actions workflows ([#1869](https://github.com/casey/just/pull/1869) by [cclauss](https://github.com/cclauss))
- Update `actions/checkout` and `softprops/action-gh-release` ([#1871](https://github.com/casey/just/pull/1871) by [app/dependabot](https://github.com/app/dependabot))
- Keep GitHub Actions up to date with Dependabot ([#1868](https://github.com/casey/just/pull/1868) by [cclauss](https://github.com/cclauss))
- Add contrib directory ([#1870](https://github.com/casey/just/pull/1870) by [casey](https://github.com/casey))
- Fix install script ([#1844](https://github.com/casey/just/pull/1844) by [casey](https://github.com/casey))
[1.23.0](https://github.com/casey/just/releases/tag/1.23.0) - 2024-01-12
------------------------------------------------------------------------
### Added
- Allow setting custom confirm prompt ([#1834](https://github.com/casey/just/pull/1834) by [CramBL](https://github.com/CramBL))
- Add `set quiet` and `[no-quiet]` ([#1704](https://github.com/casey/just/pull/1704) by [dharrigan](https://github.com/dharrigan))
- Add `just_pid` function ([#1833](https://github.com/casey/just/pull/1833) by [Swordelf2](https://github.com/Swordelf2))
- Add functions to return XDG base directories ([#1822](https://github.com/casey/just/pull/1822) by [tgross35](https://github.com/tgross35))
- Add `--no-deps` to skip running recipe dependencies ([#1819](https://github.com/casey/just/pull/1819) by [ngharrington](https://github.com/ngharrington))
### Fixed
- Run imports in working directory of importer ([#1817](https://github.com/casey/just/pull/1817) by [casey](https://github.com/casey))
### Misc
- Include completion scripts in releases ([#1837](https://github.com/casey/just/pull/1837) by [casey](https://github.com/casey))
- Tweak readme table formatting ([#1836](https://github.com/casey/just/pull/1836) by [casey](https://github.com/casey))
- Don't abbreviate just in README ([#1831](https://github.com/casey/just/pull/1831) by [thled](https://github.com/thled))
- Ignore [private] recipes in just --list ([#1816](https://github.com/casey/just/pull/1816) by [crdx](https://github.com/crdx))
- Add a dash to tempdir prefix ([#1828](https://github.com/casey/just/pull/1828) by [casey](https://github.com/casey))
[1.22.1](https://github.com/casey/just/releases/tag/1.22.1) - 2024-01-08
------------------------------------------------------------------------
### Fixed
- Don't conflate recipes with the same name in different modules ([#1825](https://github.com/casey/just/pull/1825) by [casey](https://github.com/casey))
### Misc
- Clarify that UUID is version 4 ([#1821](https://github.com/casey/just/pull/1821) by [tgross35](https://github.com/tgross35))
- Make sigil stripping from recipe lines less incomprehensible ([#1812](https://github.com/casey/just/pull/1812) by [casey](https://github.com/casey))
- Refactor invalid path argument check ([#1811](https://github.com/casey/just/pull/1811) by [casey](https://github.com/casey))
[1.22.0](https://github.com/casey/just/releases/tag/1.22.0) - 2023-12-31
------------------------------------------------------------------------
### Added
- Recipes can be invoked with path syntax ([#1809](https://github.com/casey/just/pull/1809) by [casey](https://github.com/casey))
- Add `--format` and `--initialize` as aliases for `--fmt` and `--init` ([#1802](https://github.com/casey/just/pull/1802) by [casey](https://github.com/casey))
### Misc
- Move table of contents pointer to right ([#1806](https://github.com/casey/just/pull/1806) by [casey](https://github.com/casey))
[1.21.0](https://github.com/casey/just/releases/tag/1.21.0) - 2023-12-29
------------------------------------------------------------------------
### Added
- Optional modules and imports ([#1797](https://github.com/casey/just/pull/1797) by [casey](https://github.com/casey))
- Print submodule recipes in --summary ([#1794](https://github.com/casey/just/pull/1794) by [casey](https://github.com/casey))
### Misc
- Use box-drawing characters in error messages ([#1798](https://github.com/casey/just/pull/1798) by [casey](https://github.com/casey))
- Use Self ([#1795](https://github.com/casey/just/pull/1795) by [casey](https://github.com/casey))
[1.20.0](https://github.com/casey/just/releases/tag/1.20.0) - 2023-12-28
------------------------------------------------------------------------
### Added
- Allow mod statements with path to source file ([#1786](https://github.com/casey/just/pull/1786) by [casey](https://github.com/casey))
### Changed
- Expand tilde in import and module paths ([#1792](https://github.com/casey/just/pull/1792) by [casey](https://github.com/casey))
- Override imported recipes ([#1790](https://github.com/casey/just/pull/1790) by [casey](https://github.com/casey))
- Run recipes with working directory set to submodule directory ([#1788](https://github.com/casey/just/pull/1788) by [casey](https://github.com/casey))
### Misc
- Document import override behavior ([#1791](https://github.com/casey/just/pull/1791) by [casey](https://github.com/casey))
- Document submodule working directory ([#1789](https://github.com/casey/just/pull/1789) by [casey](https://github.com/casey))
[1.19.0](https://github.com/casey/just/releases/tag/1.19.0) - 2023-12-27
------------------------------------------------------------------------
### Added
- Add modules ([#1782](https://github.com/casey/just/pull/1782) by [casey](https://github.com/casey))
[1.18.1](https://github.com/casey/just/releases/tag/1.18.1) - 2023-12-24
------------------------------------------------------------------------
### Added
- Display a descriptive error for `!include` directives ([#1779](https://github.com/casey/just/pull/1779) by [casey](https://github.com/casey))
[1.18.0](https://github.com/casey/just/releases/tag/1.18.0) - 2023-12-24
------------------------------------------------------------------------
### Added
- Stabilize `!include path` as `import 'path'` ([#1771](https://github.com/casey/just/pull/1771) by [casey](https://github.com/casey))
### Misc
- Tweak readme ([#1775](https://github.com/casey/just/pull/1775) by [casey](https://github.com/casey))
[1.17.0](https://github.com/casey/just/releases/tag/1.17.0) - 2023-12-20
------------------------------------------------------------------------
### Added
- Add `[confirm]` attribute ([#1723](https://github.com/casey/just/pull/1723) by [Hwatwasthat](https://github.com/Hwatwasthat))
### Changed
- Don't default to included recipes ([#1740](https://github.com/casey/just/pull/1740) by [casey](https://github.com/casey))
### Fixed
- Pass justfile path to default chooser ([#1759](https://github.com/casey/just/pull/1759) by [Qeole](https://github.com/Qeole))
- Pass `--unstable` and `--color always` to default chooser ([#1758](https://github.com/casey/just/pull/1758) by [Qeole](https://github.com/Qeole))
### Misc
- Update Gentoo package repository ([#1757](https://github.com/casey/just/pull/1757) by [paul-jewell](https://github.com/paul-jewell))
- Fix readme header level ([#1752](https://github.com/casey/just/pull/1752) by [laniakea64](https://github.com/laniakea64))
- Document line continuations ([#1751](https://github.com/casey/just/pull/1751) by [laniakea64](https://github.com/laniakea64))
- List included recipes in load order ([#1745](https://github.com/casey/just/pull/1745) by [casey](https://github.com/casey))
- Fix build badge in zh readme ([#1743](https://github.com/casey/just/pull/1743) by [chenrui333](https://github.com/chenrui333))
- Rename Justfile::first → Justfile::default ([#1741](https://github.com/casey/just/pull/1741) by [casey](https://github.com/casey))
- Add file paths to error messages ([#1737](https://github.com/casey/just/pull/1737) by [casey](https://github.com/casey))
- Move !include processing into compiler ([#1618](https://github.com/casey/just/pull/1618) by [neunenak](https://github.com/neunenak))
- Update Arch Linux package URL in readme ([#1733](https://github.com/casey/just/pull/1733) by [felixonmars](https://github.com/felixonmars))
- Clarify that aliases can only be used on the command line ([#1726](https://github.com/casey/just/pull/1726) by [laniakea64](https://github.com/laniakea64))
- Remove VALID_ALIAS_ATTRIBUTES array ([#1731](https://github.com/casey/just/pull/1731) by [casey](https://github.com/casey))
- Fix justfile search link in Chinese docs ([#1730](https://github.com/casey/just/pull/1730) by [oluceps](https://github.com/oluceps))
- Add example of Windows shebang handling ([#1709](https://github.com/casey/just/pull/1709) by [pfmoore](https://github.com/pfmoore))
- Fix CI ([#1728](https://github.com/casey/just/pull/1728) by [casey](https://github.com/casey))
[1.16.0](https://github.com/casey/just/releases/tag/1.16.0) - 2023-11-08
------------------------------------------------------------------------
### Added
- Add ARMv6 release target ([#1715](https://github.com/casey/just/pull/1715) by [ragazenta](https://github.com/ragazenta))
- Add `semver_matches` function ([#1713](https://github.com/casey/just/pull/1713) by [t3hmrman](https://github.com/t3hmrman))
- Add `dotenv-filename` and `dotenv-path` settings ([#1692](https://github.com/casey/just/pull/1692) by [ltfourrier](https://github.com/ltfourrier))
- Allow setting echoed recipe line color ([#1670](https://github.com/casey/just/pull/1670) by [avi-cenna](https://github.com/avi-cenna))
### Fixed
- Fix Fish completion script ([#1710](https://github.com/casey/just/pull/1710) by [l4zygreed](https://github.com/l4zygreed))
### Misc
- Fix readme typo ([#1717](https://github.com/casey/just/pull/1717) by [barraponto](https://github.com/barraponto))
- Clean up error display ([#1699](https://github.com/casey/just/pull/1699) by [nyurik](https://github.com/nyurik))
- Misc fixes ([#1700](https://github.com/casey/just/pull/1700) by [nyurik](https://github.com/nyurik))
- Fix readme build badge ([#1697](https://github.com/casey/just/pull/1697) by [casey](https://github.com/casey))
- Fix set tempdir grammar ([#1695](https://github.com/casey/just/pull/1695) by [casey](https://github.com/casey))
- Add version to attributes ([#1694](https://github.com/casey/just/pull/1694) by [JoeyTeng](https://github.com/JoeyTeng))
- Update README.md ([#1691](https://github.com/casey/just/pull/1691) by [laniakea64](https://github.com/laniakea64))
[1.15.0](https://github.com/casey/just/releases/tag/1.15.0) - 2023-10-09
------------------------------------------------------------------------
### Added
- Add Nushell completion script ([#1571](https://github.com/casey/just/pull/1571) by [presidento](https://github.com/presidento))
- Allow unstable features to be enabled with environment variable ([#1588](https://github.com/casey/just/pull/1588) by [neunenak](https://github.com/neunenak))
- Add num_cpus() function ([#1568](https://github.com/casey/just/pull/1568) by [schultetwin1](https://github.com/schultetwin1))
- Allow escaping newlines ([#1551](https://github.com/casey/just/pull/1551) by [ids1024](https://github.com/ids1024))
- Stabilize JSON dump format ([#1633](https://github.com/casey/just/pull/1633) by [casey](https://github.com/casey))
- Add env() function ([#1613](https://github.com/casey/just/pull/1613) by [kykyi](https://github.com/kykyi))
### Changed
- Allow selecting multiple recipes with default chooser ([#1547](https://github.com/casey/just/pull/1547) by [fzdwx](https://github.com/fzdwx))
### Misc
- Don't recommend `vim-polyglot` in readme ([#1644](https://github.com/casey/just/pull/1644) by [laniakea64](https://github.com/laniakea64))
- Note Micro support in readme ([#1316](https://github.com/casey/just/pull/1316) by [tomodachi94](https://github.com/tomodachi94))
- Update Indentation Documentation ([#1600](https://github.com/casey/just/pull/1600) by [GinoMan](https://github.com/GinoMan))
- Fix triple-quoted string example in readme ([#1620](https://github.com/casey/just/pull/1620) by [avi-cenna](https://github.com/avi-cenna))
- README fix: the -d in `mktemp -d` is required to created folders. ([#1688](https://github.com/casey/just/pull/1688) by [gl-yziquel](https://github.com/gl-yziquel))
- Placate clippy ([#1689](https://github.com/casey/just/pull/1689) by [casey](https://github.com/casey))
- Fix README typos ([#1660](https://github.com/casey/just/pull/1660) by [akuhnregnier](https://github.com/akuhnregnier))
- Document Windows Package Manager install instructions ([#1656](https://github.com/casey/just/pull/1656) by [casey](https://github.com/casey))
- Test unpaired escaped carriage return error ([#1650](https://github.com/casey/just/pull/1650) by [casey](https://github.com/casey))
- Avoid grep aliases in bash completions ([#1622](https://github.com/casey/just/pull/1622) by [BojanStipic](https://github.com/BojanStipic))
- Clarify [unix] attribute in readme ([#1619](https://github.com/casey/just/pull/1619) by [neunenak](https://github.com/neunenak))
- Add descriptions to fish recipe completions ([#1578](https://github.com/casey/just/pull/1578) by [patricksjackson](https://github.com/patricksjackson))
- Add better documentation for --dump and --fmt ([#1603](https://github.com/casey/just/pull/1603) by [neunenak](https://github.com/neunenak))
- Cleanup ([#1566](https://github.com/casey/just/pull/1566) by [nyurik](https://github.com/nyurik))
- Document Helix editor support in readme ([#1604](https://github.com/casey/just/pull/1604) by [kenden](https://github.com/kenden))
[1.14.0](https://github.com/casey/just/releases/tag/1.14.0) - 2023-06-02
------------------------------------------------------------------------
### Changed
- Use `just --show` in default chooser ([#1539](https://github.com/casey/just/pull/1539) by [fzdwx](https://github.com/fzdwx))
### Misc
- Fix justfile search link ([#1607](https://github.com/casey/just/pull/1607) by [jbaber](https://github.com/jbaber))
- Ignore clippy::let_underscore_untyped ([#1609](https://github.com/casey/just/pull/1609) by [casey](https://github.com/casey))
- Link to private recipes section in readme ([#1542](https://github.com/casey/just/pull/1542) by [quad](https://github.com/quad))
- Update README to reflect new attribute syntax ([#1538](https://github.com/casey/just/pull/1538) by [neunenak](https://github.com/neunenak))
- Allow multiple attributes on one line ([#1537](https://github.com/casey/just/pull/1537) by [neunenak](https://github.com/neunenak))
- Analyze and Compiler tweaks ([#1534](https://github.com/casey/just/pull/1534) by [neunenak](https://github.com/neunenak))
- Downgrade to TLS 1.2 in install script ([#1536](https://github.com/casey/just/pull/1536) by [casey](https://github.com/casey))
[1.13.0](https://github.com/casey/just/releases/tag/1.13.0) - 2023-01-24
------------------------------------------------------------------------
### Added
- Add -n as a short flag for --for dry-run ([#1524](https://github.com/casey/just/pull/1524) by [maiha](https://github.com/maiha))
- Add invocation_directory_native() ([#1507](https://github.com/casey/just/pull/1507) by [casey](https://github.com/casey))
### Changed
- Ignore additional search path arguments ([#1528](https://github.com/casey/just/pull/1528) by [neunenak](https://github.com/neunenak))
- Only print fallback message when verbose ([#1510](https://github.com/casey/just/pull/1510) by [casey](https://github.com/casey))
- Print format diff to stdout ([#1506](https://github.com/casey/just/pull/1506) by [casey](https://github.com/casey))
### Fixed
- Test passing dot as argument between justfiles ([#1530](https://github.com/casey/just/pull/1530) by [casey](https://github.com/casey))
- Fix install script default directory ([#1525](https://github.com/casey/just/pull/1525) by [casey](https://github.com/casey))
### Misc
- Note that justfiles are order-insensitive ([#1529](https://github.com/casey/just/pull/1529) by [casey](https://github.com/casey))
- Borrow Ast in Analyser ([#1527](https://github.com/casey/just/pull/1527) by [neunenak](https://github.com/neunenak))
- Ignore chooser tests ([#1513](https://github.com/casey/just/pull/1513) by [casey](https://github.com/casey))
- Put default setting values in backticks ([#1512](https://github.com/casey/just/pull/1512) by [s1ck](https://github.com/s1ck))
- Use lowercase boolean literals in readme ([#1511](https://github.com/casey/just/pull/1511) by [s1ck](https://github.com/s1ck))
- Document invocation_directory_native() ([#1508](https://github.com/casey/just/pull/1508) by [casey](https://github.com/casey))
- Fix interrupt tests ([#1505](https://github.com/casey/just/pull/1505) by [casey](https://github.com/casey))
[1.12.0](https://github.com/casey/just/releases/tag/1.12.0) - 2023-01-12
------------------------------------------------------------------------
### Added
- Add `!include` directives ([#1470](https://github.com/casey/just/pull/1470) by [neunenak](https://github.com/neunenak))
### Changed
- Allow matching search path arguments ([#1475](https://github.com/casey/just/pull/1475) by [neunenak](https://github.com/neunenak))
- Allow recipe parameters to shadow variables ([#1480](https://github.com/casey/just/pull/1480) by [casey](https://github.com/casey))
### Misc
- Remove --unstable from fallback example in readme ([#1502](https://github.com/casey/just/pull/1502) by [casey](https://github.com/casey))
- Specify minimum rust version ([#1496](https://github.com/casey/just/pull/1496) by [benmoss](https://github.com/benmoss))
- Note that install.sh may fail on GitHub actions ([#1499](https://github.com/casey/just/pull/1499) by [casey](https://github.com/casey))
- Fix readme typo ([#1489](https://github.com/casey/just/pull/1489) by [auberisky](https://github.com/auberisky))
- Update install script and readmes to use tls v1.3 ([#1481](https://github.com/casey/just/pull/1481) by [casey](https://github.com/casey))
- Re-enable install.sh test on CI([#1478](https://github.com/casey/just/pull/1478) by [casey](https://github.com/casey))
- Don't test install.sh on CI ([#1477](https://github.com/casey/just/pull/1477) by [casey](https://github.com/casey))
- Update Chinese translation of readme ([#1476](https://github.com/casey/just/pull/1476) by [hustcer](https://github.com/hustcer))
- Fix install.sh for Windows ([#1474](https://github.com/casey/just/pull/1474) by [bloodearnest](https://github.com/bloodearnest))
[1.11.0](https://github.com/casey/just/releases/tag/1.11.0) - 2023-01-03
------------------------------------------------------------------------
### Added
- Stabilize fallback ([#1471](https://github.com/casey/just/pull/1471) by [casey](https://github.com/casey))
### Misc
- Update Sublime syntax instructions ([#1455](https://github.com/casey/just/pull/1455) by [nk9](https://github.com/nk9))
[1.10.0](https://github.com/casey/just/releases/tag/1.10.0) - 2023-01-01
------------------------------------------------------------------------
### Added
- Allow private attribute on aliases ([#1434](https://github.com/casey/just/pull/1434) by [neunenak](https://github.com/neunenak))
### Changed
- Suppress --fmt --check diff if --quiet is passed ([#1457](https://github.com/casey/just/pull/1457) by [casey](https://github.com/casey))
### Fixed
- Format exported variadic parameters correctly ([#1451](https://github.com/casey/just/pull/1451) by [casey](https://github.com/casey))
### Misc
- Fix section title grammar ([#1466](https://github.com/casey/just/pull/1466) by [brettcannon](https://github.com/brettcannon))
- Give pages job write permissions([#1464](https://github.com/casey/just/pull/1464) by [jsoref](https://github.com/jsoref))
- Fix spelling ([#1463](https://github.com/casey/just/pull/1463) by [jsoref](https://github.com/jsoref))
- Merge imports ([#1462](https://github.com/casey/just/pull/1462) by [casey](https://github.com/casey))
- Add instructions for taiki-e/install-action ([#1459](https://github.com/casey/just/pull/1459) by [azzamsa](https://github.com/azzamsa))
- Differentiate between shell and nushell example ([#1427](https://github.com/casey/just/pull/1427) by [Dialga](https://github.com/Dialga))
- Link regex docs in readme ([#1454](https://github.com/casey/just/pull/1454) by [casey](https://github.com/casey))
- Linkify changelog PRs and usernames ([#1440](https://github.com/casey/just/pull/1440) by [nk9](https://github.com/nk9))
- Eliminate lazy_static ([#1442](https://github.com/casey/just/pull/1442) by [camsteffen](https://github.com/camsteffen))
- Add attributes to sublime syntax file ([#1452](https://github.com/casey/just/pull/1452) by [crdx](https://github.com/crdx))
- Fix homepage style ([#1453](https://github.com/casey/just/pull/1453) by [casey](https://github.com/casey))
- Linkify homepage letters ([#1448](https://github.com/casey/just/pull/1448) by [nk9](https://github.com/nk9))
- Use `just` in readme codeblocks ([#1447](https://github.com/casey/just/pull/1447) by [nicochatzi](https://github.com/nicochatzi))
- Update MSRV in readme ([#1446](https://github.com/casey/just/pull/1446) by [casey](https://github.com/casey))
- Merge CI workflows ([#1444](https://github.com/casey/just/pull/1444) by [casey](https://github.com/casey))
- Use dotenvy instead of dotenv ([#1443](https://github.com/casey/just/pull/1443) by [mike-burns](https://github.com/mike-burns))
- Update Chinese translation of readme ([#1428](https://github.com/casey/just/pull/1428) by [hustcer](https://github.com/hustcer))
[1.9.0](https://github.com/casey/just/releases/tag/1.9.0) - 2022-11-25
----------------------------------------------------------------------
### Breaking Changes to Unstable Features
- Change `fallback` setting default to false ([#1425](https://github.com/casey/just/pull/1425) by [casey](https://github.com/casey))
### Added
- Hide recipes with `[private]` attribute ([#1422](https://github.com/casey/just/pull/1422) by [casey](https://github.com/casey))
- Add replace_regex function ([#1393](https://github.com/casey/just/pull/1393) by [miles170](https://github.com/miles170))
- Add [no-cd] attribute ([#1400](https://github.com/casey/just/pull/1400) by [casey](https://github.com/casey))
### Changed
- Omit shebang lines on Windows ([#1417](https://github.com/casey/just/pull/1417) by [casey](https://github.com/casey))
### Misc
- Placate clippy ([#1423](https://github.com/casey/just/pull/1423) by [casey](https://github.com/casey))
- Make include_shebang_line clearer ([#1418](https://github.com/casey/just/pull/1418) by [casey](https://github.com/casey))
- Use more secure cURL options in install.sh ([#1416](https://github.com/casey/just/pull/1416) by [casey](https://github.com/casey))
- Document how shebang recipes are executed ([#1412](https://github.com/casey/just/pull/1412) by [casey](https://github.com/casey))
- Fix typo: regec → regex ([#1409](https://github.com/casey/just/pull/1409) by [casey](https://github.com/casey))
- Use powershell.exe instead of pwsh.exe in readme ([#1394](https://github.com/casey/just/pull/1394) by [asdf8dfafjk](https://github.com/asdf8dfafjk))
- Expand alternatives and prior art in readme ([#1401](https://github.com/casey/just/pull/1401) by [casey](https://github.com/casey))
- Split up CI workflow ([#1399](https://github.com/casey/just/pull/1399) by [casey](https://github.com/casey))
[1.8.0](https://github.com/casey/just/releases/tag/1.8.0) - 2022-11-02
----------------------------------------------------------------------
### Added
- Add OS Configuration Attributes ([#1387](https://github.com/casey/just/pull/1387) by [casey](https://github.com/casey))
### Misc
- Link to sclu1034/vscode-just in readme ([#1396](https://github.com/casey/just/pull/1396) by [casey](https://github.com/casey))
[1.7.0](https://github.com/casey/just/releases/tag/1.7.0) - 2022-10-26
----------------------------------------------------------------------
### Breaking Changes to Unstable Features
- Make `fallback` setting default to true ([#1384](https://github.com/casey/just/pull/1384) by [casey](https://github.com/casey))
### Added
- Add more case-conversion functions ([#1383](https://github.com/casey/just/pull/1383) by [gVirtu](https://github.com/gVirtu))
- Add `tempdir` setting ([#1369](https://github.com/casey/just/pull/1369) by [dmatos2012](https://github.com/dmatos2012))
- Add [no-exit-message] recipe annotation ([#1354](https://github.com/casey/just/pull/1354) by [gokhanettin](https://github.com/gokhanettin))
- Add `capitalize(s)` function ([#1375](https://github.com/casey/just/pull/1375) by [femnad](https://github.com/femnad))
### Misc
- Credit contributors in changelog ([#1385](https://github.com/casey/just/pull/1385) by [casey](https://github.com/casey))
- Update asdf just plugin repository ([#1380](https://github.com/casey/just/pull/1380) by [kachick](https://github.com/kachick))
- Prepend commit messages with `- ` in changelog ([#1379](https://github.com/casey/just/pull/1379) by [casey](https://github.com/casey))
- Fail publish if `<sup>master</sup>` is found in README.md ([#1378](https://github.com/casey/just/pull/1378) by [casey](https://github.com/casey))
- Use for loop in capitalize implementation ([#1377](https://github.com/casey/just/pull/1377) by [casey](https://github.com/casey))
[1.6.0](https://github.com/casey/just/releases/tag/1.6.0) - 2022-10-19
----------------------------------------------------------------------
### Breaking Changes to Unstable Features
- Require `set fallback := true` to enable recipe fallback ([#1368](https://github.com/casey/just/pull/1368) by [casey](https://github.com/casey))
### Changed
- Allow fallback with search directory ([#1348](https://github.com/casey/just/pull/1348) by [casey](https://github.com/casey))
### Added
- Don't evaluate comments ([#1358](https://github.com/casey/just/pull/1358) by [casey](https://github.com/casey))
- Add skip-comments setting ([#1333](https://github.com/casey/just/pull/1333) by [neunenak](https://github.com/neunenak))
- Allow bash completion to complete tasks in other directories ([#1303](https://github.com/casey/just/pull/1303) by [jpbochi](https://github.com/jpbochi))
### Misc
- Restore www/CNAME ([#1364](https://github.com/casey/just/pull/1364) by [casey](https://github.com/casey))
- Improve book config ([#1363](https://github.com/casey/just/pull/1363) by [casey](https://github.com/casey))
- Add kitchen sink justfile to test syntax highlighting ([#1362](https://github.com/casey/just/pull/1362) by [nk9](https://github.com/nk9))
- Note version in which absolute path construction was added ([#1361](https://github.com/casey/just/pull/1361) by [casey](https://github.com/casey))
- Inline setup and cleanup functions in completion script test ([#1352](https://github.com/casey/just/pull/1352) by [casey](https://github.com/casey))
[1.5.0](https://github.com/casey/just/releases/tag/1.5.0) - 2022-9-11
---------------------------------------------------------------------
### Changed
- Allow constructing absolute paths with `/` operator ([#1320](https://github.com/casey/just/pull/1320) by [erikkrieg](https://github.com/erikkrieg))
### Misc
- Allow fewer lints ([#1340](https://github.com/casey/just/pull/1340) by [casey](https://github.com/casey))
- Fix issues reported by nightly clippy ([#1336](https://github.com/casey/just/pull/1336) by [neunenak](https://github.com/neunenak))
- Refactor run.rs ([#1335](https://github.com/casey/just/pull/1335) by [neunenak](https://github.com/neunenak))
- Allow comments on same line as settings ([#1339](https://github.com/casey/just/pull/1339) by [casey](https://github.com/casey))
- Fix justfile env shebang on Linux ([#1330](https://github.com/casey/just/pull/1330) by [casey](https://github.com/casey))
- Update Chinese translation of README.md ([#1325](https://github.com/casey/just/pull/1325) by [hustcer](https://github.com/hustcer))
- Add additional settings to grammar ([#1321](https://github.com/casey/just/pull/1321) by [psibi](https://github.com/psibi))
- Add an example of using a variable in a recipe parameter ([#1311](https://github.com/casey/just/pull/1311) by [papertigers](https://github.com/papertigers))
[1.4.0](https://github.com/casey/just/releases/tag/1.4.0) - 2022-8-08
---------------------------------------------------------------------
### Fixed
- Fix shell setting precedence ([#1306](https://github.com/casey/just/pull/1306) by [casey](https://github.com/casey))
### Misc
- Don't hardcode homebrew prefix ([#1295](https://github.com/casey/just/pull/1295) by [casey](https://github.com/casey))
- Exclude files from cargo package ([#1283](https://github.com/casey/just/pull/1283) by [casey](https://github.com/casey))
- Add usage note to default list recipe ([#1296](https://github.com/casey/just/pull/1296) by [jpbochi](https://github.com/jpbochi))
- Add MPR/Prebuilt-MPR installation instructions to README.md ([#1280](https://github.com/casey/just/pull/1280) by [hwittenborn](https://github.com/hwittenborn))
- Add make and makesure to readme ([#1299](https://github.com/casey/just/pull/1299) by [casey](https://github.com/casey))
- Document how to configure zsh completions on MacOS ([#1285](https://github.com/casey/just/pull/1285) by [nk9](https://github.com/nk9))
- Convert package table to HTML ([#1291](https://github.com/casey/just/pull/1291) by [casey](https://github.com/casey))
[1.3.0](https://github.com/casey/just/releases/tag/1.3.0) - 2022-7-25
---------------------------------------------------------------------
### Added
- Add `/` operator ([#1237](https://github.com/casey/just/pull/1237) by [casey](https://github.com/casey))
### Fixed
- Fix multibyte codepoint crash ([#1243](https://github.com/casey/just/pull/1243) by [casey](https://github.com/casey))
### Misc
- Update just-install reference on README.md ([#1275](https://github.com/casey/just/pull/1275) by [0xradical](https://github.com/0xradical))
- Split Recipe::run into Recipe::{run_shebang,run_linewise} ([#1270](https://github.com/casey/just/pull/1270) by [casey](https://github.com/casey))
- Add asdf package to readme([#1264](https://github.com/casey/just/pull/1264) by [jaacko-torus](https://github.com/jaacko-torus))
- Add mdbook deps for build-book recipe ([#1259](https://github.com/casey/just/pull/1259) by [TopherIsSwell](https://github.com/TopherIsSwell))
- Fix typo: argumant -> argument ([#1257](https://github.com/casey/just/pull/1257) by [kianmeng](https://github.com/kianmeng))
- Improve error message if `if` is missing the `else` ([#1252](https://github.com/casey/just/pull/1252) by [nk9](https://github.com/nk9))
- Explain how to pass arguments of a command to a dependency ([#1254](https://github.com/casey/just/pull/1254) by [heavelock](https://github.com/heavelock))
- Update Chinese translation of README.md ([#1253](https://github.com/casey/just/pull/1253) by [hustcer](https://github.com/hustcer))
- Improvements to Sublime syntax file ([#1250](https://github.com/casey/just/pull/1250) by [nk9](https://github.com/nk9))
- Prevent unbounded recursion when parsing expressions ([#1248](https://github.com/casey/just/pull/1248) by [evanrichter](https://github.com/evanrichter))
- Publish to snap store ([#1245](https://github.com/casey/just/pull/1245) by [casey](https://github.com/casey))
- Restore fuzz test harness ([#1246](https://github.com/casey/just/pull/1246) by [evanrichter](https://github.com/evanrichter))
- Add just-install to README file ([#1241](https://github.com/casey/just/pull/1241) by [brombal](https://github.com/brombal))
- Fix dead readme link ([#1240](https://github.com/casey/just/pull/1240) by [wdroz](https://github.com/wdroz))
- Do `use super::*;` instead of `use crate::common::*;` ([#1239](https://github.com/casey/just/pull/1239) by [casey](https://github.com/casey))
- Fix readme punctuation ([#1235](https://github.com/casey/just/pull/1235) by [casey](https://github.com/casey))
- Add argument splitting section to readme ([#1230](https://github.com/casey/just/pull/1230) by [casey](https://github.com/casey))
- Add notes about environment variables to readme ([#1229](https://github.com/casey/just/pull/1229) by [casey](https://github.com/casey))
- Fix book links ([#1227](https://github.com/casey/just/pull/1227) by [casey](https://github.com/casey))
- Add nushell README.md ([#1224](https://github.com/casey/just/pull/1224) by [hustcer](https://github.com/hustcer))
- Use absolute links in readme ([#1223](https://github.com/casey/just/pull/1223) by [casey](https://github.com/casey))
- Copy changelog into manual ([#1222](https://github.com/casey/just/pull/1222) by [casey](https://github.com/casey))
- Translate Chinese manual introduction and title ([#1220](https://github.com/casey/just/pull/1220) by [hustcer](https://github.com/hustcer))
- Build Chinese language user manual ([#1219](https://github.com/casey/just/pull/1219) by [casey](https://github.com/casey))
- Update Chinese translation of README.md ([#1218](https://github.com/casey/just/pull/1218) by [hustcer](https://github.com/hustcer))
- Translate all of README.md into Chinese ([#1217](https://github.com/casey/just/pull/1217) by [hustcer](https://github.com/hustcer))
- Translate all of features in README into Chinese ([#1215](https://github.com/casey/just/pull/1215) by [hustcer](https://github.com/hustcer))
- Make link to examples directory absolute ([#1213](https://github.com/casey/just/pull/1213) by [casey](https://github.com/casey))
- Translate part of features in README into Chinese ([#1211](https://github.com/casey/just/pull/1211) by [hustcer](https://github.com/hustcer))
- Add JetBrains IDE plugin to readme ([#1209](https://github.com/casey/just/pull/1209) by [linux-china](https://github.com/linux-china))
- Translate features chapter of readme to Chinese ([#1208](https://github.com/casey/just/pull/1208) by [hustcer](https://github.com/hustcer))
[1.2.0](https://github.com/casey/just/releases/tag/1.2.0) - 2022-5-31
---------------------------------------------------------------------
### Added
- Add `windows-shell` setting ([#1198](https://github.com/casey/just/pull/1198) by [casey](https://github.com/casey))
- SHA-256 and UUID functions ([#1170](https://github.com/casey/just/pull/1170) by [mbodmer](https://github.com/mbodmer))
### Misc
- Translate editor support and quick start to Chinese ([#1206](https://github.com/casey/just/pull/1206) by [hustcer](https://github.com/hustcer))
- Translate first section of readme into Chinese ([#1205](https://github.com/casey/just/pull/1205) by [hustcer](https://github.com/hustcer))
- Fix a bunch of typos ([#1204](https://github.com/casey/just/pull/1204) by [casey](https://github.com/casey))
- Remove cargo-limit usage from justfile ([#1199](https://github.com/casey/just/pull/1199) by [casey](https://github.com/casey))
- Add nix package manager install instructions ([#1194](https://github.com/casey/just/pull/1194) by [risingBirdSong](https://github.com/risingBirdSong))
- Fix broken link in readme ([#1183](https://github.com/casey/just/pull/1183) by [Vlad-Shcherbina](https://github.com/Vlad-Shcherbina))
- Add screenshot to manual ([#1181](https://github.com/casey/just/pull/1181) by [casey](https://github.com/casey))
- Style homepage ([#1180](https://github.com/casey/just/pull/1180) by [casey](https://github.com/casey))
- Center readme ([#1178](https://github.com/casey/just/pull/1178) by [casey](https://github.com/casey))
- Style and add links to homepage ([#1177](https://github.com/casey/just/pull/1177) by [casey](https://github.com/casey))
- Fix readme badge links ([#1176](https://github.com/casey/just/pull/1176) by [casey](https://github.com/casey))
- Generate book from readme ([#1155](https://github.com/casey/just/pull/1155) by [casey](https://github.com/casey))
[1.1.3](https://github.com/casey/just/releases/tag/1.1.3) - 2022-5-3
--------------------------------------------------------------------
### Fixed
- Skip duplicate recipe arguments ([#1174](https://github.com/casey/just/pull/1174) by [casey](https://github.com/casey))
### Misc
- Fix install script ([#1172](https://github.com/casey/just/pull/1172) by [casey](https://github.com/casey))
- Document that `invocation_directory()` returns an absolute path ([#1162](https://github.com/casey/just/pull/1162) by [casey](https://github.com/casey))
- Fix absolute_path documentation ([#1160](https://github.com/casey/just/pull/1160) by [casey](https://github.com/casey))
- Add cross-platform justfile example ([#1152](https://github.com/casey/just/pull/1152) by [presidento](https://github.com/presidento))
[1.1.2](https://github.com/casey/just/releases/tag/1.1.2) - 2022-3-30
---------------------------------------------------------------------
### Misc
- Document indentation rules ([#1142](https://github.com/casey/just/pull/1142) by [casey](https://github.com/casey))
- Remove stale link from readme ([#1141](https://github.com/casey/just/pull/1141) by [casey](https://github.com/casey))
### Unstable
- Search for missing recipes in parent directory justfiles ([#1149](https://github.com/casey/just/pull/1149) by [casey](https://github.com/casey))
[1.1.1](https://github.com/casey/just/releases/tag/1.1.1) - 2022-3-22
---------------------------------------------------------------------
### Misc
- Build MacOS ARM release binaries ([#1138](https://github.com/casey/just/pull/1138) by [casey](https://github.com/casey))
- Upgrade Windows Actions runners to windows-latest ([#1137](https://github.com/casey/just/pull/1137) by [casey](https://github.com/casey))
[1.1.0](https://github.com/casey/just/releases/tag/1.1.0) - 2022-3-10
---------------------------------------------------------------------
### Added
- Add `error()` function ([#1118](https://github.com/casey/just/pull/1118) by [chamons](https://github.com/chamons))
- Add `absolute_path` function ([#1121](https://github.com/casey/just/pull/1121) by [Laura7089](https://github.com/Laura7089))
[1.0.1](https://github.com/casey/just/releases/tag/1.0.1) - 2022-2-28
---------------------------------------------------------------------
### Fixed
- Make path_exists() relative to current directory ([#1122](https://github.com/casey/just/pull/1122) by [casey](https://github.com/casey))
### Misc
- Detail environment variable usage in readme ([#1086](https://github.com/casey/just/pull/1086) by [kenden](https://github.com/kenden))
- Format --init justfile ([#1116](https://github.com/casey/just/pull/1116) by [TheLocehiliosan](https://github.com/TheLocehiliosan))
- Add hint for Node.js script compatibility ([#1113](https://github.com/casey/just/pull/1113) by [casey](https://github.com/casey))
[1.0.0](https://github.com/casey/just/releases/tag/1.0.0) - 2022-2-22
---------------------------------------------------------------------
### Added
- Add path_exists() function ([#1106](https://github.com/casey/just/pull/1106) by [heavelock](https://github.com/heavelock))
### Misc
- Note that `pipefail` isn't normally set ([#1108](https://github.com/casey/just/pull/1108) by [casey](https://github.com/casey))
[0.11.2](https://github.com/casey/just/releases/tag/0.11.2) - 2022-2-15
-----------------------------------------------------------------------
### Misc
- Fix dotenv-load documentation ([#1104](https://github.com/casey/just/pull/1104) by [casey](https://github.com/casey))
- Fixup broken release package script ([#1100](https://github.com/casey/just/pull/1100) by [lutostag](https://github.com/lutostag))
[0.11.1](https://github.com/casey/just/releases/tag/0.11.1) - 2022-2-14
-----------------------------------------------------------------------
### Added
- Allow duplicate recipes ([#1095](https://github.com/casey/just/pull/1095) by [lutostag](https://github.com/lutostag))
### Misc
- Add arrow pointing to table of contents button ([#1096](https://github.com/casey/just/pull/1096) by [casey](https://github.com/casey))
- Improve readme ([#1093](https://github.com/casey/just/pull/1093) by [halostatue](https://github.com/halostatue))
- Remove asciidoc readme ([#1092](https://github.com/casey/just/pull/1092) by [casey](https://github.com/casey))
- Convert README.adoc to markdown ([#1091](https://github.com/casey/just/pull/1091) by [casey](https://github.com/casey))
- Add choco package to README ([#1090](https://github.com/casey/just/pull/1090) by [michidk](https://github.com/michidk))
[0.11.0](https://github.com/casey/just/releases/tag/0.11.0) - 2022-2-3
----------------------------------------------------------------------
### Breaking
- Change dotenv-load default to false ([#1082](https://github.com/casey/just/pull/1082) by [casey](https://github.com/casey))
[0.10.7](https://github.com/casey/just/releases/tag/0.10.7) - 2022-1-30
-----------------------------------------------------------------------
### Misc
- Don't run tests in release workflow ([#1080](https://github.com/casey/just/pull/1080) by [casey](https://github.com/casey))
- Fix windows chooser invocation error message test ([#1079](https://github.com/casey/just/pull/1079) by [casey](https://github.com/casey))
- Remove call to sed in justfile ([#1078](https://github.com/casey/just/pull/1078) by [casey](https://github.com/casey))
[0.10.6](https://github.com/casey/just/releases/tag/0.10.6) - 2022-1-29
-----------------------------------------------------------------------
### Added
- Add windows-powershell setting ([#1057](https://github.com/casey/just/pull/1057) by [michidk](https://github.com/michidk))
### Changed
- Allow using `-` and `@` in any order ([#1063](https://github.com/casey/just/pull/1063) by [casey](https://github.com/casey))
### Misc
- Use `Context` suffix for snafu error contexts ([#1068](https://github.com/casey/just/pull/1068) by [casey](https://github.com/casey))
- Upgrade snafu to 0.7 ([#1067](https://github.com/casey/just/pull/1067) by [shepmaster](https://github.com/shepmaster))
- Mention "$@" in the README ([#1064](https://github.com/casey/just/pull/1064) by [mpdude](https://github.com/mpdude))
- Note how to use PowerShell with CLI in readme ([#1056](https://github.com/casey/just/pull/1056) by [michidk](https://github.com/michidk))
- Link to cheatsheet from readme ([#1053](https://github.com/casey/just/pull/1053) by [casey](https://github.com/casey))
- Link to Homebrew installation docs in readme ([#1049](https://github.com/casey/just/pull/1049) by [michidk](https://github.com/michidk))
- Workflow tweaks ([#1045](https://github.com/casey/just/pull/1045) by [casey](https://github.com/casey))
- Push to correct origin in publish recipe ([#1044](https://github.com/casey/just/pull/1044) by [casey](https://github.com/casey))
[0.10.5](https://github.com/casey/just/releases/tag/0.10.5) - 2021-12-4
-----------------------------------------------------------------------
### Changed
- Use musl libc for ARM binaries ([#1037](https://github.com/casey/just/pull/1037) by [casey](https://github.com/casey))
### Misc
- Make completions work with Bash alias ([#1035](https://github.com/casey/just/pull/1035) by [kurtbuilds](https://github.com/kurtbuilds))
- Run tests on PRs ([#1040](https://github.com/casey/just/pull/1040) by [casey](https://github.com/casey))
- Improve GitHub Actions workflow triggers ([#1033](https://github.com/casey/just/pull/1033) by [casey](https://github.com/casey))
- Publish from GitHub master branch instead of local master ([#1032](https://github.com/casey/just/pull/1032) by [casey](https://github.com/casey))
[0.10.4](https://github.com/casey/just/releases/tag/0.10.4) - 2021-11-21
------------------------------------------------------------------------
### Added
- Add `--dump-format json` ([#992](https://github.com/casey/just/pull/992) by [casey](https://github.com/casey))
- Add `quote(s)` function for escaping strings ([#1022](https://github.com/casey/just/pull/1022) by [casey](https://github.com/casey))
- fmt: check formatting with `--check` ([#1001](https://github.com/casey/just/pull/1001) by [hdhoang](https://github.com/hdhoang))
### Misc
- Refactor github actions ([#1028](https://github.com/casey/just/pull/1028) by [casey](https://github.com/casey))
- Fix readme formatting ([#1030](https://github.com/casey/just/pull/1030) by [soenkehahn](https://github.com/soenkehahn))
- Use ps1 extension for pwsh shebangs ([#1027](https://github.com/casey/just/pull/1027) by [dmringo](https://github.com/dmringo))
- Ignore leading byte order mark in source files ([#1021](https://github.com/casey/just/pull/1021) by [casey](https://github.com/casey))
- Add color to `just --fmt --check` diff ([#1015](https://github.com/casey/just/pull/1015) by [casey](https://github.com/casey))
[0.10.3](https://github.com/casey/just/releases/tag/0.10.3) - 2021-10-30
------------------------------------------------------------------------
### Added
- Add `trim_end(s)` and `trim_start(s)` functions ([#999](https://github.com/casey/just/pull/999) by [casey](https://github.com/casey))
- Add more string manipulation functions ([#998](https://github.com/casey/just/pull/998) by [casey](https://github.com/casey))
### Changed
- Make `join` accept two or more arguments ([#1000](https://github.com/casey/just/pull/1000) by [casey](https://github.com/casey))
### Misc
- Add alternatives and prior art section to readme ([#1008](https://github.com/casey/just/pull/1008) by [casey](https://github.com/casey))
- Fix readme `make`'s not correctly displayed ([#1007](https://github.com/casey/just/pull/1007) by [peter50216](https://github.com/peter50216))
- Document the default recipe ([#1006](https://github.com/casey/just/pull/1006) by [casey](https://github.com/casey))
- Document creating user justfile recipe aliases ([#1005](https://github.com/casey/just/pull/1005) by [casey](https://github.com/casey))
- Fix readme typo ([#1004](https://github.com/casey/just/pull/1004) by [0xflotus](https://github.com/0xflotus))
- Add packaging status table to readme ([#1003](https://github.com/casey/just/pull/1003) by [casey](https://github.com/casey))
- Reword `sh` not found error messages ([#1002](https://github.com/casey/just/pull/1002) by [hdhoang](https://github.com/hdhoang))
- Only pass +crt-static to cargo build ([#997](https://github.com/casey/just/pull/997) by [casey](https://github.com/casey))
- Stop using tabs in justfile in editorconfig ([#996](https://github.com/casey/just/pull/996) by [casey](https://github.com/casey))
- Use consistent rustflags formatting ([#994](https://github.com/casey/just/pull/994) by [casey](https://github.com/casey))
- Use `cargo build` instead of `cargo rustc` ([#993](https://github.com/casey/just/pull/993) by [casey](https://github.com/casey))
- Don't skip variables in variable iterator ([#991](https://github.com/casey/just/pull/991) by [casey](https://github.com/casey))
- Remove deprecated equals error ([#985](https://github.com/casey/just/pull/985) by [casey](https://github.com/casey))
[0.10.2](https://github.com/casey/just/releases/tag/0.10.2) - 2021-9-26
-----------------------------------------------------------------------
### Added
- Implement regular expression match conditionals ([#970](https://github.com/casey/just/pull/970) by [casey](https://github.com/casey))
### Misc
- Add detailed instructions for installing prebuilt binaries ([#978](https://github.com/casey/just/pull/978) by [casey](https://github.com/casey))
- Improve readme package table formatting ([#977](https://github.com/casey/just/pull/977) by [casey](https://github.com/casey))
- Add conda package to README ([#976](https://github.com/casey/just/pull/976) by [kellpossible](https://github.com/kellpossible))
- Change MSRV to 1.46.0 ([#968](https://github.com/casey/just/pull/968) by [casey](https://github.com/casey))
- Use stable rustfmt instead of nightly ([#967](https://github.com/casey/just/pull/967) by [casey](https://github.com/casey))
- Fix readme typo: FOO → WORLD ([#964](https://github.com/casey/just/pull/964) by [casey](https://github.com/casey))
- Reword Emacs section in readme ([#962](https://github.com/casey/just/pull/962) by [casey](https://github.com/casey))
- Mention justl mode for Emacs ([#961](https://github.com/casey/just/pull/961) by [psibi](https://github.com/psibi))
[0.10.1](https://github.com/casey/just/releases/tag/0.10.1) - 2021-8-27
-----------------------------------------------------------------------
### Added
- Add flags for specifying name and path to environment file ([#941](https://github.com/casey/just/pull/941) by [Celeo](https://github.com/Celeo))
### Misc
- Fix error message tests for Alpine Linux ([#956](https://github.com/casey/just/pull/956) by [casey](https://github.com/casey))
- Bump `target` version to 2.0 ([#957](https://github.com/casey/just/pull/957) by [casey](https://github.com/casey))
- Mention `tree-sitter-just` in readme ([#951](https://github.com/casey/just/pull/951) by [casey](https://github.com/casey))
- Document release RSS feed in readme ([#950](https://github.com/casey/just/pull/950) by [casey](https://github.com/casey))
- Add installation instructions for Gentoo Linux ([#946](https://github.com/casey/just/pull/946) by [dm9pZCAq](https://github.com/dm9pZCAq))
- Make GitHub Actions instructions more prominent ([#944](https://github.com/casey/just/pull/944) by [casey](https://github.com/casey))
- Wrap `--help` text to terminal width ([#940](https://github.com/casey/just/pull/940) by [casey](https://github.com/casey))
- Add `.justfile` to sublime syntax file_extensions ([#938](https://github.com/casey/just/pull/938) by [casey](https://github.com/casey))
- Suggest using `~/.global.justfile` instead of `~/.justfile` ([#937](https://github.com/casey/just/pull/937) by [casey](https://github.com/casey))
- Update man page ([#935](https://github.com/casey/just/pull/935) by [casey](https://github.com/casey))
[0.10.0](https://github.com/casey/just/releases/tag/0.10.0) - 2021-8-2
----------------------------------------------------------------------
### Changed
- Warn if `.env` file is loaded in `dotenv-load` isn't explicitly set ([#925](https://github.com/casey/just/pull/925) by [casey](https://github.com/casey))
### Added
- Add `--changelog` subcommand ([#932](https://github.com/casey/just/pull/932) by [casey](https://github.com/casey))
- Support `.justfile` as an alternative to `justfile` ([#931](https://github.com/casey/just/pull/931) by [casey](https://github.com/casey))
### Misc
- Use cargo-limit for all recipes ([#928](https://github.com/casey/just/pull/928) by [casey](https://github.com/casey))
- Fix colors ([#927](https://github.com/casey/just/pull/927) by [casey](https://github.com/casey))
- Use ColorDisplay trait to print objects to the terminal ([#926](https://github.com/casey/just/pull/926) by [casey](https://github.com/casey))
- Deduplicate recipe parsing ([#923](https://github.com/casey/just/pull/923) by [casey](https://github.com/casey))
- Move subcommand functions into Subcommand ([#918](https://github.com/casey/just/pull/918) by [casey](https://github.com/casey))
- Check GitHub Actions workflow with actionlint ([#921](https://github.com/casey/just/pull/921) by [casey](https://github.com/casey))
- Add loader and refactor errors ([#917](https://github.com/casey/just/pull/917) by [casey](https://github.com/casey))
- Rename: Module → Ast ([#915](https://github.com/casey/just/pull/915) by [casey](https://github.com/casey))
[0.9.9](https://github.com/casey/just/releases/tag/0.9.9) - 2021-7-22
---------------------------------------------------------------------
### Added
- Add subsequent dependencies ([#820](https://github.com/casey/just/pull/820) by [casey](https://github.com/casey))
- Implement `else if` chaining ([#910](https://github.com/casey/just/pull/910) by [casey](https://github.com/casey))
### Fixed
- Fix circular variable dependency error message ([#909](https://github.com/casey/just/pull/909) by [casey](https://github.com/casey))
### Misc
- Improve readme ([#904](https://github.com/casey/just/pull/904) by [mtsknn](https://github.com/mtsknn))
- Add screenshot to readme ([#911](https://github.com/casey/just/pull/911) by [casey](https://github.com/casey))
- Add install instructions for Fedora Linux ([#898](https://github.com/casey/just/pull/898) by [olivierlemasle](https://github.com/olivierlemasle))
- Fix readme typos ([#903](https://github.com/casey/just/pull/903) by [rokf](https://github.com/rokf))
- Actually fix release tagging and publish changelog with releases ([#901](https://github.com/casey/just/pull/901) by [casey](https://github.com/casey))
- Fix broken prerelease tagging ([#900](https://github.com/casey/just/pull/900) by [casey](https://github.com/casey))
- Use string value for ref-type check ([#897](https://github.com/casey/just/pull/897) by [casey](https://github.com/casey))
[0.9.8](https://github.com/casey/just/releases/tag/0.9.8) - 2021-7-3
--------------------------------------------------------------------
### Misc
- Fix changelog formatting ([#894](https://github.com/casey/just/pull/894) by [casey](https://github.com/casey))
- Only run install script on CI for non-releases ([#895](https://github.com/casey/just/pull/895) by [casey](https://github.com/casey))
[0.9.7](https://github.com/casey/just/releases/tag/0.9.7) - 2021-7-3
--------------------------------------------------------------------
### Added
- Add string manipulation functions ([#888](https://github.com/casey/just/pull/888) by [terror](https://github.com/terror))
### Misc
- Remove test-utilities crate ([#892](https://github.com/casey/just/pull/892) by [casey](https://github.com/casey))
- Remove outdated note in `Cargo.toml` ([#891](https://github.com/casey/just/pull/891) by [casey](https://github.com/casey))
- Link to GitHub release pages in changelog ([#886](https://github.com/casey/just/pull/886) by [casey](https://github.com/casey))
[0.9.6](https://github.com/casey/just/releases/tag/0.9.6) - 2021-6-24
---------------------------------------------------------------------
### Added
- Add `clean` function for simplifying paths ([#883](https://github.com/casey/just/pull/883) by [casey](https://github.com/casey))
- Add `join` function for joining paths ([#882](https://github.com/casey/just/pull/882) by [casey](https://github.com/casey))
- Add path manipulation functions ([#872](https://github.com/casey/just/pull/872) by [TonioGela](https://github.com/TonioGela))
### Misc
- Add `file_extensions` to Sublime syntax file ([#878](https://github.com/casey/just/pull/878) by [Frederick888](https://github.com/Frederick888))
- Document path manipulation functions in readme ([#877](https://github.com/casey/just/pull/877) by [casey](https://github.com/casey))
[0.9.5](https://github.com/casey/just/releases/tag/0.9.5) - 2021-6-12
---------------------------------------------------------------------
### Added
- Add `--unstable` flag ([#869](https://github.com/casey/just/pull/869) by [casey](https://github.com/casey))
- Add Sublime Text syntax file ([#864](https://github.com/casey/just/pull/864) by [casey](https://github.com/casey))
- Add `--fmt` subcommand ([#837](https://github.com/casey/just/pull/837) by [vglfr](https://github.com/vglfr))
### Misc
- Mention doniogela.dev/just/ in readme ([#866](https://github.com/casey/just/pull/866) by [casey](https://github.com/casey))
- Mention that vim-just is now available from vim-polyglot ([#865](https://github.com/casey/just/pull/865) by [casey](https://github.com/casey))
- Mention `--list-heading` newline behavior ([#860](https://github.com/casey/just/pull/860) by [casey](https://github.com/casey))
- Check for `rg` in `bin/forbid` ([#859](https://github.com/casey/just/pull/859) by [casey](https://github.com/casey))
- Document that variables are not exported to backticks in the same scope ([#856](https://github.com/casey/just/pull/856) by [casey](https://github.com/casey))
- Remove `dotenv_load` from tests ([#853](https://github.com/casey/just/pull/853) by [casey](https://github.com/casey))
- Remove `v` prefix from version ([#850](https://github.com/casey/just/pull/850) by [casey](https://github.com/casey))
- Improve install script ([#847](https://github.com/casey/just/pull/847) by [casey](https://github.com/casey))
- Move pages assets back to `docs` ([#846](https://github.com/casey/just/pull/846) by [casey](https://github.com/casey))
- Move pages assets to `www` ([#845](https://github.com/casey/just/pull/845) by [casey](https://github.com/casey))
[0.9.4](https://github.com/casey/just/releases/tag/v0.9.4) - 2021-5-27
----------------------------------------------------------------------
### Misc
- Release `aarch64-unknown-linux-gnu` binaries ([#843](https://github.com/casey/just/pull/843) by [casey](https://github.com/casey))
- Add `$` to non-default parameter grammar ([#839](https://github.com/casey/just/pull/839) by [casey](https://github.com/casey))
- Add `$` to parameter grammar ([#838](https://github.com/casey/just/pull/838) by [NoahTheDuke](https://github.com/NoahTheDuke))
- Fix readme links ([#836](https://github.com/casey/just/pull/836) by [casey](https://github.com/casey))
- Add `vim-just` installation instructions to readme ([#835](https://github.com/casey/just/pull/835) by [casey](https://github.com/casey))
- Refactor shebang handling ([#833](https://github.com/casey/just/pull/833) by [casey](https://github.com/casey))
[0.9.3](https://github.com/casey/just/releases/tag/v0.9.3) - 2021-5-16
----------------------------------------------------------------------
### Added
- Add shebang support for 'cmd.exe' ([#828](https://github.com/casey/just/pull/828) by [pansila](https://github.com/pansila))
- Add `.exe` to powershell scripts ([#826](https://github.com/casey/just/pull/826) by [sigoden](https://github.com/sigoden))
- Add the `--command` subcommand ([#824](https://github.com/casey/just/pull/824) by [casey](https://github.com/casey))
### Fixed
- Fix bang lexing and placate clippy ([#821](https://github.com/casey/just/pull/821) by [casey](https://github.com/casey))
### Misc
- Fixed missing close apostrophe in GRAMMAR.md ([#830](https://github.com/casey/just/pull/830) by [SOF3](https://github.com/SOF3))
- Make 'else' keyword in grammar ([#829](https://github.com/casey/just/pull/829) by [SOF3](https://github.com/SOF3))
- Add forbid script ([#827](https://github.com/casey/just/pull/827) by [casey](https://github.com/casey))
- Remove `summary` feature ([#823](https://github.com/casey/just/pull/823) by [casey](https://github.com/casey))
- Document that just is now in Arch official repo ([#814](https://github.com/casey/just/pull/814) by [svenstaro](https://github.com/svenstaro))
- Fix changelog years ([#813](https://github.com/casey/just/pull/813) by [casey](https://github.com/casey))
[0.9.2](https://github.com/casey/just/releases/tag/v0.9.2) - 2021-5-02
----------------------------------------------------------------------
### Fixed
- Pass evaluated arguments as positional arguments ([#810](https://github.com/casey/just/pull/810) by [casey](https://github.com/casey))
[0.9.1](https://github.com/casey/just/releases/tag/v0.9.1) - 2021-4-24
----------------------------------------------------------------------
### Added
- Change `--eval` to print variable value only ([#806](https://github.com/casey/just/pull/806) by [casey](https://github.com/casey))
- Add `positional-arguments` setting ([#804](https://github.com/casey/just/pull/804) by [casey](https://github.com/casey))
- Allow filtering variables to evaluate ([#795](https://github.com/casey/just/pull/795) by [casey](https://github.com/casey))
### Changed
- Reform and improve string literals ([#793](https://github.com/casey/just/pull/793) by [casey](https://github.com/casey))
- Allow evaluating justfiles with no recipes ([#794](https://github.com/casey/just/pull/794) by [casey](https://github.com/casey))
- Unify string lexing ([#790](https://github.com/casey/just/pull/790) by [casey](https://github.com/casey))
### Misc
- Test multi-line strings in interpolation ([#789](https://github.com/casey/just/pull/789) by [casey](https://github.com/casey))
- Add shell setting examples to README ([#787](https://github.com/casey/just/pull/787) by [casey](https://github.com/casey))
- Disable .env warning for now ([#786](https://github.com/casey/just/pull/786) by [casey](https://github.com/casey))
- Warn if `.env` file loaded and `dotenv-load` unset ([#784](https://github.com/casey/just/pull/784) by [casey](https://github.com/casey))
[0.9.0](https://github.com/casey/just/releases/tag/v0.9.0) - 2021-3-28
----------------------------------------------------------------------
### Changed
- Turn `=` deprecation warning into a hard error ([#780](https://github.com/casey/just/pull/780) by [casey](https://github.com/casey))
[0.8.7](https://github.com/casey/just/releases/tag/v0.8.7) - 2021-3-28
----------------------------------------------------------------------
### Added
- Add `dotenv-load` setting ([#778](https://github.com/casey/just/pull/778) by [casey](https://github.com/casey))
### Misc
- Change publish recipe to use stable rust ([#777](https://github.com/casey/just/pull/777) by [casey](https://github.com/casey))
[0.8.6](https://github.com/casey/just/releases/tag/v0.8.6) - 2021-3-28
----------------------------------------------------------------------
### Added
- Add just_executable() function ([#775](https://github.com/casey/just/pull/775) by [bew](https://github.com/bew))
- Prefix parameters with `$` to export to environment ([#773](https://github.com/casey/just/pull/773) by [casey](https://github.com/casey))
- Add `set export` to export all variables as environment variables ([#767](https://github.com/casey/just/pull/767) by [casey](https://github.com/casey))
### Changed
- Suppress all output to stderr when `--quiet` ([#771](https://github.com/casey/just/pull/771) by [casey](https://github.com/casey))
### Misc
- Improve chooser invocation error message ([#772](https://github.com/casey/just/pull/772) by [casey](https://github.com/casey))
- De-emphasize cmd.exe in readme ([#768](https://github.com/casey/just/pull/768) by [casey](https://github.com/casey))
- Fix warnings ([#770](https://github.com/casey/just/pull/770) by [casey](https://github.com/casey))
[0.8.5](https://github.com/casey/just/releases/tag/v0.8.5) - 2021-3-24
----------------------------------------------------------------------
### Added
- Allow escaping double braces with `{{{{` ([#765](https://github.com/casey/just/pull/765) by [casey](https://github.com/casey))
### Misc
- Reorganize readme to highlight editor support ([#764](https://github.com/casey/just/pull/764) by [casey](https://github.com/casey))
- Add categories and keywords to Cargo manifest ([#763](https://github.com/casey/just/pull/763) by [casey](https://github.com/casey))
- Fix command output in readme ([#760](https://github.com/casey/just/pull/760) by [vvv](https://github.com/vvv))
- Note Emacs package `just-mode` in readme ([#759](https://github.com/casey/just/pull/759) by [leon-barrett](https://github.com/leon-barrett))
- Note shebang line splitting inconsistency in readme ([#757](https://github.com/casey/just/pull/757) by [casey](https://github.com/casey))
[0.8.4](https://github.com/casey/just/releases/tag/v0.8.4) - 2021-2-9
---------------------------------------------------------------------
### Added
- Add options to control list formatting ([#753](https://github.com/casey/just/pull/753) by [casey](https://github.com/casey))
### Misc
- Document how to change the working directory in a recipe ([#752](https://github.com/casey/just/pull/752) by [casey](https://github.com/casey))
- Implement `Default` for `Table` ([#748](https://github.com/casey/just/pull/748) by [casey](https://github.com/casey))
- Add Alpine Linux package to readme ([#736](https://github.com/casey/just/pull/736) by [jirutka](https://github.com/jirutka))
- Update to actions/cache@v2 ([#742](https://github.com/casey/just/pull/742) by [zyctree](https://github.com/zyctree))
- Add link in readme to GitHub Action ([#729](https://github.com/casey/just/pull/729) by [rossmacarthur](https://github.com/rossmacarthur))
- Add docs for justfile() and justfile_directory() ([#726](https://github.com/casey/just/pull/726) by [rminderhoud](https://github.com/rminderhoud))
- Fix CI ([#727](https://github.com/casey/just/pull/727) by [casey](https://github.com/casey))
- Improve readme ([#725](https://github.com/casey/just/pull/725) by [casey](https://github.com/casey))
- Replace saythanks.io link with malto: link ([#723](https://github.com/casey/just/pull/723) by [casey](https://github.com/casey))
- Update man page to v0.8.3 ([#720](https://github.com/casey/just/pull/720) by [casey](https://github.com/casey))
[0.8.3](https://github.com/casey/just/releases/tag/v0.8.3) - 2020-10-27
-----------------------------------------------------------------------
### Added
- Allow ignoring line endings inside delimiters ([#717](https://github.com/casey/just/pull/717) by [casey](https://github.com/casey))
[0.8.2](https://github.com/casey/just/releases/tag/v0.8.2) - 2020-10-26
-----------------------------------------------------------------------
### Added
- Add conditional expressions ([#714](https://github.com/casey/just/pull/714) by [casey](https://github.com/casey))
### Fixed
- Allow completing variables and recipes after `--set` in zsh completion script ([#697](https://github.com/casey/just/pull/697) by [heyrict](https://github.com/heyrict))
### Misc
- Add Parser::forbid ([#712](https://github.com/casey/just/pull/712) by [casey](https://github.com/casey))
- Automatically track expected tokens while parsing ([#711](https://github.com/casey/just/pull/711) by [casey](https://github.com/casey))
- Document feature flags in Cargo.toml ([#709](https://github.com/casey/just/pull/709) by [casey](https://github.com/casey))
[0.8.1](https://github.com/casey/just/releases/tag/v0.8.1) - 2020-10-15
-----------------------------------------------------------------------
### Changed
- Allow choosing multiple recipes to run ([#700](https://github.com/casey/just/pull/700) by [casey](https://github.com/casey))
- Complete recipes in bash completion script ([#685](https://github.com/casey/just/pull/685) by [vikesh-raj](https://github.com/vikesh-raj))
- Complete recipes names in PowerShell completion script ([#651](https://github.com/casey/just/pull/651) by [Insomniak47](https://github.com/Insomniak47))
### Misc
- Add FreeBSD port to readme ([#705](https://github.com/casey/just/pull/705) by [casey](https://github.com/casey))
- Placate clippy ([#698](https://github.com/casey/just/pull/698) by [casey](https://github.com/casey))
- Fix build fix ([#693](https://github.com/casey/just/pull/693) by [casey](https://github.com/casey))
- Fix readme documentation for ignoring errors ([#692](https://github.com/casey/just/pull/692) by [kenden](https://github.com/kenden))
[0.8.0](https://github.com/casey/just/releases/tag/v0.8.0) - 2020-10-3
----------------------------------------------------------------------
### Breaking
- Allow suppressing failures with `-` prefix ([#687](https://github.com/casey/just/pull/687) by [iwillspeak](https://github.com/iwillspeak))
### Misc
- Document how to ignore errors with `-` in readme ([#690](https://github.com/casey/just/pull/690) by [casey](https://github.com/casey))
- Install BSD Tar on GitHub Actions to fix CI errors ([#689](https://github.com/casey/just/pull/689) by [casey](https://github.com/casey))
- Move separate quiet config value to verbosity ([#686](https://github.com/casey/just/pull/686) by [Celeo](https://github.com/Celeo))
[0.7.3](https://github.com/casey/just/releases/tag/v0.7.3) - 2020-9-17
----------------------------------------------------------------------
### Added
- Add the `--choose` subcommand ([#680](https://github.com/casey/just/pull/680) by [casey](https://github.com/casey))
### Misc
- Combine integration tests into single binary ([#679](https://github.com/casey/just/pull/679) by [casey](https://github.com/casey))
- Document `--unsorted` flag in readme ([#672](https://github.com/casey/just/pull/672) by [casey](https://github.com/casey))
[0.7.2](https://github.com/casey/just/releases/tag/v0.7.2) - 2020-8-23
----------------------------------------------------------------------
### Added
- Add option to print recipes in source order ([#669](https://github.com/casey/just/pull/669) by [casey](https://github.com/casey))
### Misc
- Mention Linux, MacOS and Windows support in readme ([#666](https://github.com/casey/just/pull/666) by [casey](https://github.com/casey))
- Add list highlighting nice features to readme ([#664](https://github.com/casey/just/pull/664) by [casey](https://github.com/casey))
[0.7.1](https://github.com/casey/just/releases/tag/v0.7.1) - 2020-7-19
----------------------------------------------------------------------
### Fixed
- Search for `.env` file from working directory ([#661](https://github.com/casey/just/pull/661) by [casey](https://github.com/casey))
### Misc
- Move link-time optimization config into `Cargo.toml` ([#658](https://github.com/casey/just/pull/658) by [casey](https://github.com/casey))
[0.7.0](https://github.com/casey/just/releases/tag/v0.7.0) - 2020-7-16
----------------------------------------------------------------------
### Breaking
- Skip `.env` items which are set in environment ([#656](https://github.com/casey/just/pull/656) by [casey](https://github.com/casey))
### Misc
- Mark tags that start with `v` as releases ([#654](https://github.com/casey/just/pull/654) by [casey](https://github.com/casey))
[0.6.1](https://github.com/casey/just/releases/tag/v0.6.1) - 2020-6-28
----------------------------------------------------------------------
### Changed
- Only use `cygpath` on shebang if it contains `/` ([#652](https://github.com/casey/just/pull/652) by [casey](https://github.com/casey))
[0.6.0](https://github.com/casey/just/releases/tag/v0.6.0) - 2020-6-18
----------------------------------------------------------------------
### Changed
- Ignore '@' returned from interpolation evaluation ([#636](https://github.com/casey/just/pull/636) by [rjsberry](https://github.com/rjsberry))
- Strip leading spaces after line continuation ([#635](https://github.com/casey/just/pull/635) by [casey](https://github.com/casey))
### Added
- Add variadic parameters that accept zero or more arguments ([#645](https://github.com/casey/just/pull/645) by [rjsberry](https://github.com/rjsberry))
### Misc
- Clarify variadic parameter default values ([#646](https://github.com/casey/just/pull/646) by [rjsberry](https://github.com/rjsberry))
- Add keybase example justfile ([#640](https://github.com/casey/just/pull/640) by [blaggacao](https://github.com/blaggacao))
- Strip trailing whitespace in `examples/pre-commit.just` ([#644](https://github.com/casey/just/pull/644) by [casey](https://github.com/casey))
- Test that example justfiles successfully parse ([#643](https://github.com/casey/just/pull/643) by [casey](https://github.com/casey))
- Link example justfiles in readme ([#641](https://github.com/casey/just/pull/641) by [casey](https://github.com/casey))
- Add example justfile ([#639](https://github.com/casey/just/pull/639) by [blaggacao](https://github.com/blaggacao))
- Document how to run recipes after another recipe ([#630](https://github.com/casey/just/pull/630) by [casey](https://github.com/casey))
[0.5.11](https://github.com/casey/just/releases/tag/v0.5.11) - 2020-5-23
------------------------------------------------------------------------
### Added
- Don't load `.env` file when `--no-dotenv` is passed ([#627](https://github.com/casey/just/pull/627) by [casey](https://github.com/casey))
### Changed
- Complete recipe names in fish completion script ([#625](https://github.com/casey/just/pull/625) by [tyehle](https://github.com/tyehle))
- Suggest aliases for unknown recipes ([#624](https://github.com/casey/just/pull/624) by [Celeo](https://github.com/Celeo))
[0.5.10](https://github.com/casey/just/releases/tag/v0.5.10) - 2020-3-18
------------------------------------------------------------------------
[0.5.9](https://github.com/casey/just/releases/tag/v0.5.9) - 2020-3-18
----------------------------------------------------------------------
### Added
- Update zsh completion file ([#606](https://github.com/casey/just/pull/606) by [heyrict](https://github.com/heyrict))
- Add `--variables` subcommand that prints variable names ([#608](https://github.com/casey/just/pull/608) by [casey](https://github.com/casey))
- Add github pages site with improved install script ([#597](https://github.com/casey/just/pull/597) by [casey](https://github.com/casey))
### Fixed
- Don't require justfile to print completions ([#596](https://github.com/casey/just/pull/596) by [casey](https://github.com/casey))
### Misc
- Only build for linux on docs.rs ([#611](https://github.com/casey/just/pull/611) by [casey](https://github.com/casey))
- Trim completions and ensure final newline ([#609](https://github.com/casey/just/pull/609) by [casey](https://github.com/casey))
- Trigger build on pushes and pull requests ([#607](https://github.com/casey/just/pull/607) by [casey](https://github.com/casey))
- Document behavior of `@` on shebang recipes ([#602](https://github.com/casey/just/pull/602) by [casey](https://github.com/casey))
- Add `.nojekyll` file to github pages site ([#599](https://github.com/casey/just/pull/599) by [casey](https://github.com/casey))
- Add `:` favicon ([#598](https://github.com/casey/just/pull/598) by [casey](https://github.com/casey))
- Delete old CI configuration and update build badge ([#595](https://github.com/casey/just/pull/595) by [casey](https://github.com/casey))
- Add download count badge to readme ([#594](https://github.com/casey/just/pull/594) by [casey](https://github.com/casey))
- Wrap comments at 80 characters ([#593](https://github.com/casey/just/pull/593) by [casey](https://github.com/casey))
- Use unstable rustfmt configuration options ([#592](https://github.com/casey/just/pull/592) by [casey](https://github.com/casey))
[0.5.8](https://github.com/casey/just/releases/tag/v0.5.8) - 2020-1-28
----------------------------------------------------------------------
### Changed
- Only use `cygpath` on windows if present ([#586](https://github.com/casey/just/pull/586) by [casey](https://github.com/casey))
### Misc
- Improve comments in justfile ([#588](https://github.com/casey/just/pull/588) by [casey](https://github.com/casey))
- Remove unused dependencies ([#587](https://github.com/casey/just/pull/587) by [casey](https://github.com/casey))
[0.5.7](https://github.com/casey/just/releases/tag/v0.5.7) - 2020-1-28
----------------------------------------------------------------------
### Misc
- Don't include directories in release archive ([#583](https://github.com/casey/just/pull/583) by [casey](https://github.com/casey))
[0.5.6](https://github.com/casey/just/releases/tag/v0.5.6) - 2020-1-28
----------------------------------------------------------------------
### Misc
- Build and upload release artifacts from GitHub Actions ([#581](https://github.com/casey/just/pull/581) by [casey](https://github.com/casey))
- List solus package in readme ([#579](https://github.com/casey/just/pull/579) by [casey](https://github.com/casey))
- Expand use of GitHub Actions ([#580](https://github.com/casey/just/pull/580) by [casey](https://github.com/casey))
- Fix readme typo: interpetation -> interpretation ([#578](https://github.com/casey/just/pull/578) by [Plommonsorbet](https://github.com/Plommonsorbet))
[0.5.5](https://github.com/casey/just/releases/tag/v0.5.5) - 2020-1-15
----------------------------------------------------------------------
### Added
- Generate shell completion scripts with `--completions` ([#572](https://github.com/casey/just/pull/572) by [casey](https://github.com/casey))
### Misc
- Check long lines and FIXME/TODO on CI ([#575](https://github.com/casey/just/pull/575) by [casey](https://github.com/casey))
- Add additional continuous integration checks ([#574](https://github.com/casey/just/pull/574) by [casey](https://github.com/casey))
[0.5.4](https://github.com/casey/just/releases/tag/v0.5.4) - 2019-12-25
-----------------------------------------------------------------------
### Added
- Add `justfile_directory()` and `justfile()` ([#569](https://github.com/casey/just/pull/569) by [casey](https://github.com/casey))
### Misc
- Add table of package managers that include just to readme ([#568](https://github.com/casey/just/pull/568) by [casey](https://github.com/casey))
- Remove yaourt AUR helper from readme ([#567](https://github.com/casey/just/pull/567) by [ky0n](https://github.com/ky0n))
- Fix regression in error message color printing ([#566](https://github.com/casey/just/pull/566) by [casey](https://github.com/casey))
- Reform indentation handling ([#565](https://github.com/casey/just/pull/565) by [casey](https://github.com/casey))
- Update Cargo.lock with new version ([#564](https://github.com/casey/just/pull/564) by [casey](https://github.com/casey))
[0.5.3](https://github.com/casey/just/releases/tag/v0.5.3) - 2019-12-11
-----------------------------------------------------------------------
### Misc
- Assert that lexer advances over entire input ([#560](https://github.com/casey/just/pull/560) by [casey](https://github.com/casey))
- Fix typo: `chracter` -> `character` ([#561](https://github.com/casey/just/pull/561) by [casey](https://github.com/casey))
- Improve pre-publish check ([#562](https://github.com/casey/just/pull/562) by [casey](https://github.com/casey))
[0.5.2](https://github.com/casey/just/releases/tag/v0.5.2) - 2019-12-7
----------------------------------------------------------------------
### Added
- Add flags to set and clear shell arguments ([#551](https://github.com/casey/just/pull/551) by [casey](https://github.com/casey))
- Allow passing arguments to dependencies ([#555](https://github.com/casey/just/pull/555) by [casey](https://github.com/casey))
### Misc
- Un-implement Deref for Table ([#546](https://github.com/casey/just/pull/546) by [casey](https://github.com/casey))
- Resolve recipe dependencies ([#547](https://github.com/casey/just/pull/547) by [casey](https://github.com/casey))
- Resolve alias targets ([#548](https://github.com/casey/just/pull/548) by [casey](https://github.com/casey))
- Remove unnecessary type argument to Alias ([#549](https://github.com/casey/just/pull/549) by [casey](https://github.com/casey))
- Resolve functions ([#550](https://github.com/casey/just/pull/550) by [casey](https://github.com/casey))
- Reform scope and binding ([#556](https://github.com/casey/just/pull/556) by [casey](https://github.com/casey))
[0.5.1](https://github.com/casey/just/releases/tag/v0.5.1) - 2019-11-20
-----------------------------------------------------------------------
### Added
- Add `--init` subcommand ([#541](https://github.com/casey/just/pull/541) by [casey](https://github.com/casey))
### Changed
- Avoid fs::canonicalize ([#539](https://github.com/casey/just/pull/539) by [casey](https://github.com/casey))
### Misc
- Mention `set shell` as alternative to installing `sh` ([#533](https://github.com/casey/just/pull/533) by [casey](https://github.com/casey))
- Refactor Compilation error to contain a Token ([#535](https://github.com/casey/just/pull/535) by [casey](https://github.com/casey))
- Move lexer comment ([#536](https://github.com/casey/just/pull/536) by [casey](https://github.com/casey))
- Add missing `--init` test ([#543](https://github.com/casey/just/pull/543) by [casey](https://github.com/casey))
[0.5.0](https://github.com/casey/just/releases/tag/v0.5.0) - 2019-11-12
-----------------------------------------------------------------------
### Added
- Add `set shell := [...]` to grammar ([#526](https://github.com/casey/just/pull/526) by [casey](https://github.com/casey))
- Add `shell` setting ([#525](https://github.com/casey/just/pull/525) by [casey](https://github.com/casey))
- Document settings in readme ([#527](https://github.com/casey/just/pull/527) by [casey](https://github.com/casey))
### Changed
- Reform positional argument parsing ([#523](https://github.com/casey/just/pull/523) by [casey](https://github.com/casey))
- Highlight echoed recipe lines in bold by default ([#512](https://github.com/casey/just/pull/512) by [casey](https://github.com/casey))
### Misc
- Gargantuan refactor ([#522](https://github.com/casey/just/pull/522) by [casey](https://github.com/casey))
- Move subcommand execution into Subcommand ([#514](https://github.com/casey/just/pull/514) by [casey](https://github.com/casey))
- Move `cd` out of Config::from_matches ([#513](https://github.com/casey/just/pull/513) by [casey](https://github.com/casey))
- Remove now-unnecessary borrow checker appeasement ([#511](https://github.com/casey/just/pull/511) by [casey](https://github.com/casey))
- Reform Parser ([#509](https://github.com/casey/just/pull/509) by [casey](https://github.com/casey))
- Note need to publish with nightly cargo ([#506](https://github.com/casey/just/pull/506) by [casey](https://github.com/casey))
[0.4.5](https://github.com/casey/just/releases/tag/v0.4.5) - 2019-10-31
-----------------------------------------------------------------------
### User-visible
### Changed
- Display alias with `--show NAME` if one exists ([#466](https://github.com/casey/just/pull/466) by [casey](https://github.com/casey))
### Documented
- Document multi-line constructs (for/if/while) ([#453](https://github.com/casey/just/pull/453) by [casey](https://github.com/casey))
- Generate man page with help2man ([#463](https://github.com/casey/just/pull/463) by [casey](https://github.com/casey))
- Add context to deprecation warnings ([#473](https://github.com/casey/just/pull/473) by [casey](https://github.com/casey))
- Improve messages for alias error messages ([#500](https://github.com/casey/just/pull/500) by [casey](https://github.com/casey))
### Misc
### Cleanup
- Update deprecated rust range patterns and clippy config ([#450](https://github.com/casey/just/pull/450) by [light4](https://github.com/light4))
- Make comments in common.rs lowercase ([#470](https://github.com/casey/just/pull/470) by [casey](https://github.com/casey))
- Use `pub(crate)` instead of `pub` ([#471](https://github.com/casey/just/pull/471) by [casey](https://github.com/casey))
- Hide summary functionality behind feature flag ([#472](https://github.com/casey/just/pull/472) by [casey](https://github.com/casey))
- Fix `summary` feature conditional compilation ([#475](https://github.com/casey/just/pull/475) by [casey](https://github.com/casey))
- Allow integration test cases to omit common values ([#480](https://github.com/casey/just/pull/480) by [casey](https://github.com/casey))
- Add `unindent()` for nicer integration test strings ([#481](https://github.com/casey/just/pull/481) by [casey](https://github.com/casey))
- Start pulling argument parsing out of run::run() ([#483](https://github.com/casey/just/pull/483) by [casey](https://github.com/casey))
- Add explicit `Subcommand` enum ([#484](https://github.com/casey/just/pull/484) by [casey](https://github.com/casey))
- Avoid using error code `1` in integration tests ([#486](https://github.com/casey/just/pull/486) by [casey](https://github.com/casey))
- Use more indented strings in integration tests ([#489](https://github.com/casey/just/pull/489) by [casey](https://github.com/casey))
- Refactor `run::run` and Config ([#490](https://github.com/casey/just/pull/490) by [casey](https://github.com/casey))
- Remove `misc.rs` ([#491](https://github.com/casey/just/pull/491) by [casey](https://github.com/casey))
- Remove unused `use` statements ([#497](https://github.com/casey/just/pull/497) by [casey](https://github.com/casey))
- Refactor lexer tests ([#498](https://github.com/casey/just/pull/498) by [casey](https://github.com/casey))
- Use constants instead of literals in arg parser ([#504](https://github.com/casey/just/pull/504) by [casey](https://github.com/casey))
### Infrastructure
- Add repository attribute to Cargo.toml ([#493](https://github.com/casey/just/pull/493) by [SOF3](https://github.com/SOF3))
- Check minimal version compatibility before publishing ([#487](https://github.com/casey/just/pull/487) by [casey](https://github.com/casey))
### Continuous Integration
- Disable FreeBSD builds ([#474](https://github.com/casey/just/pull/474) by [casey](https://github.com/casey))
- Use `bash` as shell for all integration tests ([#479](https://github.com/casey/just/pull/479) by [casey](https://github.com/casey))
- Don't install `dash` on Travis ([#482](https://github.com/casey/just/pull/482) by [casey](https://github.com/casey))
### Dependencies
- Use `tempfile` crate instead of `tempdir` ([#455](https://github.com/casey/just/pull/455) by [NickeZ](https://github.com/NickeZ))
- Bump clap dependency to 2.33.0 ([#458](https://github.com/casey/just/pull/458) by [NickeZ](https://github.com/NickeZ))
- Minimize dependency version requirements ([#461](https://github.com/casey/just/pull/461) by [casey](https://github.com/casey))
- Remove dependency on brev ([#462](https://github.com/casey/just/pull/462) by [casey](https://github.com/casey))
- Update dependencies ([#501](https://github.com/casey/just/pull/501) by [casey](https://github.com/casey))
[0.4.4](https://github.com/casey/just/releases/tag/v0.4.4) - 2019-06-02
-----------------------------------------------------------------------
### Changed
- Ignore file name case while searching for justfile ([#436](https://github.com/casey/just/pull/436) by [shevtsiv](https://github.com/shevtsiv))
### Added
- Display alias target with `--show` ([#443](https://github.com/casey/just/pull/443) by [casey](https://github.com/casey))
[0.4.3](https://github.com/casey/just/releases/tag/v0.4.3) - 2019-05-07
-----------------------------------------------------------------------
### Changed
- Deprecate `=` in assignments, aliases, and exports in favor of `:=` ([#413](https://github.com/casey/just/pull/413) by [casey](https://github.com/casey))
### Added
- Pass stdin handle to backtick process ([#409](https://github.com/casey/just/pull/409) by [casey](https://github.com/casey))
### Documented
- Fix readme command line ([#411](https://github.com/casey/just/pull/411) by [casey](https://github.com/casey))
- Typo: "command equivelant" -> "command equivalent" ([#418](https://github.com/casey/just/pull/418) by [casey](https://github.com/casey))
- Mention Make’s “phony target” workaround in the comparison ([#421](https://github.com/casey/just/pull/421) by [roryokane](https://github.com/roryokane))
- Add Void Linux install instructions to readme ([#423](https://github.com/casey/just/pull/423) by [casey](https://github.com/casey))
### Cleaned up or Refactored
- Remove stray source files ([#408](https://github.com/casey/just/pull/408) by [casey](https://github.com/casey))
- Replace some calls to brev crate ([#410](https://github.com/casey/just/pull/410) by [casey](https://github.com/casey))
- Lexer code deduplication and refactoring ([#414](https://github.com/casey/just/pull/414) by [casey](https://github.com/casey))
- Refactor and rename test macros ([#415](https://github.com/casey/just/pull/415) by [casey](https://github.com/casey))
- Move CompilationErrorKind into separate module ([#416](https://github.com/casey/just/pull/416) by [casey](https://github.com/casey))
- Remove `write_token_error_context` ([#417](https://github.com/casey/just/pull/417) by [casey](https://github.com/casey))
[0.4.2](https://github.com/casey/just/releases/tag/v0.4.2) - 2019-04-12
-----------------------------------------------------------------------
### Changed
- Regex-based lexer replaced with much nicer character-at-a-time lexer ([#406](https://github.com/casey/just/pull/406) by [casey](https://github.com/casey))
[0.4.1](https://github.com/casey/just/releases/tag/v0.4.1) - 2019-04-12
-----------------------------------------------------------------------
### Changed
- Make summary function non-generic ([#404](https://github.com/casey/just/pull/404) by [casey](https://github.com/casey))
[0.4.0](https://github.com/casey/just/releases/tag/v0.4.0) - 2019-04-12
-----------------------------------------------------------------------
### Added
- Add recipe aliases ([#390](https://github.com/casey/just/pull/390) by [ryloric](https://github.com/ryloric))
- Allow arbitrary expressions as default arguments ([#400](https://github.com/casey/just/pull/400) by [casey](https://github.com/casey))
- Add justfile summaries ([#399](https://github.com/casey/just/pull/399) by [casey](https://github.com/casey))
- Allow outer shebang lines so justfiles can be used as scripts ([#393](https://github.com/casey/just/pull/393) by [casey](https://github.com/casey))
- Allow `--justfile` without `--working-directory` ([#392](https://github.com/casey/just/pull/392) by [smonami](https://github.com/smonami))
- Add link to Chinese translation of readme by chinanf-boy ([#377](https://github.com/casey/just/pull/377) by [casey](https://github.com/casey))
### Changed
- Upgrade to Rust 2018 ([#394](https://github.com/casey/just/pull/394) by [casey](https://github.com/casey))
- Format the codebase with rustfmt ([#346](https://github.com/casey/just/pull/346) by [casey](https://github.com/casey))
[0.3.13](https://github.com/casey/just/releases/tag/v0.3.13) - 2018-11-06
-------------------------------------------------------------------------
### Added
- Print recipe signature if missing arguments ([#369](https://github.com/casey/just/pull/369) by [ladysamantha](https://github.com/ladysamantha))
- Add grandiloquent verbosity level that echos shebang recipes ([#348](https://github.com/casey/just/pull/348) by [casey](https://github.com/casey))
- Wait for child processes to finish ([#345](https://github.com/casey/just/pull/345) by [casey](https://github.com/casey))
- Improve invalid escape sequence error messages ([#328](https://github.com/casey/just/pull/328) by [casey](https://github.com/casey))
### Fixed
- Use PutBackN instead of PutBack in parser ([#364](https://github.com/casey/just/pull/364) by [casey](https://github.com/casey))
[0.3.12](https://github.com/casey/just/releases/tag/v0.3.12) - 2018-06-19
-------------------------------------------------------------------------
### Added
- Implemented invocation_directory function ([#323](https://github.com/casey/just/pull/323) by [casey](https://github.com/casey))
[0.3.11](https://github.com/casey/just/releases/tag/v0.3.11) - 2018-05-6
------------------------------------------------------------------------
### Fixed
- Fixed colors on windows ([#317](https://github.com/casey/just/pull/317) by [casey](https://github.com/casey))
[0.3.10](https://github.com/casey/just/releases/tag/v0.3.10) - 2018-3-19
------------------------------------------------------------------------
### Added
- Make .env vars available in env_var functions ([#310](https://github.com/casey/just/pull/310) by [casey](https://github.com/casey))
[0.3.8](https://github.com/casey/just/releases/tag/v0.3.8) - 2018-3-5
---------------------------------------------------------------------
### Added
- Add dotenv integration ([#306](https://github.com/casey/just/pull/306) by [casey](https://github.com/casey))
[0.3.7](https://github.com/casey/just/releases/tag/v0.3.7) - 2017-12-11
-----------------------------------------------------------------------
### Fixed
- Fix error if ! appears in comment ([#296](https://github.com/casey/just/pull/296) by [casey](https://github.com/casey))
[0.3.6](https://github.com/casey/just/releases/tag/v0.3.6) - 2017-12-11
-----------------------------------------------------------------------
### Fixed
- Lex CRLF line endings properly ([#292](https://github.com/casey/just/pull/292) by [casey](https://github.com/casey))
[0.3.5](https://github.com/casey/just/releases/tag/v0.3.5) - 2017-12-11
-----------------------------------------------------------------------
### Added
- Align doc-comments in `--list` output ([#273](https://github.com/casey/just/pull/273) by [casey](https://github.com/casey))
- Add `arch()`, `os()`, and `os_family()` functions ([#277](https://github.com/casey/just/pull/277) by [casey](https://github.com/casey))
- Add `env_var(key)` and `env_var_or_default(key, default)` functions ([#280](https://github.com/casey/just/pull/280) by [casey](https://github.com/casey))
[0.3.4](https://github.com/casey/just/releases/tag/v0.3.4) - 2017-10-06
-----------------------------------------------------------------------
### Added
- Do not evaluate backticks in assignments during dry runs ([#253](https://github.com/casey/just/pull/253) by [aoeu](https://github.com/aoeu))
### Changed
- Change license to CC0 going forward ([#270](https://github.com/casey/just/pull/270) by [casey](https://github.com/casey))
[0.3.1](https://github.com/casey/just/releases/tag/v0.3.1) - 2017-10-06
-----------------------------------------------------------------------
### Added
- Started keeping a changelog in CHANGELOG.md ([#220](https://github.com/casey/just/pull/220) by [casey](https://github.com/casey))
- Recipes whose names begin with an underscore will not appear in `--list` or `--summary` ([#229](https://github.com/casey/just/pull/229) by [casey](https://github.com/casey))
================================================
FILE: CONTRIBUTING.md
================================================
Contributing
============
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be licensed as in [LICENSE](LICENSE),
without any additional terms or conditions.
See [the readme](README.md#contributing) for contribution workflow suggestions.
================================================
FILE: Cargo.toml
================================================
[package]
name = "just"
version = "1.47.1"
authors = ["Casey Rodarmor <casey@rodarmor.com>"]
autotests = false
categories = ["command-line-utilities", "development-tools"]
description = "🤖 Just a command runner"
edition = "2024"
exclude = ["/book", "/icon.png", "/screenshot.png", "/www"]
homepage = "https://github.com/casey/just"
keywords = ["command-line", "task", "runner", "development", "utility"]
license = "CC0-1.0"
readme = "crates-io-readme.md"
repository = "https://github.com/casey/just"
rust-version = "1.85.0"
[workspace]
members = [".", "crates/*"]
[dependencies]
ansi_term = "0.12.0"
blake3 = { version = "1.5.0", features = ["rayon", "mmap"] }
camino = "1.0.4"
chrono = "0.4.38"
clap = { version = "4.0.0", features = ["derive", "env", "wrap_help"] }
clap_mangen = "0.2.20"
derive-where = "1.2.7"
dirs = "6.0.0"
dotenvy = "0.15"
edit-distance = "2.0.0"
heck = "0.5.0"
is_executable = "1.0.4"
lexiclean = "0.0.1"
libc = "0.2.0"
num_cpus = "1.15.0"
percent-encoding = "2.3.1"
rand = "0.10.0"
regex = "1.10.4"
rustversion = "1.0.18"
semver = "1.0.20"
serde = { version = "1.0.130", features = ["derive", "rc"] }
serde_json = "1.0.68"
sha2 = "0.10"
shellexpand = "3.1.0"
similar = { version = "2.1.0", features = ["unicode"] }
snafu = "0.9.0"
strum = { version = "0.28.0", features = ["derive"] }
target = "2.0.0"
tempfile = "3.0.0"
typed-arena = "2.0.1"
unicode-width = "0.2.0"
uuid = { version = "1.0.0", features = ["v4"] }
[target.'cfg(unix)'.dependencies]
nix = { version = "0.31.0", features = ["signal", "user", "fs"] }
[target.'cfg(windows)'.dependencies]
ctrlc = { version = "3.1.1", features = ["termination"] }
[dev-dependencies]
clap_complete = "=4.5.48"
pretty_assertions = "1.0.0"
temptree = "0.2.0"
which = "8.0.0"
[lints.rust]
mismatched_lifetime_syntaxes = "allow"
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(fuzzing)'] }
unreachable_pub = "deny"
[lints.clippy]
all = { level = "deny", priority = -1 }
arbitrary_source_item_ordering = "deny"
enum_glob_use = "allow"
ignore_without_reason = "allow"
needless_pass_by_value = "allow"
pedantic = { level = "deny", priority = -1 }
similar_names = "allow"
struct_excessive_bools = "allow"
struct_field_names = "allow"
too_many_arguments = "allow"
too_many_lines = "allow"
type_complexity = "allow"
undocumented_unsafe_blocks = "deny"
unnecessary_wraps = "allow"
wildcard_imports = "allow"
[lib]
doctest = false
[[bin]]
path = "src/main.rs"
name = "just"
test = false
# The public documentation is minimal and doesn't change between
# platforms, so we only build them for linux on docs.rs to save
# their build machines some cycles.
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[profile.release]
lto = true
codegen-units = 1
[[test]]
name = "integration"
path = "tests/lib.rs"
================================================
FILE: GRAMMAR.md
================================================
justfile grammar
================
Justfiles are processed by a mildly context-sensitive tokenizer
and a recursive descent parser. The grammar is LL(k), for an
unknown but hopefully reasonable value of k.
tokens
------
```
BACKTICK = `[^`]*`
INDENTED_BACKTICK = ```[^(```)]*```
COMMENT = #([^!].*)?$
DEDENT = emitted when indentation decreases
EOF = emitted at the end of the file
INDENT = emitted when indentation increases
LINE = emitted before a recipe line
NAME = [a-zA-Z_][a-zA-Z0-9_-]*
NEWLINE = \n|\r\n
RAW_STRING = '[^']*'
INDENTED_RAW_STRING = '''[^(''')]*'''
STRING = "[^"]*" # also processes \n \r \t \" \\ escapes
INDENTED_STRING = """[^(""")]*""" # also processes \n \r \t \" \\ escapes
LINE_PREFIX = @-|-@|@|-
TEXT = recipe text, only matches in a recipe body
```
grammar syntax
--------------
```
| alternation
() grouping
_? option (0 or 1 times)
_* repetition (0 or more times)
_+ repetition (1 or more times)
```
grammar
-------
```
justfile : item* EOF
item : alias
| assignment
| eol
| export
| import
| module
| recipe
| set
eol : NEWLINE
| COMMENT NEWLINE
alias : 'alias' NAME ':=' target eol
target : NAME ('::' NAME)*
assignment : NAME ':=' expression eol
export : 'export' assignment
set : 'set' setting eol
setting : 'allow-duplicate-recipes' boolean?
| 'allow-duplicate-variables' boolean?
| 'dotenv-filename' ':=' string
| 'dotenv-load' boolean?
| 'dotenv-path' ':=' string
| 'dotenv-required' boolean?
| 'export' boolean?
| 'fallback' boolean?
| 'ignore-comments' boolean?
| 'positional-arguments' boolean?
| 'script-interpreter' ':=' string_list
| 'quiet' boolean?
| 'shell' ':=' string_list
| 'tempdir' ':=' string
| 'unstable' boolean?
| 'windows-powershell' boolean?
| 'windows-shell' ':=' string_list
| 'working-directory' ':=' string
boolean : ':=' ('true' | 'false')
string_list : '[' string (',' string)* ','? ']'
import : 'import' '?'? string? eol
module : 'mod' '?'? NAME string? eol
expression : disjunct || expression
| disjunct
disjunct : conjunct && disjunct
| conjunct
conjunct : 'if' condition '{' expression '}' 'else' '{' expression '}'
| 'assert' '(' condition ',' expression ')'
| '/' expression
| value '/' expression
| value '+' expression
| value
condition : expression '==' expression
| expression '!=' expression
| expression '=~' expression
value : NAME '(' sequence? ')'
| BACKTICK
| INDENTED_BACKTICK
| NAME
| string
| '(' expression ')'
string : 'x'? STRING
| 'x'? INDENTED_STRING
| 'x'? RAW_STRING
| 'x'? INDENTED_RAW_STRING
sequence : expression ',' sequence
| expression ','?
recipe : attributes* '@'? NAME parameter* variadic? ':' dependencies eol body?
attributes : '[' attribute (',' attribute)* ']' eol
attribute : NAME
| NAME ':' string
| NAME '(' string (',' string)* ')'
parameter : '$'? NAME
| '$'? NAME '=' value
variadic : '*' parameter
| '+' parameter
dependencies : dependency* ('&&' dependency+)?
dependency : target
| '(' target expression* ')'
body : INDENT line+ DEDENT
line : LINE LINE_PREFIX? (TEXT | interpolation)+ NEWLINE
| NEWLINE
interpolation : '{{' expression '}}'
```
================================================
FILE: LICENSE
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: README.md
================================================
<div align=right>Table of Contents↗️</div>
<h1 align=center><code>just</code></h1>
<div align=center>
<a href=https://crates.io/crates/just>
<img src=https://img.shields.io/crates/v/just.svg alt="crates.io version">
</a>
<a href=https://github.com/casey/just/actions/workflows/ci.yaml>
<img src=https://github.com/casey/just/actions/workflows/ci.yaml/badge.svg alt="build status">
</a>
<a href=https://github.com/casey/just/releases>
<img src=https://img.shields.io/github/downloads/casey/just/total.svg alt=downloads>
</a>
<a href=https://discord.gg/ezYScXR>
<img src=https://img.shields.io/discord/695580069837406228?logo=discord alt="chat on discord">
</a>
<a href=mailto:casey@rodarmor.com?subject=Thanks%20for%20Just!>
<img src=https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg alt="say thanks">
</a>
</div>
<br>
`just` is a handy way to save and run project-specific commands.
This readme is also available as a [book](https://just.systems/man/en/). The
book reflects the latest release, whereas the
[readme on GitHub](https://github.com/casey/just/blob/master/README.md)
reflects latest master.
(中文文档在 [这里](https://github.com/casey/just/blob/master/README.中文.md),
快看过来!)
Commands, called recipes, are stored in a file called `justfile` with syntax
inspired by `make`:

You can then run them with `just RECIPE`:
```console
$ just test-all
cc *.c -o main
./test --all
Yay, all your tests passed!
```
`just` has a ton of useful features, and many improvements over `make`:
- `just` is a command runner, not a build system, so it avoids much of
[`make`'s complexity and idiosyncrasies](#what-are-the-idiosyncrasies-of-make-that-just-avoids).
No need for `.PHONY` recipes!
- Linux, MacOS, Windows, and other reasonable unices are supported with no
additional dependencies. (Although if your system doesn't have an `sh`,
you'll need to [choose a different shell](#shell).)
- Errors are specific and informative, and syntax errors are reported along
with their source context.
- Recipes can accept [command line arguments](#recipe-parameters).
- Wherever possible, errors are resolved statically. Unknown recipes and
circular dependencies are reported before anything runs.
- `just` [loads `.env` files](#dotenv-settings), making it easy to populate
environment variables.
- Recipes can be [listed from the command line](#listing-available-recipes).
- Command line completion scripts are
[available for most popular shells](#shell-completion-scripts).
- Recipes can be written in
[arbitrary languages](#shebang-recipes), like Python or NodeJS.
- `just` can be invoked from any subdirectory, not just the directory that
contains the `justfile`.
- And [much more](https://just.systems/man/en/)!
If you need help with `just` please feel free to open an issue or ping me on
[Discord](https://discord.gg/ezYScXR). Feature requests and bug reports are
always welcome!
Installation
------------
### Prerequisites
`just` should run on any system with a reasonable `sh`, including Linux, MacOS,
and the BSDs.
#### Windows
On Windows, `just` works with the `sh` provided by
[Git for Windows](https://git-scm.com),
[GitHub Desktop](https://desktop.github.com), or
[Cygwin](http://www.cygwin.com). After installation, `sh` must be available in
the `PATH` of the shell you want to invoke `just` from.
If you'd rather not install `sh`, you can use the `shell` setting to use the
shell of your choice.
Like PowerShell:
```just
# use PowerShell instead of sh:
set shell := ["powershell.exe", "-c"]
hello:
Write-Host "Hello, world!"
```
…or `cmd.exe`:
```just
# use cmd.exe instead of sh:
set shell := ["cmd.exe", "/c"]
list:
dir
```
You can also set the shell using command-line arguments. For example, to use
PowerShell, launch `just` with `--shell powershell.exe --shell-arg -c`.
(PowerShell is installed by default on Windows 7 SP1 and Windows Server 2008 R2
S1 and later, and `cmd.exe` is quite fiddly, so PowerShell is recommended for
most Windows users.)
### Packages
#### Cross-platform
<table>
<thead>
<tr>
<th>Package Manager</th>
<th>Package</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href=https://github.com/alexellis/arkade>arkade</a></td>
<td>just</td>
<td><code>arkade get just</code></td>
</tr>
<tr>
<td><a href=https://asdf-vm.com>asdf</a></td>
<td><a href=https://github.com/olofvndrhr/asdf-just>just</a></td>
<td>
<code>asdf plugin add just</code><br>
<code>asdf install just <version></code>
</td>
</tr>
<tr>
<td><a href=https://www.rust-lang.org>Cargo</a></td>
<td><a href=https://crates.io/crates/just>just</a></td>
<td><code>cargo install just</code></td>
</tr>
<tr>
<td><a href=https://docs.conda.io/projects/conda/en/latest/index.html>Conda</a></td>
<td><a href=https://anaconda.org/conda-forge/just>just</a></td>
<td><code>conda install -c conda-forge just</code></td>
</tr>
<tr>
<td><a href=https://brew.sh>Homebrew</a></td>
<td><a href=https://formulae.brew.sh/formula/just>just</a></td>
<td><code>brew install just</code></td>
</tr>
<tr>
<td><a href=https://nixos.org/nix/>Nix</a></td>
<td><a href=https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/ju/just/package.nix>just</a></td>
<td><code>nix-env -iA nixpkgs.just</code></td>
</tr>
<tr>
<td><a href=https://www.npmjs.com/>npm</a></td>
<td><a href=https://www.npmjs.com/package/rust-just>rust-just</a></td>
<td><code>npm install -g rust-just</code></td>
</tr>
<tr>
<td><a href=https://pipx.pypa.io/stable/>pipx</a></td>
<td><a href=https://pypi.org/project/rust-just/>rust-just</a></td>
<td><code>pipx install rust-just</code></td>
</tr>
<tr>
<td><a href=https://snapcraft.io>Snap</a></td>
<td><a href=https://snapcraft.io/just>just</a></td>
<td><code>snap install --edge --classic just</code></td>
</tr>
<tr>
<td><a href=https://docs.astral.sh/uv/>uv</a></td>
<td><a href=https://pypi.org/project/rust-just/>rust-just</a></td>
<td><code>uv tool install rust-just</code></td>
</tr>
</tbody>
</table>
#### BSD
<table>
<thead>
<tr>
<th>Operating System</th>
<th>Package Manager</th>
<th>Package</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href=https://www.freebsd.org>FreeBSD</a></td>
<td><a href=https://www.freebsd.org/doc/handbook/pkgng-intro.html>pkg</a></td>
<td><a href=https://www.freshports.org/deskutils/just/>just</a></td>
<td><code>pkg install just</code></td>
</tr>
<tr>
<td><a href=https://www.openbsd.org>OpenBSD</a></td>
<td><a href=https://www.openbsd.org/faq/faq15.html>pkg_*</a></td>
<td><a href=https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/sysutils/just>just</a></td>
<td><code>pkg_add just</code></td>
</tr>
</tbody>
</table>
#### Linux
<table>
<thead>
<tr>
<th>Operating System</th>
<th>Package Manager</th>
<th>Package</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href=https://alpinelinux.org>Alpine</a></td>
<td><a href=https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management>apk-tools</a></td>
<td><a href=https://pkgs.alpinelinux.org/package/edge/community/x86_64/just>just</a></td>
<td><code>apk add just</code></td>
</tr>
<tr>
<td><a href=https://www.archlinux.org>Arch</a></td>
<td><a href=https://wiki.archlinux.org/title/Pacman>pacman</a></td>
<td><a href=https://archlinux.org/packages/extra/x86_64/just/>just</a></td>
<td><code>pacman -S just</code></td>
</tr>
<tr>
<td>
<a href=https://debian.org>Debian 13</a> and
<a href=https://ubuntu.com>Ubuntu 24.04</a> derivatives</td>
<td><a href=https://en.wikipedia.org/wiki/APT_(software)>apt</a></td>
<td><a href=https://packages.debian.org/trixie/just>just</a></td>
<td><code>apt install just</code></td>
</tr>
<tr>
<td><a href=https://getfedora.org>Fedora</a></td>
<td><a href=https://dnf.readthedocs.io/en/latest/>DNF</a></td>
<td><a href=https://src.fedoraproject.org/rpms/rust-just>just</a></td>
<td><code>dnf install just</code></td>
</tr>
<tr>
<td><a href=https://www.gentoo.org>Gentoo</a></td>
<td><a href=https://wiki.gentoo.org/wiki/Portage>Portage</a></td>
<td><a href=https://packages.gentoo.org/packages/dev-build/just>dev-build/just</a></td>
<td>
<code>emerge -av dev-build/just</code>
</td>
</tr>
<tr>
<td><a href=https://nixos.org/nixos/>NixOS</a></td>
<td><a href=https://nixos.org/nix/>Nix</a></td>
<td><a href=https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/ju/just/package.nix>just</a></td>
<td><code>nix-env -iA nixos.just</code></td>
</tr>
<tr>
<td><a href=https://opensuse.org>openSUSE</a></td>
<td><a href=https://en.opensuse.org/Portal:Zypper>Zypper</a></td>
<td><a href=https://build.opensuse.org/package/show/Base:System/just>just</a></td>
<td><code>zypper in just</code></td>
</tr>
<tr>
<td><a href=https://getsol.us>Solus</a></td>
<td><a href=https://getsol.us/articles/package-management/basics/en>eopkg</a></td>
<td><a href=https://dev.getsol.us/source/just/>just</a></td>
<td><code>eopkg install just</code></td>
</tr>
<tr>
<td><a href=https://voidlinux.org>Void</a></td>
<td><a href=https://wiki.voidlinux.org/XBPS>XBPS</a></td>
<td><a href=https://github.com/void-linux/void-packages/blob/master/srcpkgs/just/template>just</a></td>
<td><code>xbps-install -S just</code></td>
</tr>
</tbody>
</table>
#### Windows
<table>
<thead>
<tr>
<th>Package Manager</th>
<th>Package</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href=https://chocolatey.org>Chocolatey</a></td>
<td><a href=https://github.com/michidk/just-choco>just</a></td>
<td><code>choco install just</code></td>
</tr>
<tr>
<td><a href=https://scoop.sh>Scoop</a></td>
<td><a href=https://github.com/ScoopInstaller/Main/blob/master/bucket/just.json>just</a></td>
<td><code>scoop install just</code></td>
</tr>
<tr>
<td><a href=https://learn.microsoft.com/en-us/windows/package-manager/>Windows Package Manager</a></td>
<td><a href=https://github.com/microsoft/winget-pkgs/tree/master/manifests/c/Casey/Just>Casey/Just</a></td>
<td><code>winget install --id Casey.Just --exact</code></td>
</tr>
</tbody>
</table>
#### macOS
<table>
<thead>
<tr>
<th>Package Manager</th>
<th>Package</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href=https://www.macports.org>MacPorts</a></td>
<td><a href=https://ports.macports.org/port/just/summary>just</a></td>
<td><code>port install just</code></td>
</tr>
</tbody>
</table>

### Pre-Built Binaries
Pre-built binaries for Linux, MacOS, and Windows can be found on
[the releases page](https://github.com/casey/just/releases).
You can use the following command on Linux, MacOS, or Windows to download the
latest release, just replace `DEST` with the directory where you'd like to put
`just`:
```console
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to DEST
```
For example, to install `just` to `~/bin`:
```console
# create ~/bin
mkdir -p ~/bin
# download and extract just to ~/bin/just
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/bin
# add `~/bin` to the paths that your shell searches for executables
# this line should be added to your shells initialization file,
# e.g. `~/.bashrc` or `~/.zshrc`
export PATH="$PATH:$HOME/bin"
# just should now be executable
just --help
```
Note that `install.sh` may fail on GitHub Actions, or in other environments
where many machines share IP addresses. `install.sh` calls GitHub APIs in order
to determine the latest version of `just` to install, and those API calls are
rate-limited on a per-IP basis. To make `install.sh` more reliable in such
circumstances, pass a specific tag to install with `--tag`.
Another way to avoid rate-limiting is to pass a GitHub authentication token to
`install.sh` as an environment variable named `GITHUB_TOKEN`, allowing it to
authenticate its requests.
[Releases](https://github.com/casey/just/releases) include a `SHA256SUM` file
which can be used to verify the integrity of pre-built binary archives.
To verify a release, download the pre-built binary archive along with the
`SHA256SUM` file and run:
```sh
shasum --algorithm 256 --ignore-missing --check SHA256SUMS
```
### GitHub Actions
`just` can be installed on GitHub Actions in a few ways.
Using package managers pre-installed on GitHub Actions runners on MacOS with
`brew install just`, and on Windows with `choco install just`.
With [extractions/setup-just](https://github.com/extractions/setup-just):
```yaml
- uses: extractions/setup-just@v3
with:
just-version: 1.5.0 # optional semver specification, otherwise latest
```
Or with [taiki-e/install-action](https://github.com/taiki-e/install-action):
```yaml
- uses: taiki-e/install-action@just
```
### Release RSS Feed
An [RSS feed](https://en.wikipedia.org/wiki/RSS) of `just` releases is available [here](https://github.com/casey/just/releases.atom).
### Node.js Installation
[just-install](https://npmjs.com/package/just-install) can be used to automate
installation of `just` in Node.js applications.
`just` is a great, more robust alternative to npm scripts. If you want to
include `just` in the dependencies of a Node.js application, `just-install`
will install a local, platform-specific binary as part of the `npm install`
command. This removes the need for every developer to install `just`
independently using one of the processes mentioned above. After installation,
the `just` command will work in npm scripts or with npx. It's great for teams
who want to make the set up process for their project as easy as possible.
For more information, see the
[just-install README file](https://github.com/brombal/just-install#readme).
Backwards Compatibility
-----------------------
With the release of version 1.0, `just` features a strong commitment to
backwards compatibility and stability.
Future releases will not introduce backwards incompatible changes that make
existing `justfile`s stop working, or break working invocations of the
command-line interface.
This does not, however, preclude fixing outright bugs, even if doing so might
break `justfiles` that rely on their behavior.
There will never be a `just` 2.0. Any desirable backwards-incompatible changes
will be opt-in on a per-`justfile` basis, so users may migrate at their
leisure.
Features that aren't yet ready for stabilization are marked as unstable and may
be changed or removed at any time. Using unstable features produces an error by
default, which can be suppressed with by passing the `--unstable` flag,
`set unstable`, or setting the environment variable `JUST_UNSTABLE`, to any
value other than `false`, `0`, or the empty string.
Editor Support
--------------
`justfile` syntax is close enough to `make` that you may want to tell your
editor to use `make` syntax highlighting for `just`.
### Vim and Neovim
Vim version 9.1.1042 or better and Neovim version 0.11 or better support
Justfile syntax highlighting out of the box, thanks to
[pbnj](https://github.com/pbnj).
#### `vim-just`
The [vim-just](https://github.com/NoahTheDuke/vim-just) plugin provides syntax
highlighting for `justfile`s.
Install it with your favorite package manager, like
[Plug](https://github.com/junegunn/vim-plug):
```vim
call plug#begin()
Plug 'NoahTheDuke/vim-just'
call plug#end()
```
Or with Vim's built-in package support:
```console
mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone https://github.com/NoahTheDuke/vim-just.git
```
#### `tree-sitter-just`
[tree-sitter-just](https://github.com/IndianBoy42/tree-sitter-just) is an
[Nvim Treesitter](https://github.com/nvim-treesitter/nvim-treesitter) plugin
for Neovim.
#### Makefile Syntax Highlighting
Vim's built-in makefile syntax highlighting isn't perfect for `justfile`s, but
it's better than nothing. You can put the following in `~/.vim/filetype.vim`:
```vimscript
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au BufNewFile,BufRead justfile setf make
augroup END
```
Or add the following to an individual `justfile` to enable `make` mode on a
per-file basis:
```text
# vim: set ft=make :
```
### Emacs
[just-mode](https://github.com/leon-barrett/just-mode.el) provides syntax
highlighting and automatic indentation of `justfile`s. It is available on
[MELPA](https://melpa.org/) as [just-mode](https://melpa.org/#/just-mode).
[justl](https://github.com/psibi/justl.el) provides commands for executing and
listing recipes.
You can add the following to an individual `justfile` to enable `make` mode on
a per-file basis:
```text
# Local Variables:
# mode: makefile
# End:
```
### Visual Studio Code
An extension for VS Code is [available here](https://github.com/nefrob/vscode-just).
Unmaintained VS Code extensions include
[skellock/vscode-just](https://github.com/skellock/vscode-just) and
[sclu1034/vscode-just](https://github.com/sclu1034/vscode-just).
### JetBrains IDEs
A plugin for JetBrains IDEs by [linux_china](https://github.com/linux-china) is
[available here](https://plugins.jetbrains.com/plugin/18658-just).
### Kakoune
Kakoune supports `justfile` syntax highlighting out of the box, thanks to
TeddyDD.
### Helix
[Helix](https://helix-editor.com/) supports `justfile` syntax highlighting
out-of-the-box since version 23.05.
### Sublime Text
The [Just package](https://github.com/nk9/just_sublime) by
[nk9](https://github.com/nk9) with `just` syntax and some other tools is
available on [PackageControl](https://packagecontrol.io/packages/Just).
### Micro
[Micro](https://micro-editor.github.io/) supports Justfile syntax highlighting
out of the box, thanks to [tomodachi94](https://github.com/tomodachi94).
### Zed
The [zed-just](https://github.com/jackTabsCode/zed-just/) extension by
[jackTabsCode](https://github.com/jackTabsCode) is available on the
[Zed extensions page](https://zed.dev/extensions?query=just).
### Other Editors
Feel free to send me the commands necessary to get syntax highlighting working
in your editor of choice so that I may include
gitextract_22bxt1ib/
├── .editorconfig
├── .gitattributes
├── .github/
│ └── workflows/
│ ├── ci.yaml
│ └── release.yaml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── GRAMMAR.md
├── LICENSE
├── README.md
├── README.中文.md
├── Vagrantfile
├── bin/
│ ├── forbid
│ └── package
├── book/
│ ├── en/
│ │ └── book.toml
│ └── zh/
│ └── book.toml
├── build.rs
├── clippy.toml
├── completions/
│ ├── just.bash
│ ├── just.elvish
│ ├── just.fish
│ ├── just.nu
│ ├── just.powershell
│ └── just.zsh
├── contrib/
│ └── just.sh
├── crates/
│ ├── generate-book/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ └── main.rs
│ └── update-contributors/
│ ├── Cargo.toml
│ └── src/
│ └── main.rs
├── crates-io-readme.md
├── examples/
│ ├── cross-platform.just
│ ├── keybase.just
│ ├── kitchen-sink.just
│ ├── powershell.just
│ ├── pre-commit.just
│ └── screenshot.just
├── fuzz/
│ ├── Cargo.toml
│ └── fuzz_targets/
│ └── compile.rs
├── justfile
├── rustfmt.toml
├── src/
│ ├── alias.rs
│ ├── alias_style.rs
│ ├── analyzer.rs
│ ├── arg_attribute.rs
│ ├── assignment.rs
│ ├── assignment_resolver.rs
│ ├── ast.rs
│ ├── attribute.rs
│ ├── attribute_set.rs
│ ├── binding.rs
│ ├── color.rs
│ ├── color_display.rs
│ ├── command_color.rs
│ ├── command_ext.rs
│ ├── compilation.rs
│ ├── compile_error.rs
│ ├── compile_error_kind.rs
│ ├── compiler.rs
│ ├── completions.rs
│ ├── condition.rs
│ ├── conditional_operator.rs
│ ├── config.rs
│ ├── config_error.rs
│ ├── const_error.rs
│ ├── constants.rs
│ ├── count.rs
│ ├── delimiter.rs
│ ├── dependency.rs
│ ├── dump_format.rs
│ ├── enclosure.rs
│ ├── error.rs
│ ├── evaluator.rs
│ ├── execution_context.rs
│ ├── executor.rs
│ ├── expression.rs
│ ├── filesystem.rs
│ ├── format_string_part.rs
│ ├── fragment.rs
│ ├── function.rs
│ ├── fuzzing.rs
│ ├── interpreter.rs
│ ├── invocation.rs
│ ├── invocation_parser.rs
│ ├── item.rs
│ ├── justfile.rs
│ ├── keyed.rs
│ ├── keyword.rs
│ ├── lexer.rs
│ ├── lib.rs
│ ├── line.rs
│ ├── list.rs
│ ├── load_dotenv.rs
│ ├── loader.rs
│ ├── main.rs
│ ├── modulepath.rs
│ ├── name.rs
│ ├── namepath.rs
│ ├── node.rs
│ ├── number.rs
│ ├── numerator.rs
│ ├── ordinal.rs
│ ├── output_error.rs
│ ├── parameter.rs
│ ├── parameter_kind.rs
│ ├── parser.rs
│ ├── pattern.rs
│ ├── platform/
│ │ ├── unix.rs
│ │ └── windows.rs
│ ├── platform.rs
│ ├── platform_interface.rs
│ ├── position.rs
│ ├── positional.rs
│ ├── ran.rs
│ ├── range_ext.rs
│ ├── recipe.rs
│ ├── recipe_resolver.rs
│ ├── recipe_signature.rs
│ ├── request.rs
│ ├── run.rs
│ ├── scope.rs
│ ├── search.rs
│ ├── search_config.rs
│ ├── search_error.rs
│ ├── set.rs
│ ├── setting.rs
│ ├── settings.rs
│ ├── shebang.rs
│ ├── show_whitespace.rs
│ ├── sigil.rs
│ ├── signal.rs
│ ├── signal_handler.rs
│ ├── signals.rs
│ ├── source.rs
│ ├── string_delimiter.rs
│ ├── string_kind.rs
│ ├── string_literal.rs
│ ├── string_state.rs
│ ├── subcommand.rs
│ ├── suggestion.rs
│ ├── summary.rs
│ ├── switch.rs
│ ├── table.rs
│ ├── testing.rs
│ ├── thunk.rs
│ ├── token.rs
│ ├── token_kind.rs
│ ├── tree.rs
│ ├── unindent.rs
│ ├── unresolved_dependency.rs
│ ├── unresolved_recipe.rs
│ ├── unstable_feature.rs
│ ├── usage.rs
│ ├── use_color.rs
│ ├── variables.rs
│ ├── verbosity.rs
│ ├── warning.rs
│ └── which.rs
├── tests/
│ ├── alias.rs
│ ├── alias_style.rs
│ ├── allow_duplicate_recipes.rs
│ ├── allow_duplicate_variables.rs
│ ├── allow_missing.rs
│ ├── arg_attribute.rs
│ ├── assert_stdout.rs
│ ├── assert_success.rs
│ ├── assertions.rs
│ ├── assignment.rs
│ ├── attributes.rs
│ ├── backticks.rs
│ ├── byte_order_mark.rs
│ ├── ceiling.rs
│ ├── changelog.rs
│ ├── choose.rs
│ ├── command.rs
│ ├── completions/
│ │ ├── just.bash
│ │ ├── justfile
│ │ └── subdir/
│ │ └── justfile
│ ├── completions.rs
│ ├── conditional.rs
│ ├── confirm.rs
│ ├── constants.rs
│ ├── datetime.rs
│ ├── default.rs
│ ├── delimiters.rs
│ ├── dependencies.rs
│ ├── directories.rs
│ ├── dotenv.rs
│ ├── dump.rs
│ ├── edit.rs
│ ├── equals.rs
│ ├── error_messages.rs
│ ├── evaluate.rs
│ ├── examples.rs
│ ├── explain.rs
│ ├── export.rs
│ ├── fallback.rs
│ ├── format.rs
│ ├── format_string.rs
│ ├── functions.rs
│ ├── global.rs
│ ├── groups.rs
│ ├── guards.rs
│ ├── ignore_comments.rs
│ ├── imports.rs
│ ├── init.rs
│ ├── interpolation.rs
│ ├── invocation_directory.rs
│ ├── json.rs
│ ├── lazy.rs
│ ├── lib.rs
│ ├── line_prefixes.rs
│ ├── list.rs
│ ├── logical_operators.rs
│ ├── man.rs
│ ├── misc.rs
│ ├── modules.rs
│ ├── multibyte_char.rs
│ ├── newline_escape.rs
│ ├── no_aliases.rs
│ ├── no_cd.rs
│ ├── no_dependencies.rs
│ ├── no_exit_message.rs
│ ├── options.rs
│ ├── os_attributes.rs
│ ├── overrides.rs
│ ├── parallel.rs
│ ├── parameters.rs
│ ├── parser.rs
│ ├── positional_arguments.rs
│ ├── private.rs
│ ├── quiet.rs
│ ├── quote.rs
│ ├── readme.rs
│ ├── recursion_limit.rs
│ ├── regexes.rs
│ ├── request.rs
│ ├── run.rs
│ ├── scope.rs
│ ├── script.rs
│ ├── search.rs
│ ├── search_arguments.rs
│ ├── settings.rs
│ ├── shadowing_parameters.rs
│ ├── shebang.rs
│ ├── shell.rs
│ ├── shell_expansion.rs
│ ├── show.rs
│ ├── signals.rs
│ ├── slash_operator.rs
│ ├── string.rs
│ ├── subsequents.rs
│ ├── summary.rs
│ ├── tempdir.rs
│ ├── test.rs
│ ├── timestamps.rs
│ ├── undefined_variables.rs
│ ├── unexport.rs
│ ├── unstable.rs
│ ├── usage.rs
│ ├── which_function.rs
│ ├── windows.rs
│ ├── windows_shell.rs
│ └── working_directory.rs
└── www/
├── .nojekyll
├── CNAME
├── index.css
├── index.html
└── install.sh
SYMBOL INDEX (2170 symbols across 223 files)
FILE: build.rs
function main (line 1) | fn main() {
FILE: crates/generate-book/src/main.rs
type Result (line 13) | type Result<T = ()> = std::result::Result<T, Box<dyn Error>>;
type Language (line 16) | enum Language {
method code (line 22) | fn code(&self) -> &'static str {
method suffix (line 29) | fn suffix(&self) -> &'static str {
method introduction (line 36) | fn introduction(&self) -> &'static str {
type Chapter (line 45) | struct Chapter<'a> {
function title (line 53) | fn title(&self) -> String {
function filename (line 71) | fn filename(&self) -> String {
function markdown (line 75) | fn markdown(&self) -> Result<String> {
function slug (line 85) | fn slug(s: &str) -> String {
function main (line 98) | fn main() -> Result {
FILE: crates/update-contributors/src/main.rs
function author (line 6) | fn author(pr: u64) -> String {
function main (line 25) | fn main() {
FILE: src/alias.rs
type Alias (line 5) | pub(crate) struct Alias<'src, T = Arc<Recipe<'src>>> {
function resolve (line 16) | pub(crate) fn resolve(self, target: Arc<Recipe<'src>>) -> Alias<'src> {
function is_public (line 28) | pub(crate) fn is_public(&self) -> bool {
function key (line 35) | fn key(&self) -> &'src str {
method fmt (line 41) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
method fmt (line 47) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/alias_style.rs
type AliasStyle (line 4) | pub(crate) enum AliasStyle {
FILE: src/analyzer.rs
type Analyzer (line 4) | pub(crate) struct Analyzer<'run, 'src> {
function analyze (line 15) | pub(crate) fn analyze(
function justfile (line 32) | fn justfile(
function define (line 299) | fn define(
function analyze_recipe (line 327) | fn analyze_recipe(recipe: &UnresolvedRecipe<'src>) -> CompileResult<'src> {
function analyze_set (line 383) | fn analyze_set(&self, set: &Set<'src>) -> CompileResult<'src> {
function resolve_alias (line 394) | fn resolve_alias<'a>(
function resolve_recipe (line 408) | pub(crate) fn resolve_recipe<'a>(
FILE: src/arg_attribute.rs
type ArgAttribute (line 3) | pub(crate) struct ArgAttribute<'src> {
FILE: src/assignment.rs
type Assignment (line 4) | pub(crate) type Assignment<'src> = Binding<'src, Expression<'src>>;
method fmt (line 7) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/assignment_resolver.rs
type AssignmentResolver (line 3) | pub(crate) struct AssignmentResolver<'src: 'run, 'run> {
function resolve_assignments (line 10) | pub(crate) fn resolve_assignments(
function resolve_assignment (line 26) | fn resolve_assignment(&mut self, assignment: &Assignment<'src>) -> Compi...
FILE: src/ast.rs
type Ast (line 7) | pub(crate) struct Ast<'src> {
method fmt (line 16) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/attribute.rs
type Attribute (line 12) | pub(crate) enum Attribute<'src> {
method argument_range (line 50) | fn argument_range(self) -> RangeInclusive<usize> {
function check_option_name (line 78) | fn check_option_name(
function new (line 101) | pub(crate) fn new(
function remove_required (line 236) | fn remove_required(
function discriminant (line 250) | pub(crate) fn discriminant(&self) -> AttributeDiscriminant {
function name (line 254) | pub(crate) fn name(&self) -> &'static str {
function repeatable (line 258) | pub(crate) fn repeatable(&self) -> bool {
method fmt (line 267) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function name (line 351) | fn name() {
FILE: src/attribute_set.rs
type AttributeSet (line 4) | pub(crate) struct AttributeSet<'src>(BTreeSet<Attribute<'src>>);
function len (line 7) | pub(crate) fn len(&self) -> usize {
function contains (line 11) | pub(crate) fn contains(&self, target: AttributeDiscriminant) -> bool {
function get (line 15) | pub(crate) fn get(&self, discriminant: AttributeDiscriminant) -> Option<...
function iter (line 22) | pub(crate) fn iter<'a>(&'a self) -> collections::btree_set::Iter<'a, Att...
function ensure_valid_attributes (line 26) | pub(crate) fn ensure_valid_attributes(
function from_iter (line 47) | fn from_iter<T: IntoIterator<Item = attribute::Attribute<'src>>>(iter: T...
type Item (line 53) | type Item = &'a Attribute<'src>;
type IntoIter (line 55) | type IntoIter = collections::btree_set::Iter<'a, Attribute<'src>>;
method into_iter (line 57) | fn into_iter(self) -> Self::IntoIter {
type Item (line 63) | type Item = Attribute<'src>;
type IntoIter (line 65) | type IntoIter = collections::btree_set::IntoIter<Attribute<'src>>;
method into_iter (line 67) | fn into_iter(self) -> Self::IntoIter {
FILE: src/binding.rs
type Binding (line 5) | pub(crate) struct Binding<'src, V = String> {
function key (line 20) | fn key(&self) -> &'src str {
FILE: src/color.rs
type Color (line 8) | pub(crate) struct Color {
method active (line 15) | pub(crate) fn active(&self) -> bool {
method alias (line 23) | pub(crate) fn alias(self) -> Self {
method always (line 27) | pub(crate) fn always() -> Self {
method annotation (line 34) | pub(crate) fn annotation(self) -> Self {
method auto (line 38) | pub(crate) fn auto() -> Self {
method banner (line 42) | pub(crate) fn banner(self) -> Self {
method command (line 46) | pub(crate) fn command(self, foreground: Option<ansi_term::Color>) -> S...
method context (line 54) | pub(crate) fn context(self) -> Self {
method diff_added (line 58) | pub(crate) fn diff_added(self) -> Self {
method diff_deleted (line 62) | pub(crate) fn diff_deleted(self) -> Self {
method doc (line 66) | pub(crate) fn doc(self) -> Self {
method doc_backtick (line 70) | pub(crate) fn doc_backtick(self) -> Self {
method effective_style (line 74) | fn effective_style(&self) -> Style {
method error (line 82) | pub(crate) fn error(self) -> Self {
method group (line 86) | pub(crate) fn group(self) -> Self {
method message (line 90) | pub(crate) fn message(self) -> Self {
method never (line 94) | pub(crate) fn never() -> Self {
method paint (line 101) | pub(crate) fn paint<'a>(&self, text: &'a str) -> ANSIGenericString<'a,...
method parameter (line 105) | pub(crate) fn parameter(self) -> Self {
method prefix (line 109) | pub(crate) fn prefix(&self) -> Prefix {
method redirect (line 113) | fn redirect(self, stream: impl IsTerminal) -> Self {
method restyle (line 120) | fn restyle(self, style: Style) -> Self {
method stderr (line 124) | pub(crate) fn stderr(self) -> Self {
method stdout (line 128) | pub(crate) fn stdout(self) -> Self {
method string (line 132) | pub(crate) fn string(self) -> Self {
method suffix (line 136) | pub(crate) fn suffix(&self) -> Suffix {
method warning (line 140) | pub(crate) fn warning(self) -> Self {
method heading (line 144) | pub(crate) fn heading(self) -> Self {
method option (line 148) | pub(crate) fn option(self) -> Self {
method argument (line 152) | pub(crate) fn argument(self) -> Self {
method from (line 158) | fn from(use_color: UseColor) -> Self {
method default (line 167) | fn default() -> Self {
FILE: src/color_display.rs
type ColorDisplay (line 3) | pub(crate) trait ColorDisplay {
method color_display (line 4) | fn color_display(&self, color: Color) -> Wrapper
method fmt (line 11) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result;
type Wrapper (line 14) | pub(crate) struct Wrapper<'a>(&'a dyn ColorDisplay, Color);
method fmt (line 17) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/command_color.rs
type CommandColor (line 4) | pub(crate) enum CommandColor {
function from (line 15) | fn from(command_color: CommandColor) -> Self {
FILE: src/command_ext.rs
type CommandExt (line 3) | pub(crate) trait CommandExt {
method export (line 4) | fn export(
method export_scope (line 12) | fn export_scope(&mut self, settings: &Settings, scope: &Scope, unexpor...
method output_guard (line 14) | fn output_guard(self) -> (io::Result<process::Output>, Option<Signal>);
method output_guard_stdout (line 16) | fn output_guard_stdout(self) -> Result<String, OutputError>;
method status_guard (line 18) | fn status_guard(self) -> (io::Result<ExitStatus>, Option<Signal>);
method export (line 22) | fn export(
method export_scope (line 40) | fn export_scope(&mut self, settings: &Settings, scope: &Scope, unexpor...
method output_guard (line 56) | fn output_guard(self) -> (io::Result<process::Output>, Option<Signal>) {
method output_guard_stdout (line 60) | fn output_guard_stdout(self) -> Result<String, OutputError> {
method status_guard (line 82) | fn status_guard(self) -> (io::Result<ExitStatus>, Option<Signal>) {
FILE: src/compilation.rs
type Compilation (line 4) | pub(crate) struct Compilation<'src> {
function root_ast (line 12) | pub(crate) fn root_ast(&self) -> &Ast<'src> {
FILE: src/compile_error.rs
type CompileError (line 4) | pub(crate) struct CompileError<'src> {
function context (line 10) | pub(crate) fn context(&self) -> Token<'src> {
function new (line 14) | pub(crate) fn new(token: Token<'src>, kind: CompileErrorKind<'src>) -> S...
function source (line 21) | pub(crate) fn source(&self) -> Option<&dyn std::error::Error> {
function capitalize (line 29) | fn capitalize(s: &str) -> String {
method fmt (line 38) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/compile_error_kind.rs
type CompileErrorKind (line 4) | pub(crate) enum CompileErrorKind<'src> {
FILE: src/compiler.rs
type Compiler (line 3) | pub(crate) struct Compiler;
method compile (line 6) | pub(crate) fn compile<'src>(
method find_module_file (line 117) | fn find_module_file<'src>(
method expand_tilde (line 213) | fn expand_tilde(path: &str) -> RunResult<'static, PathBuf> {
method test_compile (line 224) | pub(crate) fn test_compile(src: &str) -> RunResult<Justfile> {
function recursive_includes_fail (line 252) | fn recursive_includes_fail() {
function find_module_file (line 273) | fn find_module_file() {
FILE: src/completions.rs
type Shell (line 4) | pub(crate) enum Shell {
method script (line 15) | pub(crate) fn script(self) -> &'static str {
function scripts (line 37) | fn scripts() {
function clap (line 62) | fn clap(shell: clap_complete::Shell) -> String {
constant FISH_RECIPE_COMPLETIONS (line 117) | const FISH_RECIPE_COMPLETIONS: &str = r#"function __fish_just_complete_r...
constant ZSH_COMPLETION_REPLACEMENTS (line 133) | const ZSH_COMPLETION_REPLACEMENTS: &[(&str, &str)] = &[
constant POWERSHELL_COMPLETION_REPLACEMENTS (line 247) | const POWERSHELL_COMPLETION_REPLACEMENTS: &[(&str, &str)] = &[(
constant BASH_COMPLETION_REPLACEMENTS (line 274) | const BASH_COMPLETION_REPLACEMENTS: &[(&str, &str)] = &[
FILE: src/condition.rs
type Condition (line 4) | pub(crate) struct Condition<'src> {
method fmt (line 11) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
method serialize (line 17) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/conditional_operator.rs
type ConditionalOperator (line 5) | pub(crate) enum ConditionalOperator {
method fmt (line 17) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/config.rs
type Config (line 15) | pub(crate) struct Config {
method app (line 142) | pub(crate) fn app() -> Command {
method parse_modulepath (line 649) | fn parse_modulepath(values: ValuesRef<String>) -> ConfigResult<Modulep...
method search_config (line 666) | fn search_config(matches: &ArgMatches, positional: &Positional) -> Con...
method timestamp (line 699) | pub(crate) fn timestamp(&self) -> Option<String> {
method parse_override (line 707) | fn parse_override(path: &str) -> ConfigResult<(Modulepath, String)> {
method from_matches (line 716) | pub(crate) fn from_matches(matches: &ArgMatches) -> ConfigResult<Self> {
method require_unstable (line 915) | pub(crate) fn require_unstable(
constant CHANGELOG (line 53) | pub(crate) const CHANGELOG: &str = "CHANGELOG";
constant CHOOSE (line 54) | pub(crate) const CHOOSE: &str = "CHOOSE";
constant COMMAND (line 55) | pub(crate) const COMMAND: &str = "COMMAND";
constant COMPLETIONS (line 56) | pub(crate) const COMPLETIONS: &str = "COMPLETIONS";
constant DUMP (line 57) | pub(crate) const DUMP: &str = "DUMP";
constant EDIT (line 58) | pub(crate) const EDIT: &str = "EDIT";
constant EVALUATE (line 59) | pub(crate) const EVALUATE: &str = "EVALUATE";
constant FORMAT (line 60) | pub(crate) const FORMAT: &str = "FORMAT";
constant GROUPS (line 61) | pub(crate) const GROUPS: &str = "GROUPS";
constant INIT (line 62) | pub(crate) const INIT: &str = "INIT";
constant JSON (line 63) | pub(crate) const JSON: &str = "JSON";
constant LIST (line 64) | pub(crate) const LIST: &str = "LIST";
constant MAN (line 65) | pub(crate) const MAN: &str = "MAN";
constant REQUEST (line 66) | pub(crate) const REQUEST: &str = "REQUEST";
constant SHOW (line 67) | pub(crate) const SHOW: &str = "SHOW";
constant SUMMARY (line 68) | pub(crate) const SUMMARY: &str = "SUMMARY";
constant USAGE (line 69) | pub(crate) const USAGE: &str = "USAGE";
constant VARIABLES (line 70) | pub(crate) const VARIABLES: &str = "VARIABLES";
constant ALL (line 72) | pub(crate) const ALL: &[&str] = &[
constant ARGLESS (line 91) | pub(crate) const ARGLESS: &[&str] = &[
constant HEADING (line 95) | pub(crate) const HEADING: &str = "Commands";
constant ALIAS_STYLE (line 99) | pub(crate) const ALIAS_STYLE: &str = "ALIAS_STYLE";
constant ALLOW_MISSING (line 100) | pub(crate) const ALLOW_MISSING: &str = "ALLOW-MISSING";
constant ARGUMENTS (line 101) | pub(crate) const ARGUMENTS: &str = "ARGUMENTS";
constant CEILING (line 102) | pub(crate) const CEILING: &str = "CEILING";
constant CHECK (line 103) | pub(crate) const CHECK: &str = "CHECK";
constant CHOOSER (line 104) | pub(crate) const CHOOSER: &str = "CHOOSER";
constant CLEAR_SHELL_ARGS (line 105) | pub(crate) const CLEAR_SHELL_ARGS: &str = "CLEAR-SHELL-ARGS";
constant COLOR (line 106) | pub(crate) const COLOR: &str = "COLOR";
constant COMMAND_COLOR (line 107) | pub(crate) const COMMAND_COLOR: &str = "COMMAND-COLOR";
constant CYGPATH (line 108) | pub(crate) const CYGPATH: &str = "CYGPATH";
constant DOTENV_FILENAME (line 109) | pub(crate) const DOTENV_FILENAME: &str = "DOTENV-FILENAME";
constant DOTENV_PATH (line 110) | pub(crate) const DOTENV_PATH: &str = "DOTENV-PATH";
constant DRY_RUN (line 111) | pub(crate) const DRY_RUN: &str = "DRY-RUN";
constant DUMP_FORMAT (line 112) | pub(crate) const DUMP_FORMAT: &str = "DUMP-FORMAT";
constant EXPLAIN (line 113) | pub(crate) const EXPLAIN: &str = "EXPLAIN";
constant GLOBAL_JUSTFILE (line 114) | pub(crate) const GLOBAL_JUSTFILE: &str = "GLOBAL-JUSTFILE";
constant HIGHLIGHT (line 115) | pub(crate) const HIGHLIGHT: &str = "HIGHLIGHT";
constant JUSTFILE (line 116) | pub(crate) const JUSTFILE: &str = "JUSTFILE";
constant GROUP (line 117) | pub(crate) const GROUP: &str = "GROUP";
constant LIST_HEADING (line 118) | pub(crate) const LIST_HEADING: &str = "LIST-HEADING";
constant LIST_PREFIX (line 119) | pub(crate) const LIST_PREFIX: &str = "LIST-PREFIX";
constant LIST_SUBMODULES (line 120) | pub(crate) const LIST_SUBMODULES: &str = "LIST-SUBMODULES";
constant NO_ALIASES (line 121) | pub(crate) const NO_ALIASES: &str = "NO-ALIASES";
constant NO_DEPS (line 122) | pub(crate) const NO_DEPS: &str = "NO-DEPS";
constant NO_DOTENV (line 123) | pub(crate) const NO_DOTENV: &str = "NO-DOTENV";
constant NO_HIGHLIGHT (line 124) | pub(crate) const NO_HIGHLIGHT: &str = "NO-HIGHLIGHT";
constant ONE (line 125) | pub(crate) const ONE: &str = "ONE";
constant QUIET (line 126) | pub(crate) const QUIET: &str = "QUIET";
constant SET (line 127) | pub(crate) const SET: &str = "SET";
constant SHELL (line 128) | pub(crate) const SHELL: &str = "SHELL";
constant SHELL_ARG (line 129) | pub(crate) const SHELL_ARG: &str = "SHELL-ARG";
constant SHELL_COMMAND (line 130) | pub(crate) const SHELL_COMMAND: &str = "SHELL-COMMAND";
constant TEMPDIR (line 131) | pub(crate) const TEMPDIR: &str = "TEMPDIR";
constant TIMESTAMP (line 132) | pub(crate) const TIMESTAMP: &str = "TIMESTAMP";
constant TIMESTAMP_FORMAT (line 133) | pub(crate) const TIMESTAMP_FORMAT: &str = "TIMESTAMP-FORMAT";
constant UNSORTED (line 134) | pub(crate) const UNSORTED: &str = "UNSORTED";
constant UNSTABLE (line 135) | pub(crate) const UNSTABLE: &str = "UNSTABLE";
constant VERBOSE (line 136) | pub(crate) const VERBOSE: &str = "VERBOSE";
constant WORKING_DIRECTORY (line 137) | pub(crate) const WORKING_DIRECTORY: &str = "WORKING-DIRECTORY";
constant YES (line 138) | pub(crate) const YES: &str = "YES";
function test (line 984) | fn test(arguments: &[&str], want: Config) {
FILE: src/config_error.rs
type ConfigError (line 5) | pub(crate) enum ConfigError {
method internal (line 56) | pub(crate) fn internal(message: impl Into<String>) -> Self {
FILE: src/const_error.rs
type ConstError (line 4) | pub(crate) enum ConstError<'src> {
function context (line 11) | pub(crate) fn context(self) -> Token<'src> {
method fmt (line 20) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/constants.rs
constant CONSTANTS (line 3) | const CONSTANTS: &[(&str, &str, Option<&str>, &str)] = &[
function constants (line 35) | pub(crate) fn constants() -> &'static BTreeMap<&'static str, &'static st...
function readme_table (line 61) | fn readme_table() {
FILE: src/count.rs
type Count (line 3) | pub(crate) struct Count<T: Display>(pub T, pub usize);
method fmt (line 6) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function count (line 20) | fn count() {
FILE: src/delimiter.rs
type Delimiter (line 4) | pub(crate) enum Delimiter {
method open (line 12) | pub(crate) fn open(self) -> char {
method close (line 20) | pub(crate) fn close(self) -> char {
FILE: src/dependency.rs
type Dependency (line 4) | pub(crate) struct Dependency<'src> {
function flatten_arguments (line 11) | fn flatten_arguments<S: Serializer>(
method fmt (line 26) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/dump_format.rs
type DumpFormat (line 4) | pub(crate) enum DumpFormat {
FILE: src/enclosure.rs
type Enclosure (line 3) | pub(crate) struct Enclosure<T: Display> {
function tick (line 9) | pub(crate) fn tick(value: T) -> Self {
method fmt (line 18) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function tick (line 28) | fn tick() {
FILE: src/error.rs
type Error (line 4) | pub(crate) enum Error<'src> {
function code (line 261) | pub(crate) fn code(&self) -> Option<i32> {
function context (line 284) | fn context(&self) -> Option<Token<'src>> {
function internal (line 299) | pub(crate) fn internal(message: impl Into<String>) -> Self {
function print_message (line 305) | pub(crate) fn print_message(&self) -> bool {
function source (line 315) | fn source(&self) -> Option<&dyn std::error::Error> {
function from (line 324) | fn from(compile_error: CompileError<'src>) -> Self {
function from (line 330) | fn from(config_error: ConfigError) -> Self {
function from (line 336) | fn from(const_error: ConstError<'src>) -> Self {
function from (line 342) | fn from(search_error: SearchError) -> Self {
method fmt (line 348) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
function format_cmd (line 845) | fn format_cmd(binary: &OsString, arguments: &Vec<OsString>) -> String {
FILE: src/evaluator.rs
type Evaluator (line 3) | pub(crate) struct Evaluator<'src: 'run, 'run> {
function context (line 14) | fn context(
function evaluate_settings (line 21) | pub(crate) fn evaluate_settings(
function evaluate_sets (line 48) | fn evaluate_sets(&mut self, sets: Table<'src, Set<'src>>) -> RunResult<'...
function evaluate_interpreter (line 125) | pub(crate) fn evaluate_interpreter(
function evaluate_assignments (line 139) | pub(crate) fn evaluate_assignments(
function evaluate_assignment (line 182) | fn evaluate_assignment(&mut self, assignment: &Assignment<'src>) -> RunR...
function function_context (line 210) | fn function_context(&self, thunk: &Thunk<'src>) -> RunResult<'src, funct...
function evaluate_expression (line 219) | pub(crate) fn evaluate_expression(
function evaluate_condition (line 397) | fn evaluate_condition(&mut self, condition: &Condition<'src>) -> RunResu...
function run_command (line 413) | pub(crate) fn run_command(
function evaluate_line (line 447) | pub(crate) fn evaluate_line(
function evaluate_parameters (line 474) | pub(crate) fn evaluate_parameters(
function new (line 546) | pub(crate) fn new(
FILE: src/execution_context.rs
type ExecutionContext (line 4) | pub(crate) struct ExecutionContext<'src: 'run, 'run> {
function tempdir (line 12) | pub(crate) fn tempdir<D>(&self, recipe: &Recipe<'src, D>) -> RunResult<'...
function working_directory (line 42) | pub(crate) fn working_directory(&self) -> PathBuf {
FILE: src/executor.rs
type Executor (line 3) | pub(crate) enum Executor<'a> {
function command (line 9) | pub(crate) fn command<'src>(
function script_filename (line 50) | pub(crate) fn script_filename(&self, recipe: &str, extension: Option<&st...
function error (line 67) | pub(crate) fn error<'src>(&self, io_error: io::Error, recipe: &'src str)...
function script (line 94) | pub(crate) fn script<D>(&self, recipe: &Recipe<D>, lines: &[String]) -> ...
function shebang_script_filename (line 133) | fn shebang_script_filename() {
FILE: src/expression.rs
type Expression (line 10) | pub(crate) enum Expression<'src> {
function variables (line 55) | pub(crate) fn variables<'expression>(&'expression self) -> Variables<'ex...
method fmt (line 61) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
method serialize (line 104) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/filesystem.rs
function is_file (line 3) | pub(crate) fn is_file(path: &Path) -> RunResult<'static, bool> {
FILE: src/format_string_part.rs
type FormatStringPart (line 2) | pub(crate) enum FormatStringPart {
FILE: src/fragment.rs
type Fragment (line 5) | pub(crate) enum Fragment<'src> {
method serialize (line 13) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/function.rs
type Function (line 13) | pub(crate) enum Function {
method argc (line 119) | pub(crate) fn argc(&self) -> RangeInclusive<usize> {
type Context (line 23) | pub(crate) struct Context<'src: 'run, 'run> {
function get (line 30) | pub(crate) fn get(name: &str) -> Option<Function> {
function absolute_path (line 132) | fn absolute_path(context: Context, path: &str) -> FunctionResult {
function append (line 147) | fn append(_context: Context, suffix: &str, s: &str) -> FunctionResult {
function arch (line 156) | fn arch(_context: Context) -> FunctionResult {
function blake3 (line 160) | fn blake3(_context: Context, s: &str) -> FunctionResult {
function blake3_file (line 164) | fn blake3_file(context: Context, path: &str) -> FunctionResult {
function canonicalize (line 173) | fn canonicalize(context: Context, path: &str) -> FunctionResult {
function capitalize (line 185) | fn capitalize(_context: Context, s: &str) -> FunctionResult {
function choose (line 197) | fn choose(_context: Context, n: &str, alphabet: &str) -> FunctionResult {
function clean (line 223) | fn clean(_context: Context, path: &str) -> FunctionResult {
function dir (line 227) | fn dir(name: &'static str, f: fn() -> Option<PathBuf>) -> FunctionResult {
function datetime (line 243) | fn datetime(_context: Context, format: &str) -> FunctionResult {
function datetime_utc (line 247) | fn datetime_utc(_context: Context, format: &str) -> FunctionResult {
function encode_uri_component (line 251) | fn encode_uri_component(_context: Context, s: &str) -> FunctionResult {
function env (line 265) | fn env(context: Context, key: &str, default: Option<&str>) -> FunctionRe...
function env_var (line 272) | fn env_var(context: Context, key: &str) -> FunctionResult {
function env_var_or_default (line 288) | fn env_var_or_default(context: Context, key: &str, default: &str) -> Fun...
function error (line 304) | fn error(_context: Context, message: &str) -> FunctionResult {
function extension (line 308) | fn extension(_context: Context, path: &str) -> FunctionResult {
function file_name (line 315) | fn file_name(_context: Context, path: &str) -> FunctionResult {
function file_stem (line 322) | fn file_stem(_context: Context, path: &str) -> FunctionResult {
function invocation_directory (line 329) | fn invocation_directory(context: Context) -> FunctionResult {
function invocation_directory_native (line 338) | fn invocation_directory_native(context: Context) -> FunctionResult {
function is_dependency (line 357) | fn is_dependency(context: Context) -> FunctionResult {
function prepend (line 361) | fn prepend(_context: Context, prefix: &str, s: &str) -> FunctionResult {
function join (line 370) | fn join(_context: Context, base: &str, with: &str, and: &[String]) -> Fu...
function just_executable (line 378) | fn just_executable(_context: Context) -> FunctionResult {
function just_pid (line 390) | fn just_pid(_context: Context) -> FunctionResult {
function justfile (line 394) | fn justfile(context: Context) -> FunctionResult {
function justfile_directory (line 409) | fn justfile_directory(context: Context) -> FunctionResult {
function kebabcase (line 433) | fn kebabcase(_context: Context, s: &str) -> FunctionResult {
function lowercamelcase (line 437) | fn lowercamelcase(_context: Context, s: &str) -> FunctionResult {
function lowercase (line 441) | fn lowercase(_context: Context, s: &str) -> FunctionResult {
function module_directory (line 445) | fn module_directory(context: Context) -> FunctionResult {
function module_file (line 455) | fn module_file(context: Context) -> FunctionResult {
function num_cpus (line 465) | fn num_cpus(_context: Context) -> FunctionResult {
function os (line 470) | fn os(_context: Context) -> FunctionResult {
function os_family (line 474) | fn os_family(_context: Context) -> FunctionResult {
function parent_directory (line 478) | fn parent_directory(_context: Context, path: &str) -> FunctionResult {
function path_exists (line 485) | fn path_exists(context: Context, path: &str) -> FunctionResult {
function quote (line 496) | fn quote(_context: Context, s: &str) -> FunctionResult {
function read (line 500) | fn read(context: Context, filename: &str) -> FunctionResult {
function replace (line 505) | fn replace(_context: Context, s: &str, from: &str, to: &str) -> Function...
function require (line 509) | fn require(context: Context, name: &str) -> FunctionResult {
function replace_regex (line 513) | fn replace_regex(_context: Context, s: &str, regex: &str, replacement: &...
function sha256 (line 522) | fn sha256(_context: Context, s: &str) -> FunctionResult {
function sha256_file (line 530) | fn sha256_file(context: Context, path: &str) -> FunctionResult {
function shell (line 542) | fn shell(context: Context, command: &str, args: &[String]) -> FunctionRe...
function shoutykebabcase (line 557) | fn shoutykebabcase(_context: Context, s: &str) -> FunctionResult {
function shoutysnakecase (line 561) | fn shoutysnakecase(_context: Context, s: &str) -> FunctionResult {
function snakecase (line 565) | fn snakecase(_context: Context, s: &str) -> FunctionResult {
function source_directory (line 569) | fn source_directory(context: Context) -> FunctionResult {
function source_file (line 589) | fn source_file(context: Context) -> FunctionResult {
function style (line 607) | fn style(context: Context, s: &str) -> FunctionResult {
function titlecase (line 621) | fn titlecase(_context: Context, s: &str) -> FunctionResult {
function trim (line 625) | fn trim(_context: Context, s: &str) -> FunctionResult {
function trim_end (line 629) | fn trim_end(_context: Context, s: &str) -> FunctionResult {
function trim_end_match (line 633) | fn trim_end_match(_context: Context, s: &str, pat: &str) -> FunctionResu...
function trim_end_matches (line 637) | fn trim_end_matches(_context: Context, s: &str, pat: &str) -> FunctionRe...
function trim_start (line 641) | fn trim_start(_context: Context, s: &str) -> FunctionResult {
function trim_start_match (line 645) | fn trim_start_match(_context: Context, s: &str, pat: &str) -> FunctionRe...
function trim_start_matches (line 649) | fn trim_start_matches(_context: Context, s: &str, pat: &str) -> Function...
function uppercamelcase (line 653) | fn uppercamelcase(_context: Context, s: &str) -> FunctionResult {
function uppercase (line 657) | fn uppercase(_context: Context, s: &str) -> FunctionResult {
function uuid (line 661) | fn uuid(_context: Context) -> FunctionResult {
function which (line 665) | fn which(context: Context, name: &str) -> FunctionResult {
function without_extension (line 669) | fn without_extension(_context: Context, path: &str) -> FunctionResult {
function semver_matches (line 683) | fn semver_matches(_context: Context, version: &str, requirement: &str) -...
function dir_not_found (line 702) | fn dir_not_found() {
function dir_not_unicode (line 708) | fn dir_not_unicode() {
FILE: src/fuzzing.rs
function compile (line 3) | pub fn compile(text: &str) {
FILE: src/interpreter.rs
type Interpreter (line 4) | pub(crate) struct Interpreter<T> {
function default_script_interpreter (line 10) | pub(crate) fn default_script_interpreter() -> &'static Self {
method fmt (line 20) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/invocation.rs
type Invocation (line 4) | pub(crate) struct Invocation<'src, 'run> {
FILE: src/invocation_parser.rs
type InvocationParser (line 20) | pub(crate) struct InvocationParser<'src: 'run, 'run> {
function parse_invocations (line 27) | pub(crate) fn parse_invocations(
function parse_invocation (line 50) | fn parse_invocation(&mut self) -> RunResult<'src, Invocation<'src, 'run>> {
function resolve_recipe (line 249) | fn resolve_recipe(
function next (line 299) | fn next(&self) -> Option<&'run str> {
function rest (line 303) | fn rest(&self) -> &[&'run str] {
type TempDirExt (line 312) | trait TempDirExt {
method write (line 313) | fn write(&self, path: &str, content: &str);
method write (line 317) | fn write(&self, path: &str, content: &str) {
function single_no_arguments (line 325) | fn single_no_arguments() {
function single_with_argument (line 336) | fn single_with_argument() {
function single_argument_count_mismatch (line 347) | fn single_argument_count_mismatch() {
function single_unknown (line 363) | fn single_unknown() {
function multiple_unknown (line 376) | fn multiple_unknown() {
function recipe_in_submodule (line 389) | fn recipe_in_submodule() {
function recipe_in_submodule_unknown (line 407) | fn recipe_in_submodule_unknown() {
function recipe_in_submodule_path_unknown (line 426) | fn recipe_in_submodule_path_unknown() {
function module_path_not_consumed (line 449) | fn module_path_not_consumed() {
function no_recipes (line 471) | fn no_recipes() {
function default_recipe_requires_arguments (line 490) | fn default_recipe_requires_arguments() {
function no_default_recipe (line 512) | fn no_default_recipe() {
function complex_grouping (line 532) | fn complex_grouping() {
function long_argument (line 572) | fn long_argument() {
function long_argument_with_positional (line 589) | fn long_argument_with_positional() {
function long_argument_terminator (line 609) | fn long_argument_terminator() {
FILE: src/item.rs
type Item (line 5) | pub(crate) enum Item<'src> {
method fmt (line 31) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/justfile.rs
type Justfile (line 4) | pub(crate) struct Justfile<'src> {
function find_suggestion (line 32) | fn find_suggestion(
function suggest_recipe (line 43) | pub(crate) fn suggest_recipe(&self, input: &str) -> Option<Suggestion<'s...
function suggest_variable (line 67) | pub(crate) fn suggest_variable(&self, input: &str) -> Option<Suggestion<...
function evaluate_scopes (line 77) | fn evaluate_scopes<'run>(
function run (line 117) | pub(crate) fn run(
function check_unstable (line 303) | pub(crate) fn check_unstable(&self, config: &Config) -> RunResult<'src> {
function get_alias (line 315) | pub(crate) fn get_alias(&self, name: &str) -> Option<&Alias<'src>> {
function get_recipe (line 319) | pub(crate) fn get_recipe(&self, name: &str) -> Option<&Recipe<'src>> {
function is_submodule (line 327) | pub(crate) fn is_submodule(&self) -> bool {
function name (line 331) | pub(crate) fn name(&self) -> &'src str {
function run_recipe (line 335) | fn run_recipe(
function run_dependencies (line 414) | fn run_dependencies<'run>(
function public_modules (line 470) | pub(crate) fn public_modules(&self, config: &Config) -> Vec<&Justfile> {
function public_recipes (line 489) | pub(crate) fn public_recipes(&self, config: &Config) -> Vec<&Recipe> {
function groups (line 504) | pub(crate) fn groups(&self) -> Vec<&str> {
function public_groups (line 512) | pub(crate) fn public_groups(&self, config: &Config) -> Vec<String> {
method fmt (line 544) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
function key (line 575) | fn key(&self) -> &'src str {
function case (line 795) | fn case(input: &str, expected: &str) {
function parse_empty (line 805) | fn parse_empty() {
function parse_string_default (line 818) | fn parse_string_default() {
function parse_multiple (line 831) | fn parse_multiple() {
function parse_variadic (line 843) | fn parse_variadic() {
function parse_variadic_string_default (line 856) | fn parse_variadic_string_default() {
function parse_raw_string_default (line 869) | fn parse_raw_string_default() {
function parse_export (line 882) | fn parse_export() {
function parse_alias_after_target (line 893) | fn parse_alias_after_target() {
function parse_alias_before_target (line 908) | fn parse_alias_before_target() {
function parse_alias_with_comment (line 923) | fn parse_alias_with_comment() {
function parse_complex (line 938) | fn parse_complex() {
function parse_shebang (line 978) | fn parse_shebang() {
function parse_simple_shebang (line 999) | fn parse_simple_shebang() {
function parse_assignments (line 1004) | fn parse_assignments() {
function parse_assignment_backticks (line 1019) | fn parse_assignment_backticks() {
function parse_interpolation_backticks (line 1033) | fn parse_interpolation_backticks() {
function eof_test (line 1043) | fn eof_test() {
function string_quote_escape (line 1048) | fn string_quote_escape() {
function string_escapes (line 1053) | fn string_escapes() {
function parameters (line 1058) | fn parameters() {
function unary_functions (line 1068) | fn unary_functions() {
function env_functions (line 1083) | fn env_functions() {
function parameter_default_string (line 1098) | fn parameter_default_string() {
function parameter_default_raw_string (line 1108) | fn parameter_default_raw_string() {
function parameter_default_backtick (line 1118) | fn parameter_default_backtick() {
function parameter_default_concatenation_string (line 1128) | fn parameter_default_concatenation_string() {
function parameter_default_concatenation_variable (line 1138) | fn parameter_default_concatenation_variable() {
function parameter_default_multiple (line 1151) | fn parameter_default_multiple() {
function concatenation_in_group (line 1164) | fn concatenation_in_group() {
function string_in_group (line 1169) | fn string_in_group() {
function escaped_dos_newlines (line 1175) | fn escaped_dos_newlines() {
FILE: src/keyed.rs
type Keyed (line 3) | pub(crate) trait Keyed<'key> {
method key (line 4) | fn key(&self) -> &'key str;
function key (line 8) | fn key(&self) -> &'key str {
function serialize (line 13) | pub(crate) fn serialize<'src, S, K>(keyed: &K, serializer: S) -> Result<...
function serialize_option (line 22) | pub(crate) fn serialize_option<'src, S, K>(
FILE: src/keyword.rs
type Keyword (line 5) | pub(crate) enum Keyword {
method from_lexeme (line 44) | pub(crate) fn from_lexeme(lexeme: &str) -> Option<Self> {
method lexeme (line 48) | pub(crate) fn lexeme(self) -> &'static str {
method eq (line 54) | fn eq(&self, other: &&'a str) -> bool {
function keyword_case (line 64) | fn keyword_case() {
FILE: src/lexer.rs
type Lexer (line 11) | pub(crate) struct Lexer<'src> {
constant INTERPOLATION_END (line 39) | pub(crate) const INTERPOLATION_END: &'static str = "}}";
constant INTERPOLATION_ESCAPE (line 40) | pub(crate) const INTERPOLATION_ESCAPE: &'static str = "{{{{";
constant INTERPOLATION_START (line 41) | pub(crate) const INTERPOLATION_START: &'static str = "{{";
function lex (line 44) | pub(crate) fn lex(path: &'src Path, src: &'src str) -> CompileResult<'sr...
function test_lex (line 49) | pub(crate) fn test_lex(src: &'src str) -> CompileResult<'src, Vec<Token<...
function new (line 54) | fn new(path: &'src Path, src: &'src str) -> Self {
function advance (line 82) | fn advance(&mut self) -> CompileResult<'src> {
function lexeme (line 104) | fn lexeme(&self) -> &'src str {
function current_token_length (line 109) | fn current_token_length(&self) -> usize {
function accepted (line 113) | fn accepted(&mut self, c: char) -> CompileResult<'src, bool> {
function presume (line 122) | fn presume(&mut self, c: char) -> CompileResult<'src> {
function presume_str (line 132) | fn presume_str(&mut self, s: &str) -> CompileResult<'src> {
function next_is (line 141) | fn next_is(&self, c: char) -> bool {
function next_is_whitespace (line 146) | fn next_is_whitespace(&self) -> bool {
function rest (line 151) | fn rest(&self) -> &'src str {
function rest_starts_with (line 156) | fn rest_starts_with(&self, prefix: &str) -> bool {
function at_eol (line 161) | fn at_eol(&self) -> bool {
function at_eof (line 166) | fn at_eof(&self) -> bool {
function at_eol_or_eof (line 171) | fn at_eol_or_eof(&self) -> bool {
function indentation (line 176) | fn indentation(&self) -> &'src str {
function indented (line 181) | fn indented(&self) -> bool {
function token (line 187) | fn token(&mut self, kind: TokenKind) {
function internal_error (line 203) | fn internal_error(&self, message: impl Into<String>) -> CompileError<'sr...
function error (line 223) | fn error(&self, kind: CompileErrorKind<'src>) -> CompileError<'src> {
function unterminated_interpolation_error (line 251) | fn unterminated_interpolation_error(interpolation_start: Token<'src>) ->...
function is_identifier_start (line 256) | pub(crate) fn is_identifier_start(c: char) -> bool {
function is_identifier_continue (line 261) | pub(crate) fn is_identifier_continue(c: char) -> bool {
function tokenize (line 266) | fn tokenize(mut self) -> CompileResult<'src, Vec<Token<'src>>> {
function lex_line_start (line 304) | fn lex_line_start(&mut self) -> CompileResult<'src> {
function lex_normal (line 462) | fn lex_normal(&mut self, start: char) -> CompileResult<'src> {
function lex_interpolation (line 518) | fn lex_interpolation(
function lex_body (line 544) | fn lex_body(&mut self) -> CompileResult<'src> {
function lex_dedent (line 598) | fn lex_dedent(&mut self) {
function lex_single (line 607) | fn lex_single(&mut self, kind: TokenKind) -> CompileResult<'src> {
function lex_double (line 614) | fn lex_double(&mut self, kind: TokenKind) -> CompileResult<'src> {
function lex_choices (line 624) | fn lex_choices(
function lex_delimiter (line 662) | fn lex_delimiter(&mut self, kind: TokenKind) -> CompileResult<'src> {
function open_delimiter (line 684) | fn open_delimiter(&mut self, delimiter: Delimiter) {
function close_delimiter (line 691) | fn close_delimiter(&mut self, close: Delimiter) -> CompileResult<'src> {
function open_delimiters_or_interpolation (line 704) | fn open_delimiters_or_interpolation(&self) -> bool {
function lex_digraph (line 709) | fn lex_digraph(&mut self, left: char, right: char, token: TokenKind) -> ...
function lex_colon (line 736) | fn lex_colon(&mut self) -> CompileResult<'src> {
function lex_escape (line 752) | fn lex_escape(&mut self) -> CompileResult<'src> {
function lex_eol (line 777) | fn lex_eol(&mut self) -> CompileResult<'src> {
function lex_identifier (line 797) | fn lex_identifier(&mut self) -> CompileResult<'src> {
function lex_comment (line 814) | fn lex_comment(&mut self) -> CompileResult<'src> {
function lex_whitespace (line 827) | fn lex_whitespace(&mut self) -> CompileResult<'src> {
function lex_string (line 842) | fn lex_string(&mut self, format_string_kind: Option<StringKind>) -> Comp...
function test (line 961) | fn test(text: &str, unindent_text: bool, want_kinds: &[TokenKind], want_...
function default_lexeme (line 1011) | fn default_lexeme(kind: TokenKind) -> &'static str {
function error (line 1073) | fn error(
function presume_error (line 2469) | fn presume_error() {
FILE: src/lib.rs
type CompileResult (line 163) | type CompileResult<'a, T = ()> = Result<T, CompileError<'a>>;
type ConfigResult (line 164) | type ConfigResult<T> = Result<T, ConfigError>;
type FunctionResult (line 165) | type FunctionResult = Result<String, String>;
type RunResult (line 166) | type RunResult<'a, T = ()> = Result<T, Error<'a>>;
type SearchResult (line 167) | type SearchResult<T> = Result<T, SearchError>;
FILE: src/line.rs
type Line (line 6) | pub(crate) struct Line<'src> {
function first (line 13) | fn first(&self) -> Option<&str> {
function sigils (line 21) | pub(crate) fn sigils(&self, settings: &Settings) -> BTreeSet<Sigil> {
function is_comment (line 42) | pub(crate) fn is_comment(&self) -> bool {
function is_continuation (line 46) | pub(crate) fn is_continuation(&self) -> bool {
function is_empty (line 53) | pub(crate) fn is_empty(&self) -> bool {
function is_shebang (line 57) | pub(crate) fn is_shebang(&self) -> bool {
FILE: src/list.rs
type List (line 3) | pub(crate) struct List<T: Display, I: Iterator<Item = T> + Clone> {
function or (line 9) | pub(crate) fn or<II: IntoIterator<Item = T, IntoIter = I>>(values: II) -...
function and (line 16) | pub(crate) fn and<II: IntoIterator<Item = T, IntoIter = I>>(values: II) ...
function or_ticked (line 23) | pub(crate) fn or_ticked<II: IntoIterator<Item = T, IntoIter = I>>(
function and_ticked (line 29) | pub(crate) fn and_ticked<II: IntoIterator<Item = T, IntoIter = I>>(
method fmt (line 37) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function or (line 84) | fn or() {
function and (line 92) | fn and() {
function or_ticked (line 100) | fn or_ticked() {
function and_ticked (line 111) | fn and_ticked() {
FILE: src/load_dotenv.rs
function load_dotenv (line 3) | pub(crate) fn load_dotenv(
function load_from_file (line 50) | fn load_from_file(
FILE: src/loader.rs
type Loader (line 3) | pub(crate) struct Loader {
method new (line 9) | pub(crate) fn new() -> Self {
method load (line 16) | pub(crate) fn load<'src>(
FILE: src/main.rs
function main (line 1) | fn main() {
FILE: src/modulepath.rs
type Modulepath (line 4) | pub(crate) struct Modulepath {
method is_empty (line 10) | pub(crate) fn is_empty(&self) -> bool {
method starts_with (line 14) | pub(crate) fn starts_with(&self, other: &Modulepath) -> bool {
method from (line 29) | fn from(namepath: &Namepath) -> Self {
type Error (line 38) | type Error = ();
method try_from (line 40) | fn try_from(path: &[&str]) -> Result<Self, Self::Error> {
method serialize (line 20) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
method fmt (line 79) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function try_from_ok (line 99) | fn try_from_ok() {
function try_from_err (line 115) | fn try_from_err() {
FILE: src/name.rs
type Name (line 6) | pub(crate) struct Name<'src> {
function from_identifier (line 11) | pub(crate) fn from_identifier(token: Token<'src>) -> Self {
type Target (line 18) | type Target = Token<'src>;
method deref (line 20) | fn deref(&self) -> &Self::Target {
method fmt (line 26) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function key (line 32) | fn key(&self) -> &'src str {
method serialize (line 38) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/namepath.rs
type Namepath (line 4) | pub(crate) struct Namepath<'src>(Vec<Name<'src>>);
function join (line 7) | pub(crate) fn join(&self, name: Name<'src>) -> Self {
function push (line 11) | pub(crate) fn push(&mut self, name: Name<'src>) {
function last (line 15) | pub(crate) fn last(&self) -> &Name<'src> {
function split_last (line 19) | pub(crate) fn split_last(&self) -> (&Name<'src>, &[Name<'src>]) {
function iter (line 23) | pub(crate) fn iter(&self) -> slice::Iter<'_, Name<'src>> {
function components (line 27) | pub(crate) fn components(&self) -> usize {
method fmt (line 33) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function from (line 45) | fn from(name: Name<'src>) -> Self {
method serialize (line 51) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/node.rs
type Node (line 4) | pub(crate) trait Node<'src> {
method tree (line 7) | fn tree(&self) -> Tree<'src>;
function tree (line 11) | fn tree(&self) -> Tree<'src> {
function tree (line 19) | fn tree(&self) -> Tree<'src> {
function tree (line 67) | fn tree(&self) -> Tree<'src> {
function tree (line 80) | fn tree(&self) -> Tree<'src> {
function tree (line 90) | fn tree(&self) -> Tree<'src> {
function tree (line 104) | fn tree(&self) -> Tree<'src> {
function tree (line 217) | fn tree(&self) -> Tree<'src> {
function tree (line 281) | fn tree(&self) -> Tree<'src> {
function tree (line 293) | fn tree(&self) -> Tree<'src> {
function tree (line 299) | fn tree(&self) -> Tree<'src> {
function tree (line 308) | fn tree(&self) -> Tree<'src> {
method tree (line 351) | fn tree(&self) -> Tree<'src> {
function tree (line 357) | fn tree(&self) -> Tree<'src> {
FILE: src/number.rs
type Number (line 2) | pub(crate) struct Number(pub(crate) u32);
FILE: src/numerator.rs
type Numerator (line 3) | pub(crate) struct Numerator(u32);
method new (line 6) | pub(crate) fn new() -> Self {
method next (line 10) | pub(crate) fn next(&mut self) -> Number {
method constant (line 16) | pub(crate) fn constant(i: usize) -> Number {
FILE: src/ordinal.rs
type Ordinal (line 1) | pub(crate) trait Ordinal {
method ordinal (line 3) | fn ordinal(self) -> Self;
method ordinal (line 7) | fn ordinal(self) -> Self {
FILE: src/output_error.rs
type OutputError (line 4) | pub(crate) enum OutputError {
method result_from_exit_status (line 20) | pub(crate) fn result_from_exit_status(exit_status: ExitStatus) -> Resu...
method fmt (line 33) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/parameter.rs
type Parameter (line 4) | pub(crate) struct Parameter<'src> {
function is_option (line 19) | pub(crate) fn is_option(&self) -> bool {
function is_required (line 23) | pub(crate) fn is_required(&self) -> bool {
function check_pattern_match (line 27) | pub(crate) fn check_pattern_match(
method fmt (line 50) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
FILE: src/parameter_kind.rs
type ParameterKind (line 6) | pub(crate) enum ParameterKind {
method prefix (line 16) | pub(crate) fn prefix(self) -> Option<&'static str> {
method is_variadic (line 24) | pub(crate) fn is_variadic(self) -> bool {
FILE: src/parser.rs
type Parser (line 26) | pub(crate) struct Parser<'run, 'src> {
function parse (line 41) | pub(crate) fn parse(
function parse_source (line 64) | pub(crate) fn parse_source(
function parse_tokens (line 83) | pub(crate) fn parse_tokens(
function error (line 90) | fn error(&self, kind: CompileErrorKind<'src>) -> CompileResult<'src, Com...
function unexpected_token (line 96) | fn unexpected_token(&self) -> CompileResult<'src, CompileError<'src>> {
function internal_error (line 108) | fn internal_error(&self, message: impl Into<String>) -> CompileResult<'s...
function rest (line 115) | fn rest(&self) -> impl Iterator<Item = Token<'src>> + 'run {
function next (line 123) | fn next(&self) -> CompileResult<'src, Token<'src>> {
function next_is (line 132) | fn next_is(&mut self, kind: TokenKind) -> bool {
function next_are (line 139) | fn next_are(&mut self, kinds: &[TokenKind]) -> bool {
function advance (line 159) | fn advance(&mut self) -> CompileResult<'src, Token<'src>> {
function expect (line 175) | fn expect(&mut self, expected: TokenKind) -> CompileResult<'src, Token<'...
function expect_any (line 185) | fn expect_any(&mut self, expected: &[TokenKind]) -> CompileResult<'src, ...
function expect_eol (line 196) | fn expect_eol(&mut self) -> CompileResult<'src> {
function expect_keyword (line 206) | fn expect_keyword(&mut self, expected: Keyword) -> CompileResult<'src> {
function presume_keyword (line 221) | fn presume_keyword(&mut self, keyword: Keyword) -> CompileResult<'src> {
function presume (line 240) | fn presume(&mut self, kind: TokenKind) -> CompileResult<'src, Token<'src...
function presume_any (line 254) | fn presume_any(&mut self, kinds: &[TokenKind]) -> CompileResult<'src, To...
function accept (line 268) | fn accept(&mut self, kind: TokenKind) -> CompileResult<'src, Option<Toke...
function forbid (line 277) | fn forbid<F>(&self, forbidden: TokenKind, error: F) -> CompileResult<'src>
function accept_namepath (line 291) | fn accept_namepath(&mut self) -> CompileResult<'src, Option<Namepath<'sr...
function accept_keyword (line 299) | fn accept_keyword(&mut self, keyword: Keyword) -> CompileResult<'src, Op...
function accepted_keyword (line 310) | fn accepted_keyword(&mut self, keyword: Keyword) -> CompileResult<'src, ...
function accept_dependency (line 315) | fn accept_dependency(&mut self) -> CompileResult<'src, Option<Unresolved...
function accepted (line 337) | fn accepted(&mut self, kind: TokenKind) -> CompileResult<'src, bool> {
function parse_ast (line 342) | fn parse_ast(mut self) -> CompileResult<'src, Ast<'src>> {
function parse_alias (line 552) | fn parse_alias(
function parse_assignment (line 572) | fn parse_assignment(
function parse_expression (line 600) | fn parse_expression(&mut self) -> CompileResult<'src, Expression<'src>> {
function parse_disjunct (line 629) | fn parse_disjunct(&mut self) -> CompileResult<'src, Expression<'src>> {
function parse_conjunct (line 646) | fn parse_conjunct(&mut self) -> CompileResult<'src, Expression<'src>> {
function parse_conditional (line 671) | fn parse_conditional(&mut self) -> CompileResult<'src, Expression<'src>> {
function parse_condition (line 698) | fn parse_condition(&mut self) -> CompileResult<'src, Condition<'src>> {
function parse_format_string (line 718) | fn parse_format_string(&mut self) -> CompileResult<'src, Expression<'src...
function next_is_shell_expanded_string (line 746) | fn next_is_shell_expanded_string(&self) -> bool {
function next_is_format_string (line 764) | fn next_is_format_string(&self) -> bool {
function parse_value (line 780) | fn parse_value(&mut self) -> CompileResult<'src, Expression<'src>> {
function parse_string_literal (line 843) | fn parse_string_literal(&mut self) -> CompileResult<'src, StringLiteral<...
function parse_string_literal_in_state (line 848) | fn parse_string_literal_in_state(
function cook_string (line 938) | fn cook_string(token: Token<'src>, text: &str) -> CompileResult<'src, St...
function parse_name (line 1020) | fn parse_name(&mut self) -> CompileResult<'src, Name<'src>> {
function parse_namepath (line 1025) | fn parse_namepath(&mut self) -> CompileResult<'src, Namepath<'src>> {
function parse_sequence (line 1038) | fn parse_sequence(&mut self) -> CompileResult<'src, Vec<Expression<'src>...
function parse_recipe (line 1057) | fn parse_recipe(
function parse_parameter (line 1237) | fn parse_parameter(
function parse_body (line 1285) | fn parse_body(&mut self) -> CompileResult<'src, Vec<Line<'src>>> {
function parse_set_bool (line 1324) | fn parse_set_bool(&mut self) -> CompileResult<'src, bool> {
function parse_set (line 1346) | fn parse_set(&mut self) -> CompileResult<'src, Set<'src>> {
function parse_interpreter (line 1409) | fn parse_interpreter(&mut self) -> CompileResult<'src, Interpreter<Expre...
function parse_attributes (line 1432) | fn parse_attributes(&mut self) -> CompileResult<'src, Option<(Token<'src...
function test (line 1560) | fn test(text: &str, want: Tree) {
function error (line 1593) | fn error(
FILE: src/pattern.rs
type Pattern (line 4) | pub(crate) struct Pattern<'src> {
function is_match (line 10) | pub(crate) fn is_match(&self, haystack: &str) -> bool {
function new (line 14) | pub(crate) fn new(literal: &StringLiteral<'src>) -> Result<Self, Compile...
function original (line 33) | pub(crate) fn original(&self) -> &str {
method cmp (line 41) | fn cmp(&self, other: &pattern::Pattern) -> Ordering {
method eq (line 47) | fn eq(&self, other: &pattern::Pattern) -> bool {
method partial_cmp (line 53) | fn partial_cmp(&self, other: &pattern::Pattern) -> Option<Ordering> {
method serialize (line 59) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/platform.rs
type Platform (line 3) | pub(crate) struct Platform;
FILE: src/platform/unix.rs
method make_shebang_command (line 4) | fn make_shebang_command(
method set_execute_permission (line 20) | fn set_execute_permission(path: &Path) -> io::Result<()> {
method signal_from_exit_status (line 34) | fn signal_from_exit_status(exit_status: ExitStatus) -> Option<i32> {
method convert_native_path (line 39) | fn convert_native_path(
method install_signal_handler (line 50) | fn install_signal_handler<T: Fn(Signal) + Send + 'static>(handler: T) ->...
FILE: src/platform/windows.rs
method make_shebang_command (line 4) | fn make_shebang_command(
method set_execute_permission (line 48) | fn set_execute_permission(_path: &Path) -> io::Result<()> {
method signal_from_exit_status (line 54) | fn signal_from_exit_status(_exit_status: process::ExitStatus) -> Option<...
method convert_native_path (line 60) | fn convert_native_path(config: &Config, working_directory: &Path, path: ...
method install_signal_handler (line 81) | fn install_signal_handler<T: Fn(Signal) + Send + 'static>(handler: T) ->...
FILE: src/platform_interface.rs
type PlatformInterface (line 3) | pub(crate) trait PlatformInterface {
method convert_native_path (line 5) | fn convert_native_path(config: &Config, working_directory: &Path, path...
method install_signal_handler (line 8) | fn install_signal_handler<T: Fn(Signal) + Send + 'static>(handler: T) ...
method make_shebang_command (line 12) | fn make_shebang_command(
method set_execute_permission (line 20) | fn set_execute_permission(path: &Path) -> io::Result<()>;
method signal_from_exit_status (line 23) | fn signal_from_exit_status(exit_status: ExitStatus) -> Option<i32>;
FILE: src/position.rs
type Position (line 3) | pub(crate) struct Position {
FILE: src/positional.rs
type Positional (line 30) | pub(crate) struct Positional {
method from_values (line 40) | pub(crate) fn from_values<'values>(
method override_from_value (line 79) | fn override_from_value(value: &str) -> Option<(String, String)> {
FILE: src/ran.rs
type Ran (line 4) | pub(crate) struct Ran(Mutex<BTreeMap<Modulepath, BTreeMap<Vec<Vec<String...
method mutex (line 7) | pub(crate) fn mutex(&self, recipe: &Recipe, arguments: &[Vec<String>])...
FILE: src/range_ext.rs
type RangeExt (line 3) | pub(crate) trait RangeExt<T> {
method display (line 4) | fn display(&self) -> DisplayRange<&Self> {
type DisplayRange (line 9) | pub(crate) struct DisplayRange<T>(T);
method fmt (line 12) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function display (line 31) | fn display() {
FILE: src/recipe.rs
function error_from_signal (line 5) | fn error_from_signal(recipe: &str, line_number: Option<usize>, exit_stat...
type Recipe (line 21) | pub(crate) struct Recipe<'src, D = Dependency<'src>> {
function module_path (line 45) | pub(crate) fn module_path(&self) -> &Modulepath {
function recipe_path (line 49) | pub(crate) fn recipe_path(&self) -> &Modulepath {
function spaced_recipe_path (line 53) | pub(crate) fn spaced_recipe_path(&self) -> String {
function argument_range (line 59) | pub(crate) fn argument_range(&self) -> RangeInclusive<usize> {
function group_arguments (line 63) | pub(crate) fn group_arguments(
function min_arguments (line 87) | pub(crate) fn min_arguments(&self) -> usize {
function max_arguments (line 91) | pub(crate) fn max_arguments(&self) -> usize {
function name (line 99) | pub(crate) fn name(&self) -> &'src str {
function line_number (line 103) | pub(crate) fn line_number(&self) -> usize {
function confirm (line 107) | pub(crate) fn confirm(&self) -> RunResult<'src, bool> {
function check_can_be_default_recipe (line 125) | pub(crate) fn check_can_be_default_recipe(&self) -> RunResult<'src> {
function is_parallel (line 137) | pub(crate) fn is_parallel(&self) -> bool {
function is_public (line 141) | pub(crate) fn is_public(&self) -> bool {
function is_script (line 145) | pub(crate) fn is_script(&self) -> bool {
function takes_positional_arguments (line 149) | pub(crate) fn takes_positional_arguments(&self, settings: &Settings) -> ...
function change_directory (line 156) | pub(crate) fn change_directory(&self) -> bool {
function enabled (line 160) | pub(crate) fn enabled(&self) -> bool {
function print_exit_message (line 182) | fn print_exit_message(&self, settings: &Settings) -> bool {
function working_directory (line 194) | fn working_directory<'a>(&'a self, context: &'a ExecutionContext) -> Opt...
function no_quiet (line 210) | fn no_quiet(&self) -> bool {
function run (line 214) | pub(crate) fn run<'run>(
function run_linewise (line 244) | fn run_linewise<'run>(
function run_script (line 400) | pub(crate) fn run_script<'run>(
function groups (line 548) | pub(crate) fn groups(&self) -> BTreeSet<String> {
function doc (line 562) | pub(crate) fn doc(&self) -> Option<&str> {
function priors (line 572) | pub(crate) fn priors(&self) -> &[D] {
function subsequents (line 576) | pub(crate) fn subsequents(&self) -> &[D] {
method fmt (line 582) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
function key (line 638) | fn key(&self) -> &'src str {
FILE: src/recipe_resolver.rs
type RecipeResolver (line 3) | pub(crate) struct RecipeResolver<'src: 'run, 'run> {
function resolve_recipes (line 13) | pub(crate) fn resolve_recipes(
function resolve_recipe (line 36) | fn resolve_recipe(
function resolve_dependency (line 74) | fn resolve_dependency(
FILE: src/recipe_signature.rs
type RecipeSignature (line 3) | pub(crate) struct RecipeSignature<'a> {
method fmt (line 9) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
FILE: src/request.rs
type Request (line 5) | pub enum Request {
type Response (line 13) | pub enum Response {
FILE: src/run.rs
function run (line 5) | pub fn run(args: impl Iterator<Item = impl Into<OsString> + Clone>) -> R...
function run_can_be_called_more_than_once (line 43) | fn run_can_be_called_more_than_once() {
FILE: src/scope.rs
type Scope (line 4) | pub(crate) struct Scope<'src: 'run, 'run> {
function child (line 10) | pub(crate) fn child(&'run self) -> Self {
function root (line 17) | pub(crate) fn root() -> Self {
function bind (line 49) | pub(crate) fn bind(&mut self, binding: Binding<'src>) {
function bound (line 53) | pub(crate) fn bound(&self, name: &str) -> bool {
function value (line 57) | pub(crate) fn value(&self, name: &str) -> Option<&str> {
function bindings (line 65) | pub(crate) fn bindings(&self) -> impl Iterator<Item = &Binding<String>> {
function names (line 69) | pub(crate) fn names(&self) -> impl Iterator<Item = &str> {
function parent (line 73) | pub(crate) fn parent(&self) -> Option<&'run Self> {
FILE: src/search.rs
constant DEFAULT_JUSTFILE_NAME (line 3) | const DEFAULT_JUSTFILE_NAME: &str = JUSTFILE_NAMES[0];
constant JUSTFILE_NAMES (line 4) | pub(crate) const JUSTFILE_NAMES: [&str; 2] = ["justfile", ".justfile"];
constant PROJECT_ROOT_CHILDREN (line 5) | const PROJECT_ROOT_CHILDREN: &[&str] = &[".bzr", ".git", ".hg", ".svn", ...
type Search (line 8) | pub(crate) struct Search {
method global_justfile_paths (line 14) | fn global_justfile_paths() -> Vec<(PathBuf, &'static str)> {
method find (line 33) | pub(crate) fn find(
method find_global_justfile (line 73) | fn find_global_justfile() -> SearchResult<PathBuf> {
method search_parent_directory (line 94) | pub(crate) fn search_parent_directory(&self, ceiling: Option<&Path>) -...
method find_in_directory (line 106) | fn find_in_directory(ceiling: Option<&Path>, starting_dir: &Path) -> S...
method init (line 116) | pub(crate) fn init(
method justfile (line 160) | fn justfile(ceiling: Option<&Path>, directory: &Path) -> SearchResult<...
method clean (line 199) | fn clean(invocation_directory: &Path, path: &Path) -> PathBuf {
method project_root (line 220) | fn project_root(ceiling: Option<&Path>, directory: &Path) -> SearchRes...
method working_directory_from_justfile (line 249) | fn working_directory_from_justfile(justfile: &Path) -> SearchResult<Pa...
function not_found (line 267) | fn not_found() {
function multiple_candidates (line 276) | fn multiple_candidates() {
function found (line 296) | fn found() {
function found_spongebob_case (line 308) | fn found_spongebob_case() {
function found_from_inner_dir (line 331) | fn found_from_inner_dir() {
function found_and_stopped_at_first_justfile (line 347) | fn found_and_stopped_at_first_justfile() {
function justfile_symlink_parent (line 371) | fn justfile_symlink_parent() {
function clean (line 396) | fn clean() {
FILE: src/search_config.rs
type SearchConfig (line 5) | pub(crate) enum SearchConfig {
FILE: src/search_error.rs
type SearchError (line 5) | pub(crate) enum SearchError {
function multiple_candidates_formatting (line 40) | fn multiple_candidates_formatting() {
FILE: src/set.rs
type Set (line 4) | pub(crate) struct Set<'src> {
function key (line 10) | fn key(&self) -> &'src str {
method fmt (line 16) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/setting.rs
type Setting (line 4) | pub(crate) enum Setting<'src> {
function expressions (line 30) | pub(crate) fn expressions(&self) -> impl Iterator<Item = &Expression<'sr...
method fmt (line 54) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/settings.rs
constant DEFAULT_SHELL (line 3) | pub(crate) const DEFAULT_SHELL: &str = "sh";
constant DEFAULT_SHELL_ARGS (line 4) | pub(crate) const DEFAULT_SHELL_ARGS: &[&str] = &["-cu"];
constant WINDOWS_POWERSHELL_SHELL (line 5) | pub(crate) const WINDOWS_POWERSHELL_SHELL: &str = "powershell.exe";
constant WINDOWS_POWERSHELL_ARGS (line 6) | pub(crate) const WINDOWS_POWERSHELL_ARGS: &[&str] = &["-NoLogo", "-Comma...
type Settings (line 9) | pub(crate) struct Settings {
method shell_command (line 36) | pub(crate) fn shell_command(&self, config: &Config) -> Command {
method shell (line 46) | pub(crate) fn shell<'a>(&'a self, config: &'a Config) -> (&'a str, Vec...
function default_shell (line 80) | fn default_shell() {
function default_shell_powershell (line 92) | fn default_shell_powershell() {
function overwrite_shell (line 114) | fn overwrite_shell() {
function overwrite_shell_powershell (line 128) | fn overwrite_shell_powershell() {
function shell_cooked (line 145) | fn shell_cooked() {
function shell_present_but_not_shell_args (line 163) | fn shell_present_but_not_shell_args() {
function shell_args_present_but_not_shell (line 178) | fn shell_args_present_but_not_shell() {
FILE: src/shebang.rs
type Shebang (line 2) | pub(crate) struct Shebang<'line> {
function new (line 8) | pub(crate) fn new(line: &'line str) -> Option<Self> {
function interpreter_filename (line 33) | pub(crate) fn interpreter_filename(&self) -> &str {
function include_shebang_line (line 41) | pub(crate) fn include_shebang_line(&self) -> bool {
function split_shebang (line 51) | fn split_shebang() {
function interpreter_filename_with_forward_slash (line 111) | fn interpreter_filename_with_forward_slash() {
function interpreter_filename_with_backslash (line 121) | fn interpreter_filename_with_backslash() {
function dont_include_shebang_line_cmd (line 131) | fn dont_include_shebang_line_cmd() {
function dont_include_shebang_line_cmd_exe (line 136) | fn dont_include_shebang_line_cmd_exe() {
function include_shebang_line_other (line 141) | fn include_shebang_line_other() {
FILE: src/show_whitespace.rs
type ShowWhitespace (line 4) | pub(crate) struct ShowWhitespace<'str>(pub &'str str);
method fmt (line 7) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/sigil.rs
type Sigil (line 2) | pub(crate) enum Sigil {
FILE: src/signal.rs
type Signal (line 5) | pub(crate) enum Signal {
constant ALL (line 23) | pub(crate) const ALL: &'static [Self] = &[
method code (line 39) | pub(crate) fn code(self) -> i32 {
method is_fatal (line 43) | pub(crate) fn is_fatal(self) -> bool {
method number (line 58) | pub(crate) fn number(self) -> i32 {
type Error (line 109) | type Error = io::Error;
method try_from (line 111) | fn try_from(n: u8) -> Result<Self, Self::Error> {
method fmt (line 64) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function from (line 89) | fn from(signal: Signal) -> Self {
function signals_fit_in_u8 (line 137) | fn signals_fit_in_u8() {
function signals_have_valid_exit_codes (line 144) | fn signals_have_valid_exit_codes() {
function signal_numbers_are_correct (line 151) | fn signal_numbers_are_correct() {
FILE: src/signal_handler.rs
type SignalHandler (line 3) | pub(crate) struct SignalHandler {
method install (line 11) | pub(crate) fn install(verbosity: Verbosity) -> RunResult<'static> {
method instance (line 21) | pub(crate) fn instance() -> MutexGuard<'static, Self> {
method new (line 37) | const fn new() -> Self {
method handle (line 46) | fn handle(&mut self, signal: Signal) {
method spawn (line 110) | pub(crate) fn spawn<T>(
FILE: src/signals.rs
constant INVALID_FILENO (line 16) | const INVALID_FILENO: i32 = -1;
function die (line 20) | fn die(message: &str) -> ! {
function handler (line 46) | extern "C" fn handler(signal: libc::c_int) {
function fcntl (line 66) | fn fcntl(fd: &OwnedFd, arg: FcntlArg) -> RunResult<'static, libc::c_int> {
function set_cloexec (line 72) | fn set_cloexec(fd: &OwnedFd) -> RunResult<'static> {
type Signals (line 82) | pub(crate) struct Signals(File);
method new (line 85) | pub(crate) fn new() -> RunResult<'static, Self> {
type Item (line 132) | type Item = io::Result<Signal>;
method next (line 134) | fn next(&mut self) -> Option<Self::Item> {
FILE: src/source.rs
type Source (line 4) | pub(crate) struct Source<'src> {
function root (line 14) | pub(crate) fn root(path: &Path) -> Self {
function import (line 25) | pub(crate) fn import(&self, path: PathBuf, import_offset: usize) -> Self {
function module (line 46) | pub(crate) fn module(&self, name: Name<'src>, path: PathBuf) -> Self {
FILE: src/string_delimiter.rs
type StringDelimiter (line 2) | pub(crate) enum StringDelimiter {
FILE: src/string_kind.rs
type StringKind (line 4) | pub(crate) struct StringKind {
constant ALL (line 13) | const ALL: &'static [Self] = &[
method new (line 22) | const fn new(delimiter: StringDelimiter, indented: bool) -> Self {
method delimiter (line 29) | pub(crate) fn delimiter(self) -> &'static str {
method delimiter_len (line 40) | pub(crate) fn delimiter_len(self) -> usize {
method token_kind (line 44) | pub(crate) fn token_kind(self) -> TokenKind {
method unterminated_error_kind (line 51) | pub(crate) fn unterminated_error_kind(self) -> CompileErrorKind<'stati...
method processes_escape_sequences (line 60) | pub(crate) fn processes_escape_sequences(self) -> bool {
method indented (line 67) | pub(crate) fn indented(self) -> bool {
method from_string_or_backtick (line 71) | pub(crate) fn from_string_or_backtick(token: Token) -> CompileResult<S...
method from_token_start (line 79) | pub(crate) fn from_token_start(token_start: &str) -> Option<Self> {
FILE: src/string_literal.rs
type StringLiteral (line 4) | pub(crate) struct StringLiteral<'src> {
method fmt (line 13) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
method serialize (line 27) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/string_state.rs
type StringState (line 3) | pub(crate) enum StringState {
FILE: src/subcommand.rs
constant INIT_JUSTFILE (line 3) | pub const INIT_JUSTFILE: &str = "\
constant CHOOSER_CANCELLED_EXIT_STATUS (line 12) | const CHOOSER_CANCELLED_EXIT_STATUS: i32 = 130;
type Subcommand (line 15) | pub(crate) enum Subcommand {
method execute (line 66) | pub(crate) fn execute<'src>(&self, config: &Config, loader: &'src Load...
method groups (line 130) | fn groups(config: &Config, justfile: &Justfile) {
method run (line 137) | fn run<'src>(
method compile (line 195) | fn compile<'src>(
method changelog (line 213) | fn changelog() {
method choose (line 217) | fn choose<'src>(
method completions (line 309) | fn completions(shell: completions::Shell) {
method dump (line 313) | fn dump(compilation: Compilation, format: DumpFormat) -> RunResult<'st...
method edit (line 325) | fn edit(search: &Search) -> RunResult<'static> {
method format (line 347) | fn format<'src>(config: &Config, loader: &'src Loader, search: &Search...
method init (line 418) | fn init(config: &Config) -> RunResult<'static> {
method man (line 445) | fn man() -> RunResult<'static> {
method request (line 465) | fn request(request: &Request) -> RunResult<'static> {
method list (line 485) | fn list(config: &Config, mut module: &Justfile, path: &Modulepath) -> ...
method list_module (line 500) | fn list_module(
method show (line 783) | fn show<'src>(config: &Config, module: &Justfile<'src>, path: &Modulep...
method summary (line 795) | fn summary(config: &Config, justfile: &Justfile) {
method summary_recursive (line 805) | fn summary_recursive<'a>(
method usage (line 833) | fn usage<'src>(config: &Config, module: &Justfile<'src>, path: &Module...
method resolve_path (line 853) | fn resolve_path<'src, 'run>(
method variables (line 880) | fn variables(justfile: &Justfile) {
method default (line 58) | fn default() -> Self {
function init_justfile (line 901) | fn init_justfile() {
FILE: src/suggestion.rs
type Suggestion (line 4) | pub(crate) struct Suggestion<'src> {
method fmt (line 10) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/summary.rs
function summary (line 28) | pub fn summary(path: &Path) -> io::Result<Result<Summary, String>> {
type Summary (line 42) | pub struct Summary {
method new (line 48) | fn new(justfile: &full::Justfile) -> Self {
type Recipe (line 79) | pub struct Recipe {
method new (line 90) | fn new(recipe: &full::Recipe, aliases: Vec<String>) -> Self {
type Parameter (line 104) | pub struct Parameter {
method new (line 111) | fn new(parameter: &full::Parameter) -> Self {
type ParameterKind (line 121) | pub enum ParameterKind {
method new (line 128) | fn new(parameter_kind: full::ParameterKind) -> Self {
type Line (line 138) | pub struct Line {
method new (line 143) | fn new(line: &full::Line) -> Self {
type Fragment (line 151) | pub enum Fragment {
method new (line 157) | fn new(fragment: &full::Fragment) -> Self {
type Assignment (line 170) | pub struct Assignment {
method new (line 176) | fn new(assignment: &full::Assignment) -> Self {
type Expression (line 185) | pub enum Expression {
method new (line 233) | fn new(expression: &full::Expression) -> Self {
type Condition (line 364) | pub struct Condition {
type ConditionalOperator (line 371) | pub enum ConditionalOperator {
method new (line 379) | fn new(operator: full::ConditionalOperator) -> Self {
type Dependency (line 390) | pub struct Dependency {
method new (line 396) | fn new(dependency: &full::Dependency) -> Self {
FILE: src/switch.rs
type Switch (line 4) | pub(crate) enum Switch {
method fmt (line 10) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/table.rs
type Table (line 5) | pub(crate) struct Table<'key, V: Keyed<'key>> {
function new (line 10) | pub(crate) fn new() -> Self {
function insert (line 16) | pub(crate) fn insert(&mut self, value: V) {
function len (line 20) | pub(crate) fn len(&self) -> usize {
function get (line 24) | pub(crate) fn get(&self, key: &str) -> Option<&V> {
function is_empty (line 28) | pub(crate) fn is_empty(&self) -> bool {
function values (line 32) | pub(crate) fn values(&self) -> btree_map::Values<&'key str, V> {
function contains_key (line 36) | pub(crate) fn contains_key(&self, key: &str) -> bool {
function keys (line 40) | pub(crate) fn keys(&self) -> btree_map::Keys<&'key str, V> {
function iter (line 44) | pub(crate) fn iter(&self) -> btree_map::Iter<&'key str, V> {
function pop (line 48) | pub(crate) fn pop(&mut self) -> Option<V> {
function remove (line 53) | pub(crate) fn remove(&mut self, key: &str) -> Option<V> {
method default (line 59) | fn default() -> Self {
function from_iter (line 65) | fn from_iter<I: IntoIterator<Item = V>>(iter: I) -> Self {
type Output (line 73) | type Output = V;
function index (line 76) | fn index(&self, key: &str) -> &V {
type IntoIter (line 82) | type IntoIter = btree_map::IntoIter<&'key str, V>;
type Item (line 83) | type Item = (&'key str, V);
method into_iter (line 85) | fn into_iter(self) -> btree_map::IntoIter<&'key str, V> {
type IntoIter (line 91) | type IntoIter = btree_map::Iter<'table, &'table str, V>;
type Item (line 92) | type Item = (&'table &'table str, &'table V);
method into_iter (line 94) | fn into_iter(self) -> btree_map::Iter<'table, &'table str, V> {
FILE: src/testing.rs
function compile (line 3) | pub(crate) fn compile(src: &str) -> Justfile {
function config (line 7) | pub(crate) fn config(args: &[&str]) -> Config {
function search (line 18) | pub(crate) fn search(config: &Config) -> Search {
function tempdir (line 28) | pub(crate) fn tempdir() -> tempfile::TempDir {
function analysis_error (line 52) | pub(crate) fn analysis_error(
FILE: src/thunk.rs
type Thunk (line 6) | pub(crate) enum Thunk<'src> {
function name (line 51) | pub(crate) fn name(&self) -> Name<'src> {
function resolve (line 63) | pub(crate) fn resolve(
method fmt (line 139) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
method serialize (line 188) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/token.rs
type Token (line 4) | pub(crate) struct Token<'src> {
function lexeme (line 15) | pub(crate) fn lexeme(&self) -> &'src str {
function error (line 19) | pub(crate) fn error(&self, kind: CompileErrorKind<'src>) -> CompileError...
method fmt (line 25) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
FILE: src/token_kind.rs
type TokenKind (line 4) | pub(crate) enum TokenKind {
method fmt (line 48) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/tree.rs
type Tree (line 50) | pub(crate) enum Tree<'text> {
function atom (line 59) | pub(crate) fn atom(text: impl Into<Cow<'text, str>>) -> Self {
function list (line 64) | pub(crate) fn list(children: impl IntoIterator<Item = Self>) -> Self {
function string (line 69) | pub(crate) fn string(contents: impl AsRef<str>) -> Self {
function push (line 74) | pub(crate) fn push(self, tree: impl Into<Self>) -> Self {
function extend (line 86) | pub(crate) fn extend<I, T>(self, tail: I) -> Self
function push_mut (line 105) | pub(crate) fn push_mut(&mut self, tree: impl Into<Self>) {
method fmt (line 111) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
function from (line 134) | fn from(text: T) -> Self {
FILE: src/unindent.rs
function unindent (line 2) | pub fn unindent(text: &str) -> String {
function indentation (line 47) | fn indentation(line: &str) -> &str {
function blank (line 58) | fn blank(line: &str) -> bool {
function common (line 62) | fn common<'s>(a: &'s str, b: &'s str) -> &'s str {
function unindents (line 79) | fn unindents() {
function indentations (line 112) | fn indentations() {
function blanks (line 121) | fn blanks() {
function commons (line 128) | fn commons() {
FILE: src/unresolved_dependency.rs
type UnresolvedDependency (line 4) | pub(crate) struct UnresolvedDependency<'src> {
method fmt (line 10) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/unresolved_recipe.rs
type UnresolvedRecipe (line 3) | pub(crate) type UnresolvedRecipe<'src> = Recipe<'src, UnresolvedDependen...
function resolve (line 6) | pub(crate) fn resolve(
function resolve_variable (line 118) | fn resolve_variable(
FILE: src/unstable_feature.rs
type UnstableFeature (line 4) | pub(crate) enum UnstableFeature {
method fmt (line 13) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
FILE: src/usage.rs
type Usage (line 3) | pub(crate) struct Usage<'a, D> {
method fmt (line 10) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
type UsageParameter (line 118) | struct UsageParameter<'a> {
method fmt (line 124) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
FILE: src/use_color.rs
type UseColor (line 4) | pub(crate) enum UseColor {
FILE: src/variables.rs
type Variables (line 3) | pub(crate) struct Variables<'expression, 'src> {
function new (line 8) | pub(crate) fn new(root: &'expression Expression<'src>) -> Self {
type Item (line 14) | type Item = Name<'src>;
method next (line 16) | fn next(&mut self) -> Option<Name<'src>> {
FILE: src/verbosity.rs
type Verbosity (line 3) | pub(crate) enum Verbosity {
method from_flag_occurrences (line 11) | pub(crate) fn from_flag_occurrences(flag_occurrences: u8) -> Self {
method quiet (line 19) | pub(crate) fn quiet(self) -> bool {
method loud (line 23) | pub(crate) fn loud(self) -> bool {
method loquacious (line 27) | pub(crate) fn loquacious(self) -> bool {
method grandiloquent (line 31) | pub(crate) fn grandiloquent(self) -> bool {
method default (line 35) | pub(crate) const fn default() -> Self {
method default (line 41) | fn default() -> Self {
FILE: src/warning.rs
type Warning (line 4) | pub(crate) enum Warning {}
method context (line 8) | fn context(&self) -> Option<&Token> {
method fmt (line 14) | fn fmt(&self, f: &mut Formatter, color: Color) -> fmt::Result {
method serialize (line 32) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
FILE: src/which.rs
function which (line 3) | pub(crate) fn which(context: function::Context, name: &str) -> Result<Op...
FILE: tests/alias.rs
function alias_nested_module (line 4) | fn alias_nested_module() {
function unknown_nested_alias (line 24) | fn unknown_nested_alias() {
function alias_in_submodule (line 48) | fn alias_in_submodule() {
FILE: tests/alias_style.rs
function default (line 4) | fn default() {
function multiple (line 28) | fn multiple() {
function right (line 53) | fn right() {
function left (line 77) | fn left() {
function separate (line 101) | fn separate() {
FILE: tests/allow_duplicate_recipes.rs
function allow_duplicate_recipes (line 4) | fn allow_duplicate_recipes() {
function allow_duplicate_recipes_with_args (line 22) | fn allow_duplicate_recipes_with_args() {
FILE: tests/allow_duplicate_variables.rs
function allow_duplicate_variables (line 4) | fn allow_duplicate_variables() {
FILE: tests/allow_missing.rs
function allow_missing_recipes_in_run_invocation (line 4) | fn allow_missing_recipes_in_run_invocation() {
function allow_missing_modules_in_run_invocation (line 14) | fn allow_missing_modules_in_run_invocation() {
function allow_missing_does_not_apply_to_compilation_errors (line 24) | fn allow_missing_does_not_apply_to_compilation_errors() {
function allow_missing_does_not_apply_to_other_subcommands (line 41) | fn allow_missing_does_not_apply_to_other_subcommands() {
FILE: tests/arg_attribute.rs
function pattern_match (line 4) | fn pattern_match() {
function pattern_mismatch (line 17) | fn pattern_mismatch() {
function patterns_are_regulare_expressions (line 35) | fn patterns_are_regulare_expressions() {
function pattern_must_match_entire_string (line 53) | fn pattern_must_match_entire_string() {
function pattern_invalid_regex_error (line 71) | fn pattern_invalid_regex_error() {
function dump (line 96) | fn dump() {
function duplicate_attribute_error (line 115) | fn duplicate_attribute_error() {
function extra_keyword_error (line 138) | fn extra_keyword_error() {
function unknown_argument_error (line 160) | fn unknown_argument_error() {
function split_across_multiple_lines (line 182) | fn split_across_multiple_lines() {
function optional_trailing_comma (line 198) | fn optional_trailing_comma() {
function positional_arguments_cannot_follow_keyword_arguments (line 214) | fn positional_arguments_cannot_follow_keyword_arguments() {
function pattern_mismatches_are_caught_before_running_dependencies (line 236) | fn pattern_mismatches_are_caught_before_running_dependencies() {
function pattern_mismatches_are_caught_before_running_invocation (line 257) | fn pattern_mismatches_are_caught_before_running_invocation() {
function pattern_mismatches_are_caught_in_evaluated_arguments (line 278) | fn pattern_mismatches_are_caught_in_evaluated_arguments() {
function alternates_do_not_bind_to_anchors (line 297) | fn alternates_do_not_bind_to_anchors() {
function pattern_match_variadic (line 315) | fn pattern_match_variadic() {
function pattern_mismatch_variadic (line 328) | fn pattern_mismatch_variadic() {
function pattern_requires_value (line 346) | fn pattern_requires_value() {
function short_requires_value (line 367) | fn short_requires_value() {
function value_requires_value (line 388) | fn value_requires_value() {
FILE: tests/assert_stdout.rs
function assert_stdout (line 3) | pub(crate) fn assert_stdout(output: &std::process::Output, stdout: &str) {
FILE: tests/assert_success.rs
function assert_success (line 2) | pub(crate) fn assert_success(output: &std::process::Output) {
FILE: tests/assertions.rs
function assert_pass (line 4) | fn assert_pass() {
function assert_fail (line 16) | fn assert_fail() {
FILE: tests/assignment.rs
function set_export_parse_error (line 4) | fn set_export_parse_error() {
function set_export_parse_error_eol (line 24) | fn set_export_parse_error_eol() {
function invalid_attributes_are_an_error (line 44) | fn invalid_attributes_are_an_error() {
FILE: tests/attributes.rs
function all (line 4) | fn all() {
function duplicate_attributes_are_disallowed (line 26) | fn duplicate_attributes_are_disallowed() {
function multiple_attributes_one_line (line 49) | fn multiple_attributes_one_line() {
function multiple_attributes_one_line_error_message (line 64) | fn multiple_attributes_one_line_error_message() {
function multiple_attributes_one_line_duplicate_check (line 87) | fn multiple_attributes_one_line_duplicate_check() {
function unexpected_attribute_argument (line 110) | fn unexpected_attribute_argument() {
function multiple_metadata_attributes (line 132) | fn multiple_metadata_attributes() {
function multiple_metadata_attributes_with_multiple_args (line 148) | fn multiple_metadata_attributes_with_multiple_args() {
function expected_metadata_attribute_argument (line 164) | fn expected_metadata_attribute_argument() {
function doc_attribute (line 186) | fn doc_attribute() {
function doc_attribute_suppress (line 207) | fn doc_attribute_suppress() {
function doc_multiline (line 228) | fn doc_multiline() {
function extension (line 250) | fn extension() {
function extension_on_linewise_error (line 265) | fn extension_on_linewise_error() {
function duplicate_non_repeatable_attributes_are_forbidden (line 286) | fn duplicate_non_repeatable_attributes_are_forbidden() {
function shell_expanded_strings_can_be_used_in_attributes (line 308) | fn shell_expanded_strings_can_be_used_in_attributes() {
function env_attribute_single (line 320) | fn env_attribute_single() {
function env_attribute_multiple (line 334) | fn env_attribute_multiple() {
function env_attribute_in_recipe_params (line 349) | fn env_attribute_in_recipe_params() {
function env_attribute_not_in_env_function (line 363) | fn env_attribute_not_in_env_function() {
function env_attribute_too_few_arguments (line 388) | fn env_attribute_too_few_arguments() {
function env_attribute_too_many_arguments (line 410) | fn env_attribute_too_many_arguments() {
function env_attribute_duplicate_error (line 432) | fn env_attribute_duplicate_error() {
FILE: tests/backticks.rs
function trailing_newlines_are_stripped (line 4) | fn trailing_newlines_are_stripped() {
FILE: tests/byte_order_mark.rs
function ignore_leading_byte_order_mark (line 4) | fn ignore_leading_byte_order_mark() {
function non_leading_byte_order_mark_produces_error (line 18) | fn non_leading_byte_order_mark_produces_error() {
function dont_mention_byte_order_mark_in_errors (line 39) | fn dont_mention_byte_order_mark_in_errors() {
FILE: tests/ceiling.rs
function justfile_run_search_stops_at_ceiling_dir (line 4) | fn justfile_run_search_stops_at_ceiling_dir() {
function ceiling_can_be_passed_as_environment_variable (line 32) | fn ceiling_can_be_passed_as_environment_variable() {
function justfile_init_search_stops_at_ceiling_dir (line 60) | fn justfile_init_search_stops_at_ceiling_dir() {
FILE: tests/changelog.rs
function print_changelog (line 4) | fn print_changelog() {
FILE: tests/choose.rs
function env (line 4) | fn env() {
function chooser (line 23) | fn chooser() {
function override_variable (line 43) | fn override_variable() {
function skip_private_recipes (line 65) | fn skip_private_recipes() {
function recipes_in_submodules_can_be_chosen (line 84) | fn recipes_in_submodules_can_be_chosen() {
function skip_recipes_that_require_arguments (line 100) | fn skip_recipes_that_require_arguments() {
function no_choosable_recipes (line 119) | fn no_choosable_recipes() {
function multiple_recipes (line 136) | fn multiple_recipes() {
function invoke_error_function (line 156) | fn invoke_error_function() {
function status_error (line 176) | fn status_error() {
function cancelled_by_user (line 217) | fn cancelled_by_user() {
function default (line 249) | fn default() {
FILE: tests/command.rs
function long (line 4) | fn long() {
function short (line 20) | fn short() {
function command_color (line 36) | fn command_color() {
function no_binary (line 54) | fn no_binary() {
function env_is_loaded (line 74) | fn env_is_loaded() {
function exports_are_available (line 91) | fn exports_are_available() {
function set_overrides_work (line 110) | fn set_overrides_work() {
function run_in_shell (line 132) | fn run_in_shell() {
function exit_status (line 148) | fn exit_status() {
function working_directory_is_correct (line 163) | fn working_directory_is_correct() {
function command_not_found (line 184) | fn command_not_found() {
function dont_evaluate_unnecessary_variables (line 204) | fn dont_evaluate_unnecessary_variables() {
FILE: tests/completions.rs
function bash (line 4) | fn bash() {
function replacements (line 32) | fn replacements() {
FILE: tests/conditional.rs
function then_branch_unevaluated (line 4) | fn then_branch_unevaluated() {
function otherwise_branch_unevaluated (line 18) | fn otherwise_branch_unevaluated() {
function otherwise_branch_unevaluated_inverted (line 32) | fn otherwise_branch_unevaluated_inverted() {
function then_branch_unevaluated_inverted (line 46) | fn then_branch_unevaluated_inverted() {
function complex_expressions (line 60) | fn complex_expressions() {
function undefined_lhs (line 74) | fn undefined_lhs() {
function undefined_rhs (line 97) | fn undefined_rhs() {
function undefined_then (line 120) | fn undefined_then() {
function undefined_otherwise (line 143) | fn undefined_otherwise() {
function unexpected_op (line 166) | fn unexpected_op() {
function dump (line 189) | fn dump() {
function if_else (line 212) | fn if_else() {
function missing_else (line 228) | fn missing_else() {
function incorrect_else_identifier (line 248) | fn incorrect_else_identifier() {
FILE: tests/confirm.rs
function confirm_recipe_arg (line 4) | fn confirm_recipe_arg() {
function recipe_with_confirm_recipe_dependency_arg (line 20) | fn recipe_with_confirm_recipe_dependency_arg() {
function confirm_recipe (line 39) | fn confirm_recipe() {
function recipe_with_confirm_recipe_dependency (line 55) | fn recipe_with_confirm_recipe_dependency() {
function do_not_confirm_recipe (line 74) | fn do_not_confirm_recipe() {
function do_not_confirm_recipe_with_confirm_recipe_dependency (line 88) | fn do_not_confirm_recipe_with_confirm_recipe_dependency() {
function confirm_recipe_with_prompt (line 105) | fn confirm_recipe_with_prompt() {
function confirm_recipe_with_prompt_too_many_args (line 121) | fn confirm_recipe_with_prompt_too_many_args() {
function confirm_attribute_is_formatted_correctly (line 143) | fn confirm_attribute_is_formatted_correctly() {
FILE: tests/constants.rs
function constants_are_defined (line 4) | fn constants_are_defined() {
function constants_can_have_different_values_on_windows (line 9) | fn constants_can_have_different_values_on_windows() {
function constants_are_defined_in_recipe_bodies (line 15) | fn constants_are_defined_in_recipe_bodies() {
function constants_are_defined_in_recipe_parameters (line 28) | fn constants_are_defined_in_recipe_parameters() {
function constants_can_be_redefined (line 41) | fn constants_can_be_redefined() {
function constants_are_not_exported (line 54) | fn constants_are_not_exported() {
FILE: tests/datetime.rs
function datetime (line 4) | fn datetime() {
function datetime_utc (line 17) | fn datetime_utc() {
FILE: tests/default.rs
function default_attribute_overrides_first_recipe (line 4) | fn default_attribute_overrides_first_recipe() {
function default_attribute_may_only_appear_once_per_justfile (line 21) | fn default_attribute_may_only_appear_once_per_justfile() {
FILE: tests/delimiters.rs
function mismatched_delimiter (line 4) | fn mismatched_delimiter() {
function unexpected_delimiter (line 20) | fn unexpected_delimiter() {
function paren_continuation (line 36) | fn paren_continuation() {
function brace_continuation (line 56) | fn brace_continuation() {
function bracket_continuation (line 76) | fn bracket_continuation() {
function dependency_continuation (line 95) | fn dependency_continuation() {
function interpolation_continuation (line 114) | fn interpolation_continuation() {
FILE: tests/dependencies.rs
function recipe_doubly_nested_module_dependencies (line 4) | fn recipe_doubly_nested_module_dependencies() {
function recipe_singly_nested_module_dependencies (line 21) | fn recipe_singly_nested_module_dependencies() {
function dependency_not_in_submodule (line 37) | fn dependency_not_in_submodule() {
function dependency_submodule_missing (line 59) | fn dependency_submodule_missing() {
function recipe_dependency_on_module_fails (line 83) | fn recipe_dependency_on_module_fails() {
function recipe_module_dependency_subsequent_mix (line 106) | fn recipe_module_dependency_subsequent_mix() {
function recipe_module_dependency_only_runs_once (line 124) | fn recipe_module_dependency_only_runs_once() {
FILE: tests/directories.rs
function cache_directory (line 4) | fn cache_directory() {
function config_directory (line 13) | fn config_directory() {
function config_local_directory (line 22) | fn config_local_directory() {
function data_directory (line 35) | fn data_directory() {
function data_local_directory (line 44) | fn data_local_directory() {
function executable_directory (line 53) | fn executable_directory() {
function home_directory (line 78) | fn home_directory() {
FILE: tests/dotenv.rs
function dotenv (line 4) | fn dotenv() {
function set_false (line 16) | fn set_false() {
function set_implicit (line 32) | fn set_implicit() {
function set_true (line 49) | fn set_true() {
function no_warning (line 66) | fn no_warning() {
function dotenv_required (line 81) | fn dotenv_required() {
function path_resolves (line 95) | fn path_resolves() {
function filename_resolves (line 114) | fn filename_resolves() {
function filename_flag_overwrites_no_load (line 131) | fn filename_flag_overwrites_no_load() {
function path_flag_overwrites_no_load (line 150) | fn path_flag_overwrites_no_load() {
function can_set_dotenv_filename_from_justfile (line 171) | fn can_set_dotenv_filename_from_justfile() {
function can_set_dotenv_path_from_justfile (line 189) | fn can_set_dotenv_path_from_justfile() {
function program_argument_has_priority_for_dotenv_filename (line 209) | fn program_argument_has_priority_for_dotenv_filename() {
function program_argument_has_priority_for_dotenv_path (line 229) | fn program_argument_has_priority_for_dotenv_path() {
function dotenv_path_is_relative_to_working_directory (line 251) | fn dotenv_path_is_relative_to_working_directory() {
function dotenv_variable_in_recipe (line 269) | fn dotenv_variable_in_recipe() {
function dotenv_variable_in_backtick (line 286) | fn dotenv_variable_in_backtick() {
function dotenv_variable_in_function_in_recipe (line 303) | fn dotenv_variable_in_function_in_recipe() {
function dotenv_variable_in_function_in_backtick (line 320) | fn dotenv_variable_in_function_in_backtick() {
function no_dotenv (line 339) | fn no_dotenv() {
function dotenv_env_var_default_no_override (line 356) | fn dotenv_env_var_default_no_override() {
function dotenv_env_var_override (line 372) | fn dotenv_env_var_override() {
function dotenv_env_var_override_no_load (line 390) | fn dotenv_env_var_override_no_load() {
function dotenv_path_usable_from_subdir (line 407) | fn dotenv_path_usable_from_subdir() {
function dotenv_path_does_not_override_dotenv_file (line 425) | fn dotenv_path_does_not_override_dotenv_file() {
function error_message (line 438) | fn error_message() {
FILE: tests/dump.rs
function dump (line 4) | fn dump() {
function json (line 25) | fn json() {
FILE: tests/edit.rs
constant JUSTFILE (line 3) | const JUSTFILE: &str = "Yooooooo, hopefully this never becomes valid syn...
function invalid_justfile (line 7) | fn invalid_justfile() {
function invoke_error (line 27) | fn invoke_error() {
function status_error (line 54) | fn status_error() {
function editor_precedence (line 95) | fn editor_precedence() {
function editor_working_directory (line 149) | fn editor_working_directory() {
FILE: tests/equals.rs
function export_recipe (line 4) | fn export_recipe() {
function alias_recipe (line 18) | fn alias_recipe() {
FILE: tests/error_messages.rs
function invalid_alias_attribute (line 4) | fn invalid_alias_attribute() {
function expected_keyword (line 20) | fn expected_keyword() {
function unexpected_character (line 36) | fn unexpected_character() {
function argument_count_mismatch (line 52) | fn argument_count_mismatch() {
function file_path_is_indented_if_justfile_is_long (line 67) | fn file_path_is_indented_if_justfile_is_long() {
function file_paths_are_relative (line 83) | fn file_paths_are_relative() {
function file_paths_not_in_subdir_are_absolute (line 100) | fn file_paths_not_in_subdir_are_absolute() {
function redefinition_errors_properly_swap_types (line 121) | fn redefinition_errors_properly_swap_types() {
FILE: tests/evaluate.rs
function evaluate (line 4) | fn evaluate() {
function evaluate_empty (line 29) | fn evaluate_empty() {
function evaluate_multiple (line 46) | fn evaluate_multiple() {
function evaluate_single_free (line 63) | fn evaluate_single_free() {
function evaluate_no_suggestion (line 79) | fn evaluate_no_suggestion() {
function evaluate_suggestion (line 98) | fn evaluate_suggestion() {
function evaluate_private (line 116) | fn evaluate_private() {
function evaluate_single_private (line 132) | fn evaluate_single_private() {
function dont_evaluate_unnecessary_variables (line 149) | fn dont_evaluate_unnecessary_variables() {
FILE: tests/examples.rs
function examples (line 4) | fn examples() {
FILE: tests/explain.rs
function explain_recipe (line 4) | fn explain_recipe() {
FILE: tests/export.rs
function success (line 4) | fn success() {
function parameter (line 23) | fn parameter() {
function parameter_not_visible_to_backtick (line 41) | fn parameter_not_visible_to_backtick() {
function override_variable (line 58) | fn override_variable() {
function shebang (line 81) | fn shebang() {
function recipe_backtick (line 100) | fn recipe_backtick() {
function setting_implicit (line 116) | fn setting_implicit() {
function setting_true (line 138) | fn setting_true() {
function setting_false (line 160) | fn setting_false() {
function setting_shebang (line 178) | fn setting_shebang() {
function setting_override_undefined (line 199) | fn setting_override_undefined() {
function setting_variable_not_visible (line 221) | fn setting_variable_not_visible() {
function variables_exported_with_setting_are_visible_in_child (line 239) | fn variables_exported_with_setting_are_visible_in_child() {
FILE: tests/fallback.rs
function fallback_from_subdir_bugfix (line 4) | fn fallback_from_subdir_bugfix() {
function fallback_from_subdir_message (line 23) | fn fallback_from_subdir_message() {
function fallback_from_subdir_verbose_message (line 44) | fn fallback_from_subdir_verbose_message() {
function runs_recipe_in_parent_if_not_found_in_current (line 71) | fn runs_recipe_in_parent_if_not_found_in_current() {
function setting_accepts_value (line 101) | fn setting_accepts_value() {
function print_error_from_parent_if_recipe_not_found_in_current (line 131) | fn print_error_from_parent_if_recipe_not_found_in_current() {
function requires_setting (line 159) | fn requires_setting() {
function works_with_provided_search_directory (line 182) | fn works_with_provided_search_directory() {
function doesnt_work_with_justfile (line 212) | fn doesnt_work_with_justfile() {
function doesnt_work_with_justfile_and_working_directory (line 235) | fn doesnt_work_with_justfile_and_working_directory() {
function prints_correct_error_message_when_recipe_not_found (line 258) | fn prints_correct_error_message_when_recipe_not_found() {
function multiple_levels_of_fallback_work (line 287) | fn multiple_levels_of_fallback_work() {
function stop_fallback_when_fallback_is_false (line 325) | fn stop_fallback_when_fallback_is_false() {
function works_with_modules (line 361) | fn works_with_modules() {
FILE: tests/format.rs
function unstable_not_passed (line 4) | fn unstable_not_passed() {
function check_without_fmt (line 13) | fn check_without_fmt() {
function check_ok (line 26) | fn check_ok() {
function check_found_diff (line 51) | fn check_found_diff() {
function check_found_diff_quiet (line 72) | fn check_found_diff_quiet() {
function check_diff_color (line 83) | fn check_diff_color() {
function unstable_passed (line 97) | fn unstable_passed() {
function write_error (line 121) | fn write_error() {
function alias_good (line 161) | fn alias_good() {
function alias_fix_indent (line 184) | fn alias_fix_indent() {
function assignment_singlequote (line 207) | fn assignment_singlequote() {
function assignment_doublequote (line 224) | fn assignment_doublequote() {
function assignment_indented_singlequote (line 241) | fn assignment_indented_singlequote() {
function assignment_indented_doublequote (line 262) | fn assignment_indented_doublequote() {
function assignment_backtick (line 283) | fn assignment_backtick() {
function assignment_indented_backtick (line 300) | fn assignment_indented_backtick() {
function assignment_name (line 321) | fn assignment_name() {
function assignment_parenthesized_expression (line 340) | fn assignment_parenthesized_expression() {
function assignment_export (line 357) | fn assignment_export() {
function assignment_concat_values (line 374) | fn assignment_concat_values() {
function assignment_if_oneline (line 391) | fn assignment_if_oneline() {
function assignment_if_multiline (line 408) | fn assignment_if_multiline() {
function assignment_nullary_function (line 429) | fn assignment_nullary_function() {
function assignment_unary_function (line 446) | fn assignment_unary_function() {
function assignment_binary_function (line 463) | fn assignment_binary_function() {
function assignment_path_functions (line 480) | fn assignment_path_functions() {
function recipe_ordinary (line 505) | fn recipe_ordinary() {
function recipe_with_docstring (line 524) | fn recipe_with_docstring() {
function recipe_with_comments_in_body (line 545) | fn recipe_with_comments_in_body() {
function recipe_body_is_comment (line 566) | fn recipe_body_is_comment() {
function recipe_several_commands (line 585) | fn recipe_several_commands() {
function recipe_quiet (line 606) | fn recipe_quiet() {
function recipe_quiet_command (line 625) | fn recipe_quiet_command() {
function recipe_quiet_comment (line 644) | fn recipe_quiet_comment() {
function recipe_ignore_errors (line 663) | fn recipe_ignore_errors() {
function recipe_parameter (line 682) | fn recipe_parameter() {
function recipe_parameter_default (line 701) | fn recipe_parameter_default() {
function recipe_parameter_envar (line 720) | fn recipe_parameter_envar() {
function recipe_parameter_default_envar (line 739) | fn recipe_parameter_default_envar() {
function recipe_parameter_concat (line 758) | fn recipe_parameter_concat() {
function recipe_parameters (line 777) | fn recipe_parameters() {
function recipe_parameters_envar (line 796) | fn recipe_parameters_envar() {
function recipe_variadic_plus (line 815) | fn recipe_variadic_plus() {
function recipe_variadic_star (line 834) | fn recipe_variadic_star() {
function recipe_positional_variadic (line 853) | fn recipe_positional_variadic() {
function recipe_variadic_default (line 872) | fn recipe_variadic_default() {
function recipe_parameter_in_body (line 891) | fn recipe_parameter_in_body() {
function recipe_parameter_conditional (line 910) | fn recipe_parameter_conditional() {
function recipe_escaped_braces (line 929) | fn recipe_escaped_braces() {
function recipe_assignment_in_body (line 948) | fn recipe_assignment_in_body() {
function recipe_dependency (line 971) | fn recipe_dependency() {
function recipe_dependency_param (line 996) | fn recipe_dependency_param() {
function recipe_dependency_params (line 1021) | fn recipe_dependency_params() {
function recipe_dependencies (line 1046) | fn recipe_dependencies() {
function recipe_dependencies_params (line 1077) | fn recipe_dependencies_params() {
function set_true_explicit (line 1108) | fn set_true_explicit() {
function set_true_implicit (line 1125) | fn set_true_implicit() {
function set_false (line 1142) | fn set_false() {
function set_shell (line 1159) | fn set_shell() {
function comment (line 1176) | fn comment() {
function comment_multiline (line 1193) | fn comment_multiline() {
function comment_leading (line 1212) | fn comment_leading() {
function comment_trailing (line 1233) | fn comment_trailing() {
function comment_before_recipe (line 1254) | fn comment_before_recipe() {
function comment_before_docstring_recipe (line 1277) | fn comment_before_docstring_recipe() {
function group_recipes (line 1302) | fn group_recipes() {
function group_aliases (line 1326) | fn group_aliases() {
function group_assignments (line 1358) | fn group_assignments() {
function group_sets (line 1377) | fn group_sets() {
function group_comments (line 1396) | fn group_comments() {
function separate_recipes_aliases (line 1416) | fn separate_recipes_aliases() {
function no_trailing_newline (line 1438) | fn no_trailing_newline() {
function subsequent (line 1456) | fn subsequent() {
function exported_parameter (line 1477) | fn exported_parameter() {
function multi_argument_attribute (line 1486) | fn multi_argument_attribute() {
function doc_attribute_suppresses_comment (line 1509) | fn doc_attribute_suppresses_comment() {
function unchanged_justfiles_are_not_written_to_disk (line 1533) | fn unchanged_justfiles_are_not_written_to_disk() {
function if_else (line 1551) | fn if_else() {
function private_variable (line 1568) | fn private_variable() {
function module_groups_are_preserved (line 1587) | fn module_groups_are_preserved() {
function module_docs_are_preserved (line 1609) | fn module_docs_are_preserved() {
function arg_attribute_long (line 1629) | fn arg_attribute_long() {
function arg_attribute_pattern (line 1648) | fn arg_attribute_pattern() {
function arg_attribute_long_and_pattern (line 1667) | fn arg_attribute_long_and_pattern() {
function arg_attribute_help (line 1686) | fn arg_attribute_help() {
function missing_import_file (line 1705) | fn missing_import_file() {
function missing_module_file (line 1714) | fn missing_module_file() {
function undefined_variable (line 1723) | fn undefined_variable() {
FILE: tests/format_string.rs
function empty (line 4) | fn empty() {
function simple (line 20) | fn simple() {
function compound (line 35) | fn compound() {
function newline (line 51) | fn newline() {
function conditional (line 69) | fn conditional() {
function conditional_no_whitespace (line 86) | fn conditional_no_whitespace() {
function inner_delimiter (line 101) | fn inner_delimiter() {
function nested (line 117) | fn nested() {
function recipe_body (line 133) | fn recipe_body() {
function unclosed (line 147) | fn unclosed() {
function unmatched_close_is_ignored (line 163) | fn unmatched_close_is_ignored() {
function delimiter_may_be_escaped_in_double_quoted_strings (line 179) | fn delimiter_may_be_escaped_in_double_quoted_strings() {
function delimiter_may_be_escaped_in_single_quoted_strings (line 192) | fn delimiter_may_be_escaped_in_single_quoted_strings() {
function escaped_delimiter_is_ignored_in_normal_strings (line 205) | fn escaped_delimiter_is_ignored_in_normal_strings() {
function escaped_delimiter_in_single_quoted_format_string (line 218) | fn escaped_delimiter_in_single_quoted_format_string() {
function escaped_delimiter_in_double_quoted_format_string (line 231) | fn escaped_delimiter_in_double_quoted_format_string() {
function double_quotes_process_escapes (line 252) | fn double_quotes_process_escapes() {
function single_quotes_do_not_process_escapes (line 265) | fn single_quotes_do_not_process_escapes() {
function indented_format_strings (line 278) | fn indented_format_strings() {
function un_indented_format_strings (line 295) | fn un_indented_format_strings() {
function dump (line 313) | fn dump() {
function undefined_variable_error (line 336) | fn undefined_variable_error() {
function format_string_followed_by_recipe (line 356) | fn format_string_followed_by_recipe() {
FILE: tests/functions.rs
function test_os_arch_functions_in_interpolation (line 4) | fn test_os_arch_functions_in_interpolation() {
function test_os_arch_functions_in_expression (line 36) | fn test_os_arch_functions_in_expression() {
function env_var_functions_unix (line 73) | fn env_var_functions_unix() {
function path_functions (line 100) | fn path_functions() {
function path_functions2 (line 124) | fn path_functions2() {
function broken_without_extension_function (line 147) | fn broken_without_extension_function() {
function broken_extension_function (line 176) | fn broken_extension_function() {
function broken_extension_function2 (line 204) | fn broken_extension_function2() {
function broken_file_stem_function (line 232) | fn broken_file_stem_function() {
function broken_file_name_function (line 260) | fn broken_file_name_function() {
function broken_directory_function (line 288) | fn broken_directory_function() {
function broken_directory_function2 (line 317) | fn broken_directory_function2() {
function env_var_functions_windows (line 346) | fn env_var_functions_windows() {
function env_var_failure (line 373) | fn env_var_failure() {
function test_just_executable_function (line 389) | fn test_just_executable_function() {
function test_os_arch_functions_in_default (line 403) | fn test_os_arch_functions_in_default() {
function clean (line 435) | fn clean() {
function uppercase (line 449) | fn uppercase() {
function lowercase (line 463) | fn lowercase() {
function uppercamelcase (line 477) | fn uppercamelcase() {
function lowercamelcase (line 491) | fn lowercamelcase() {
function snakecase (line 505) | fn snakecase() {
function kebabcase (line 519) | fn kebabcase() {
function shoutysnakecase (line 533) | fn shoutysnakecase() {
function titlecase (line 547) | fn titlecase() {
function shoutykebabcase (line 561) | fn shoutykebabcase() {
function trim (line 575) | fn trim() {
function replace (line 589) | fn replace() {
function replace_regex (line 603) | fn replace_regex() {
function invalid_replace_regex (line 617) | fn invalid_replace_regex() {
function capitalize (line 640) | fn capitalize() {
function semver_matches (line 654) | fn semver_matches() {
function trim_end_matches (line 669) | fn trim_end_matches() {
function trim_end_match (line 676) | fn trim_end_match() {
function trim_start_matches (line 682) | fn trim_start_matches() {
function trim_start_match (line 689) | fn trim_start_match() {
function trim_start (line 695) | fn trim_start() {
function trim_end (line 700) | fn trim_end() {
function append (line 705) | fn append() {
function prepend (line 725) | fn prepend() {
function join_unix (line 747) | fn join_unix() {
function join_windows (line 758) | fn join_windows() {
function join_argument_count_error (line 769) | fn join_argument_count_error() {
function test_path_exists_filepath_exist (line 786) | fn test_path_exists_filepath_exist() {
function test_path_exists_filepath_doesnt_exist (line 798) | fn test_path_exists_filepath_doesnt_exist() {
function error_errors_with_message (line 807) | fn error_errors_with_message() {
function test_absolute_path_resolves (line 824) | fn test_absolute_path_resolves() {
function test_absolute_path_resolves_parent (line 844) | fn test_absolute_path_resolves_parent() {
function path_exists_subdir (line 872) | fn path_exists_subdir() {
function uuid (line 887) | fn uuid() {
function choose (line 896) | fn choose() {
function choose_bad_alphabet_empty (line 905) | fn choose_bad_alphabet_empty() {
function choose_bad_alphabet_repeated (line 922) | fn choose_bad_alphabet_repeated() {
function choose_bad_length (line 939) | fn choose_bad_length() {
function sha256 (line 956) | fn sha256() {
function sha256_file (line 965) | fn sha256_file() {
function just_pid (line 980) | fn just_pid() {
function shell_no_argument (line 991) | fn shell_no_argument() {
function shell_minimal (line 1008) | fn shell_minimal() {
function shell_args (line 1013) | fn shell_args() {
function shell_first_arg (line 1018) | fn shell_first_arg() {
function shell_error (line 1023) | fn shell_error() {
function blake3 (line 1040) | fn blake3() {
function blake3_file (line 1049) | fn blake3_file() {
function canonicalize (line 1065) | fn canonicalize() {
function encode_uri_component (line 1075) | fn encode_uri_component() {
function source_file (line 1084) | fn source_file() {
function source_directory (line 1115) | fn source_directory() {
function module_paths (line 1132) | fn module_paths() {
function is_dependency (line 1253) | fn is_dependency() {
function unary_argument_count_mismamatch_error_message (line 1276) | fn unary_argument_count_mismamatch_error_message() {
function dir_abbreviations_are_accepted (line 1293) | fn dir_abbreviations_are_accepted() {
function invocation_dir_native_abbreviation_is_accepted (line 1308) | fn invocation_dir_native_abbreviation_is_accepted() {
function absolute_path_argument_is_relative_to_submodule_working_directory (line 1323) | fn absolute_path_argument_is_relative_to_submodule_working_directory() {
function blake3_file_argument_is_relative_to_submodule_working_directory (line 1341) | fn blake3_file_argument_is_relative_to_submodule_working_directory() {
function canonicalize_argument_is_relative_to_submodule_working_directory (line 1359) | fn canonicalize_argument_is_relative_to_submodule_working_directory() {
function path_exists_argument_is_relative_to_submodule_working_directory (line 1377) | fn path_exists_argument_is_relative_to_submodule_working_directory() {
function sha256_file_argument_is_relative_to_submodule_working_directory (line 1395) | fn sha256_file_argument_is_relative_to_submodule_working_directory() {
function style_command_default (line 1413) | fn style_command_default() {
function style_command_non_default (line 1426) | fn style_command_non_default() {
function style_error (line 1440) | fn style_error() {
function style_warning (line 1453) | fn style_warning() {
function style_unknown (line 1466) | fn style_unknown() {
function read (line 1487) | fn read() {
function read_file_not_found (line 1497) | fn read_file_not_found() {
FILE: tests/global.rs
function macos (line 4) | fn macos() {
function not_macos (line 26) | fn not_macos() {
function unix (line 45) | fn unix() {
function case_insensitive (line 74) | fn case_insensitive() {
FILE: tests/groups.rs
function list_group_unknown (line 4) | fn list_group_unknown() {
function list_group (line 18) | fn list_group() {
function list_multiple_groups (line 45) | fn list_multiple_groups() {
function list_with_groups (line 83) | fn list_with_groups() {
function list_with_groups_unsorted (line 127) | fn list_with_groups_unsorted() {
function list_with_groups_unsorted_group_order (line 177) | fn list_with_groups_unsorted_group_order() {
function list_groups (line 217) | fn list_groups() {
function list_groups_with_custom_prefix (line 242) | fn list_groups_with_custom_prefix() {
function list_groups_with_shorthand_syntax (line 266) | fn list_groups_with_shorthand_syntax() {
function list_groups_unsorted (line 289) | fn list_groups_unsorted() {
function list_groups_private_unsorted (line 316) | fn list_groups_private_unsorted() {
function list_groups_private (line 343) | fn list_groups_private() {
function list_group_with_submodules (line 366) | fn list_group_with_submodules() {
FILE: tests/guards.rs
function guard_lines_halt_execution (line 4) | fn guard_lines_halt_execution() {
function guard_lines_have_no_effect_if_successful (line 19) | fn guard_lines_have_no_effect_if_successful() {
function exit_codes_above_one_are_reserved (line 35) | fn exit_codes_above_one_are_reserved() {
function guard_sigil_may_not_be_used_with_infallible_sigil (line 50) | fn guard_sigil_may_not_be_used_with_infallible_sigil() {
function guard_lines_are_ignored_without_setting (line 73) | fn guard_lines_are_ignored_without_setting() {
FILE: tests/ignore_comments.rs
function ignore_comments_in_recipe (line 4) | fn ignore_comments_in_recipe() {
function dont_ignore_comments_in_recipe_by_default (line 21) | fn dont_ignore_comments_in_recipe_by_default() {
function ignore_recipe_comments_with_shell_setting (line 36) | fn ignore_recipe_comments_with_shell_setting() {
function continuations_with_echo_comments_false (line 54) | fn continuations_with_echo_comments_false() {
function continuations_with_echo_comments_true (line 71) | fn continuations_with_echo_comments_true() {
function dont_evaluate_comments (line 87) | fn dont_evaluate_comments() {
function dont_analyze_comments (line 101) | fn dont_analyze_comments() {
function comments_still_must_be_parsable_when_ignored (line 115) | fn comments_still_must_be_parsable_when_ignored() {
FILE: tests/imports.rs
function import_succeeds (line 4) | fn import_succeeds() {
function missing_import_file_error (line 26) | fn missing_import_file_error() {
function missing_optional_imports_are_ignored (line 50) | fn missing_optional_imports_are_ignored() {
function trailing_spaces_after_import_are_ignored (line 66) | fn trailing_spaces_after_import_are_ignored() {
function import_after_recipe (line 83) | fn import_after_recipe() {
function circular_import (line 102) | fn circular_import() {
function import_recipes_are_not_default (line 116) | fn import_recipes_are_not_default() {
function listed_recipes_in_imports_are_in_load_order (line 127) | fn listed_recipes_in_imports_are_in_load_order() {
function include_error (line 148) | fn include_error() {
function recipes_in_import_are_overridden_by_recipes_in_parent (line 164) | fn recipes_in_import_are_overridden_by_recipes_in_parent() {
function variables_in_import_are_overridden_by_variables_in_parent (line 188) | fn variables_in_import_are_overridden_by_variables_in_parent() {
function import_paths_beginning_with_tilde_are_expanded_to_homdir (line 213) | fn import_paths_beginning_with_tilde_are_expanded_to_homdir() {
function imports_dump_correctly (line 231) | fn imports_dump_correctly() {
function optional_imports_dump_correctly (line 245) | fn optional_imports_dump_correctly() {
function imports_in_root_run_in_justfile_directory (line 259) | fn imports_in_root_run_in_justfile_directory() {
function imports_in_submodules_run_in_submodule_directory (line 274) | fn imports_in_submodules_run_in_submodule_directory() {
function nested_import_paths_are_relative_to_containing_submodule (line 287) | fn nested_import_paths_are_relative_to_containing_submodule() {
function recipes_in_nested_imports_run_in_parent_module (line 298) | fn recipes_in_nested_imports_run_in_parent_module() {
function shebang_recipes_in_imports_in_root_run_in_justfile_directory (line 310) | fn shebang_recipes_in_imports_in_root_run_in_justfile_directory() {
function recipes_imported_in_root_run_in_command_line_provided_working_directory (line 328) | fn recipes_imported_in_root_run_in_command_line_provided_working_directo...
function reused_import_are_allowed (line 344) | fn reused_import_are_allowed() {
function multiply_imported_items_do_not_conflict (line 363) | fn multiply_imported_items_do_not_conflict() {
function nested_multiply_imported_items_do_not_conflict (line 386) | fn nested_multiply_imported_items_do_not_conflict() {
FILE: tests/init.rs
function current_dir (line 4) | fn current_dir() {
function exists (line 22) | fn exists() {
function write_error (line 37) | fn write_error() {
function invocation_directory (line 56) | fn invocation_directory() {
function parent_dir (line 75) | fn parent_dir() {
function alternate_marker (line 96) | fn alternate_marker() {
function search_directory (line 116) | fn search_directory() {
function justfile (line 139) | fn justfile() {
function justfile_and_working_directory (line 163) | fn justfile_and_working_directory() {
function fmt_compatibility (line 189) | fn fmt_compatibility() {
FILE: tests/interpolation.rs
function closing_curly_brace_can_abut_interpolation_close (line 4) | fn closing_curly_brace_can_abut_interpolation_close() {
function eol_with_continuation_in_interpolation (line 18) | fn eol_with_continuation_in_interpolation() {
function eol_without_continuation_in_interpolation (line 34) | fn eol_without_continuation_in_interpolation() {
function comment_in_interopolation (line 50) | fn comment_in_interopolation() {
function indent_and_dedent_are_ignored_in_interpolation (line 73) | fn indent_and_dedent_are_ignored_in_interpolation() {
function shebang_line_numbers_are_correct_with_multi_line_interpolations (line 92) | fn shebang_line_numbers_are_correct_with_multi_line_interpolations() {
FILE: tests/invocation_directory.rs
function convert_native_path (line 4) | fn convert_native_path(path: &Path) -> String {
function convert_native_path (line 13) | fn convert_native_path(path: &Path) -> String {
function test_invocation_directory (line 36) | fn test_invocation_directory() {
function invocation_directory_native (line 85) | fn invocation_directory_native() {
FILE: tests/json.rs
type Alias (line 5) | struct Alias<'a> {
type Assignment (line 13) | struct Assignment<'a> {
type Dependency (line 23) | struct Dependency<'a> {
type Interpreter (line 30) | struct Interpreter<'a> {
type Module (line 37) | struct Module<'a> {
type Parameter (line 53) | struct Parameter<'a> {
type Recipe (line 67) | struct Recipe<'a> {
type Settings (line 83) | struct Settings<'a> {
function case (line 108) | fn case(justfile: &str, expected: Module) {
function fix_source (line 112) | fn fix_source(dir: &Path, module: &mut Module) {
function case_with_submodule (line 131) | fn case_with_submodule(justfile: &str, submodule: Option<(&str, &str)>, ...
function alias (line 150) | fn alias() {
function assignment (line 183) | fn assignment() {
function private_assignment (line 202) | fn private_assignment() {
function body (line 237) | fn body() {
function dependencies (line 262) | fn dependencies() {
function dependency_argument (line 301) | fn dependency_argument() {
function duplicate_recipes (line 380) | fn duplicate_recipes() {
function duplicate_variables (line 425) | fn duplicate_variables() {
function doc_comment (line 452) | fn doc_comment() {
function empty_justfile (line 473) | fn empty_justfile() {
function parameters (line 478) | fn parameters() {
function priors (line 579) | fn priors() {
function private (line 633) | fn private() {
function quiet (line 654) | fn quiet() {
function settings (line 675) | fn settings() {
function shebang (line 726) | fn shebang() {
function simple (line 751) | fn simple() {
function attribute (line 771) | fn attribute() {
function single_metadata_attribute (line 795) | fn single_metadata_attribute() {
function multiple_metadata_attributes (line 819) | fn multiple_metadata_attributes() {
function multiple_metadata_attributes_with_multiple_arguments (line 848) | fn multiple_metadata_attributes_with_multiple_arguments() {
function module (line 877) | fn module() {
function module_group (line 910) | fn module_group() {
function recipes_with_private_attribute_are_private (line 943) | fn recipes_with_private_attribute_are_private() {
function doc_attribute_overrides_comment (line 968) | fn doc_attribute_overrides_comment() {
function format_string (line 994) | fn format_string() {
function arg_pattern (line 1056) | fn arg_pattern() {
function arg_long (line 1094) | fn arg_long() {
function arg_short (line 1132) | fn arg_short() {
function arg_value (line 1170) | fn arg_value() {
function arg_help (line 1209) | fn arg_help() {
FILE: tests/lazy.rs
function lazy_is_unstable (line 4) | fn lazy_is_unstable() {
function eager_is_unstable (line 18) | fn eager_is_unstable() {
function unused_assignments_are_evaluated_without_lazy (line 32) | fn unused_assignments_are_evaluated_without_lazy() {
function unused_assignment_not_evaluated (line 54) | fn unused_assignment_not_evaluated() {
function used_assignment_evaluated (line 72) | fn used_assignment_evaluated() {
function transitively_used_assignment_evaluated (line 98) | fn transitively_used_assignment_evaluated() {
function assignment_used_in_parameter_default_evaluated (line 125) | fn assignment_used_in_parameter_default_evaluated() {
function assignment_used_in_dependency_argument_evaluated (line 150) | fn assignment_used_in_dependency_argument_evaluated() {
function assignment_in_body_interpolation_evaluated (line 177) | fn assignment_in_body_interpolation_evaluated() {
function multiple_invocations_evaluate_union (line 203) | fn multiple_invocations_evaluate_union() {
function assignment_used_in_dependency_evaluated (line 227) | fn assignment_used_in_dependency_evaluated() {
function assignment_used_in_transitive_dependency_evaluated (line 255) | fn assignment_used_in_transitive_dependency_evaluated() {
function exported_assignment_is_evaluated (line 285) | fn exported_assignment_is_evaluated() {
function assignment_with_set_export_is_evaluated (line 303) | fn assignment_with_set_export_is_evaluated() {
function eager_assignments_are_evaluated (line 322) | fn eager_assignments_are_evaluated() {
FILE: tests/lib.rs
constant JUST (line 31) | const JUST: &str = env!("CARGO_BIN_EXE_just");
function default (line 36) | fn default<T: Default>() -> T {
function path (line 149) | fn path(s: &str) -> String {
function path_for_regex (line 157) | fn path_for_regex(s: &str) -> String {
FILE: tests/line_prefixes.rs
function infallible_after_quiet (line 4) | fn infallible_after_quiet() {
function quiet_after_infallible (line 16) | fn quiet_after_infallible() {
FILE: tests/list.rs
function modules_unsorted (line 4) | fn modules_unsorted() {
function unsorted_list_order (line 27) | fn unsorted_list_order() {
function list_submodule (line 150) | fn list_submodule() {
function list_nested_submodule (line 169) | fn list_nested_submodule() {
function list_invalid_path (line 206) | fn list_invalid_path() {
function list_unknown_submodule (line 214) | fn list_unknown_submodule() {
function list_with_groups_in_modules (line 222) | fn list_with_groups_in_modules() {
function list_displays_recipes_in_submodules (line 249) | fn list_displays_recipes_in_submodules() {
function modules_are_space_separated_in_output (line 269) | fn modules_are_space_separated_in_output() {
function module_recipe_list_alignment_ignores_private_recipes (line 295) | fn module_recipe_list_alignment_ignores_private_recipes() {
function nested_modules_are_properly_indented (line 325) | fn nested_modules_are_properly_indented() {
function module_doc_rendered (line 347) | fn module_doc_rendered() {
function module_doc_aligned (line 367) | fn module_doc_aligned() {
function submodules_without_groups (line 397) | fn submodules_without_groups() {
function no_space_before_submodules_not_following_groups (line 422) | fn no_space_before_submodules_not_following_groups() {
function backticks_highlighted (line 441) | fn backticks_highlighted() {
function unclosed_backticks (line 459) | fn unclosed_backticks() {
function list_submodules_requires_list (line 477) | fn list_submodules_requires_list() {
FILE: tests/logical_operators.rs
function evaluate (line 4) | fn evaluate(expression: &str, expected: &str) {
function logical_operators_are_unstable (line 14) | fn logical_operators_are_unstable() {
function and_returns_empty_string_if_lhs_is_empty (line 29) | fn and_returns_empty_string_if_lhs_is_empty() {
function and_returns_rhs_if_lhs_is_non_empty (line 34) | fn and_returns_rhs_if_lhs_is_non_empty() {
function and_has_lower_precedence_than_plus (line 39) | fn and_has_lower_precedence_than_plus() {
function or_returns_rhs_if_lhs_is_empty (line 50) | fn or_returns_rhs_if_lhs_is_empty() {
function or_returns_lhs_if_lhs_is_non_empty (line 55) | fn or_returns_lhs_if_lhs_is_non_empty() {
function or_has_lower_precedence_than_plus (line 60) | fn or_has_lower_precedence_than_plus() {
function and_has_higher_precedence_than_or (line 71) | fn and_has_higher_precedence_than_or() {
function nesting (line 78) | fn nesting() {
FILE: tests/man.rs
function output (line 4) | fn output() {
FILE: tests/misc.rs
function alias_listing (line 4) | fn alias_listing() {
function alias_listing_with_doc (line 25) | fn alias_listing_with_doc() {
function alias_listing_multiple_aliases (line 47) | fn alias_listing_multiple_aliases() {
function alias_listing_parameters (line 61) | fn alias_listing_parameters() {
function alias_listing_private (line 75) | fn alias_listing_private() {
function alias (line 89) | fn alias() {
function alias_with_parameters (line 99) | fn alias_with_parameters() {
function bad_setting (line 110) | fn bad_setting() {
function bad_setting_with_keyword_name (line 130) | fn bad_setting_with_keyword_name() {
function alias_with_dependencies (line 150) | fn alias_with_dependencies() {
function duplicate_alias (line 160) | fn duplicate_alias() {
function unknown_alias_target (line 176) | fn unknown_alias_target() {
function alias_shadows_recipe (line 192) | fn alias_shadows_recipe() {
function default (line 208) | fn default() {
function quiet (line 217) | fn quiet() {
function verbose (line 225) | fn verbose() {
function order (line 235) | fn order() {
function select (line 264) | fn select() {
function print (line 274) | fn print() {
function status_passthrough (line 285) | fn status_passthrough() {
function unknown_dependency (line 301) | fn unknown_dependency() {
function backtick_success (line 317) | fn backtick_success() {
function backtick_trimming (line 326) | fn backtick_trimming() {
function backtick_code_assignment (line 335) | fn backtick_code_assignment() {
function backtick_code_interpolation (line 351) | fn backtick_code_interpolation() {
function backtick_code_interpolation_mod (line 367) | fn backtick_code_interpolation_mod() {
function backtick_code_interpolation_tab (line 383) | fn backtick_code_interpolation_tab() {
function backtick_code_interpolation_tabs (line 403) | fn backtick_code_interpolation_tabs() {
function backtick_code_interpolation_inner_tab (line 423) | fn backtick_code_interpolation_inner_tab() {
function backtick_code_interpolation_leading_emoji (line 444) | fn backtick_code_interpolation_leading_emoji() {
function backtick_code_interpolation_unicode_hell (line 465) | fn backtick_code_interpolation_unicode_hell() {
function backtick_code_long (line 486) | fn backtick_code_long() {
function shebang_backtick_failure (line 515) | fn shebang_backtick_failure() {
function command_backtick_failure (line 536) | fn command_backtick_failure() {
function assignment_backtick_failure (line 558) | fn assignment_backtick_failure() {
function dry_run (line 579) | fn dry_run() {
function line_error_spacing (line 613) | fn line_error_spacing() {
function argument_single (line 641) | fn argument_single() {
function argument_multiple (line 657) | fn argument_multiple() {
function argument_mismatch_more (line 674) | fn argument_mismatch_more() {
function argument_mismatch_fewer (line 691) | fn argument_mismatch_fewer() {
function argument_mismatch_more_with_default (line 706) | fn argument_mismatch_more_with_default() {
function argument_mismatch_fewer_with_default (line 723) | fn argument_mismatch_fewer_with_default() {
function unknown_recipe (line 744) | fn unknown_recipe() {
function unknown_recipes (line 753) | fn unknown_recipes() {
function color_always (line 763) | fn color_always() {
function color_never (line 773) | fn color_never() {
function color_auto (line 790) | fn color_auto() {
function colors_no_context (line 807) | fn colors_no_context() {
function mixed_whitespace (line 823) | fn mixed_whitespace() {
function extra_leading_whitespace (line 839) | fn extra_leading_whitespace() {
function inconsistent_leading_whitespace (line 854) | fn inconsistent_leading_whitespace() {
function required_after_default (line 870) | fn required_after_default() {
function required_after_plus_variadic (line 885) | fn required_after_plus_variadic() {
function required_after_star_variadic (line 900) | fn required_after_star_variadic() {
function use_string_default (line 915) | fn use_string_default() {
function use_raw_string_default (line 932) | fn use_raw_string_default() {
function supply_use_default (line 949) | fn supply_use_default() {
function supply_defaults (line 966) | fn supply_defaults() {
function list (line 984) | fn list() {
function list_alignment (line 1013) | fn list_alignment() {
function list_alignment_long (line 1041) | fn list_alignment_long() {
function list_sorted (line 1074) | fn list_sorted() {
function list_unsorted (line 1095) | fn list_unsorted() {
function list_heading (line 1117) | fn list_heading() {
function list_prefix (line 1139) | fn list_prefix() {
function list_empty_prefix_and_heading (line 1161) | fn list_empty_prefix_and_heading() {
function run_suggestion (line 1184) | fn run_suggestion() {
function private_recipes_are_not_suggested (line 1193) | fn private_recipes_are_not_suggested() {
function alias_suggestion (line 1207) | fn alias_suggestion() {
function private_aliases_are_not_suggested (line 1224) | fn private_aliases_are_not_suggested() {
function line_continuation_with_space (line 1240) | fn line_continuation_with_space() {
function line_continuation_with_quoted_space (line 1256) | fn line_continuation_with_quoted_space() {
function line_continuation_no_space (line 1272) | fn line_continuation_no_space() {
function infallible_command (line 1288) | fn infallible_command() {
function infallible_with_failing (line 1301) | fn infallible_with_failing() {
function quiet_recipe (line 1320) | fn quiet_recipe() {
function quiet_shebang_recipe (line 1336) | fn quiet_shebang_recipe() {
function complex_dependencies (line 1351) | fn complex_dependencies() {
function unknown_function_in_assignment (line 1365) | fn unknown_function_in_assignment() {
function dependency_takes_arguments_exact (line 1384) | fn dependency_takes_arguments_exact() {
function dependency_takes_arguments_at_least (line 1405) | fn dependency_takes_arguments_at_least() {
function dependency_takes_arguments_at_most (line 1426) | fn dependency_takes_arguments_at_most() {
function duplicate_parameter (line 1447) | fn duplicate_parameter() {
function duplicate_recipe (line 1463) | fn duplicate_recipe() {
function duplicate_variable (line 1479) | fn duplicate_variable() {
function unexpected_token_in_dependency_position (line 1495) | fn unexpected_token_in_dependency_position() {
function unexpected_token_after_name (line 1512) | fn unexpected_token_after_name() {
function self_dependency (line 1528) | fn self_dependency() {
function long_circular_recipe_dependency (line 1544) | fn long_circular_recipe_dependency() {
function variable_self_dependency (line 1560) | fn variable_self_dependency() {
function variable_circular_dependency (line 1576) | fn variable_circular_dependency() {
function variable_circular_dependency_with_additional_variable (line 1592) | fn variable_circular_dependency_with_additional_variable() {
function plus_variadic_recipe (line 1616) | fn plus_variadic_recipe() {
function plus_variadic_ignore_default (line 1636) | fn plus_variadic_ignore_default() {
function plus_variadic_use_default (line 1656) | fn plus_variadic_use_default() {
function plus_variadic_too_few (line 1673) | fn plus_variadic_too_few() {
function star_variadic_recipe (line 1695) | fn star_variadic_recipe() {
function star_variadic_none (line 1715) | fn star_variadic_none() {
function star_variadic_ignore_default (line 1732) | fn star_variadic_ignore_default() {
function star_variadic_use_default (line 1752) | fn star_variadic_use_default() {
function star_then_plus_variadic (line 1769) | fn star_then_plus_variadic() {
function plus_then_star_variadic (line 1789) | fn plus_then_star_variadic() {
function argument_grouping (line 1809) | fn argument_grouping() {
function missing_second_dependency (line 1838) | fn missing_second_dependency() {
function list_colors (line 1859) | fn list_colors() {
function run_colors (line 1884) | fn run_colors() {
function no_highlight (line 1903) | fn no_highlight() {
function trailing_flags (line 1923) | fn trailing_flags() {
function comment_before_variable (line 1941) | fn comment_before_variable() {
function invalid_escape_sequence_message (line 1958) | fn invalid_escape_sequence_message() {
function unknown_variable_in_default (line 1977) | fn unknown_variable_in_default() {
function unknown_function_in_default (line 1996) | fn unknown_function_in_default() {
function default_string (line 2015) | fn default_string() {
function default_concatenation (line 2029) | fn default_concatenation() {
function default_backtick (line 2043) | fn default_backtick() {
function default_variable (line 2057) | fn default_variable() {
function unterminated_interpolation_eol (line 2072) | fn unterminated_interpolation_eol() {
function unterminated_interpolation_eof (line 2093) | fn unterminated_interpolation_eof() {
function unknown_start_of_token (line 2114) | fn unknown_start_of_token() {
function unknown_start_of_token_invisible_unicode (line 2134) | fn unknown_start_of_token_invisible_unicode() {
function unknown_start_of_token_ascii_control_char (line 2154) | fn unknown_start_of_token_ascii_control_char() {
function backtick_variable_cat (line 2174) | fn backtick_variable_cat() {
function backtick_default_cat_stdin (line 2191) | fn backtick_default_cat_stdin() {
function backtick_default_cat_justfile (line 2206) | fn backtick_default_cat_justfile() {
function backtick_variable_read_single (line 2230) | fn backtick_variable_read_single() {
function backtick_variable_read_multiple (line 2247) | fn backtick_variable_read_multiple() {
function backtick_default_read_multiple (line 2266) | fn backtick_default_read_multiple() {
function old_equals_assignment_syntax_produces_error (line 2283) | fn old_equals_assignment_syntax_produces_error() {
function dependency_argument_string (line 2306) | fn dependency_argument_string() {
function dependency_argument_parameter (line 2323) | fn dependency_argument_parameter() {
function dependency_argument_function (line 2342) | fn dependency_argument_function() {
function env_function_as_env_var (line 2359) | fn env_function_as_env_var() {
function env_function_as_env_var_or_default (line 2377) | fn env_function_as_env_var_or_default() {
function env_function_as_env_var_with_existing_env_var (line 2395) | fn env_function_as_env_var_with_existing_env_var() {
function env_function_as_env_var_or_default_with_existing_env_var (line 2413) | fn env_function_as_env_var_or_default_with_existing_env_var() {
function dependency_argument_backtick (line 2431) | fn dependency_argument_backtick() {
function dependency_argument_assignment (line 2451) | fn dependency_argument_assignment() {
function dependency_argument_plus_variadic (line 2470) | fn dependency_argument_plus_variadic() {
function duplicate_dependency_no_args (line 2487) | fn duplicate_dependency_no_args() {
function duplicate_dependency_argument (line 2504) | fn duplicate_dependency_argument() {
function pwsh_invocation_directory (line 2521) | fn pwsh_invocation_directory() {
function variables (line 2539) | fn variables() {
function interpolation_evaluation_ignore_quiet (line 2554) | fn interpolation_evaluation_ignore_quiet() {
function interpolation_evaluation_ignore_quiet_continuation (line 2573) | fn interpolation_evaluation_ignore_quiet_continuation() {
function brace_escape (line 2593) | fn brace_escape() {
function brace_escape_extra (line 2611) | fn brace_escape_extra() {
function multi_line_string_in_interpolation (line 2629) | fn multi_line_string_in_interpolation() {
function windows_interpreter_path_no_base (line 2646) | fn windows_interpreter_path_no_base() {
FILE: tests/modules.rs
function modules_are_stable (line 4) | fn modules_are_stable() {
function default_recipe_in_submodule_must_have_no_arguments (line 18) | fn default_recipe_in_submodule_must_have_no_arguments() {
function module_recipes_can_be_run_as_subcommands (line 32) | fn module_recipes_can_be_run_as_subcommands() {
function module_recipes_can_be_run_with_path_syntax (line 47) | fn module_recipes_can_be_run_with_path_syntax() {
function nested_module_recipes_can_be_run_with_path_syntax (line 61) | fn nested_module_recipes_can_be_run_with_path_syntax() {
function invalid_path_syntax (line 76) | fn invalid_path_syntax() {
function missing_recipe_after_invalid_path (line 94) | fn missing_recipe_after_invalid_path() {
function assignments_are_evaluated_in_modules (line 103) | fn assignments_are_evaluated_in_modules() {
function module_subcommand_runs_default_recipe (line 119) | fn module_subcommand_runs_default_recipe() {
function modules_can_contain_other_modules (line 133) | fn modules_can_contain_other_modules() {
function circular_module_imports_are_detected (line 150) | fn circular_module_imports_are_detected() {
function modules_use_module_settings (line 169) | fn modules_use_module_settings() {
function modules_conflict_with_recipes (line 219) | fn modules_conflict_with_recipes() {
function modules_conflict_with_aliases (line 241) | fn modules_conflict_with_aliases() {
function modules_conflict_with_other_modules (line 264) | fn modules_conflict_with_other_modules() {
function modules_are_dumped_correctly (line 288) | fn modules_are_dumped_correctly() {
function optional_modules_are_dumped_correctly (line 302) | fn optional_modules_are_dumped_correctly() {
function modules_can_be_in_subdirectory (line 316) | fn modules_can_be_in_subdirectory() {
function modules_in_subdirectory_can_be_named_justfile (line 331) | fn modules_in_subdirectory_can_be_named_justfile() {
function modules_in_subdirectory_can_be_named_justfile_with_any_case (line 346) | fn modules_in_subdirectory_can_be_named_justfile_with_any_case() {
function modules_in_subdirectory_can_have_leading_dot (line 361) | fn modules_in_subdirectory_can_have_leading_dot() {
function modules_require_unambiguous_file (line 376) | fn modules_require_unambiguous_file() {
function missing_module_file_error (line 399) | fn missing_module_file_error() {
function missing_optional_modules_do_not_trigger_error (line 419) | fn missing_optional_modules_do_not_trigger_error() {
function missing_optional_modules_do_not_conflict (line 434) | fn missing_optional_modules_do_not_conflict() {
function root_dotenv_is_available_to_submodules (line 451) | fn root_dotenv_is_available_to_submodules() {
function dotenv_settings_in_submodule_are_ignored (line 468) | fn dotenv_settings_in_submodule_are_ignored() {
function modules_may_specify_path (line 488) | fn modules_may_specify_path() {
function modules_may_specify_path_to_directory (line 503) | fn modules_may_specify_path_to_directory() {
function modules_with_paths_are_dumped_correctly (line 518) | fn modules_with_paths_are_dumped_correctly() {
function optional_modules_with_paths_are_dumped_correctly (line 532) | fn optional_modules_with_paths_are_dumped_correctly() {
function recipes_may_be_named_mod (line 546) | fn recipes_may_be_named_mod() {
function submodule_linewise_recipes_run_in_submodule_directory (line 561) | fn submodule_linewise_recipes_run_in_submodule_directory() {
function submodule_shebang_recipes_run_in_submodule_directory (line 577) | fn submodule_shebang_recipes_run_in_submodule_directory() {
function cross_module_dependency_runs_in_submodule_directory (line 593) | fn cross_module_dependency_runs_in_submodule_directory() {
function cross_module_dependency_with_no_cd_runs_in_invocation_directory (line 610) | fn cross_module_dependency_with_no_cd_runs_in_invocation_directory() {
function nested_cross_module_dependency_runs_in_correct_directory (line 634) | fn nested_cross_module_dependency_runs_in_correct_directory() {
function modulepaths_beginning_with_tilde_are_expanded_to_homdir (line 652) | fn modulepaths_beginning_with_tilde_are_expanded_to_homdir() {
function recipes_with_same_name_are_both_run (line 671) | fn recipes_with_same_name_are_both_run() {
function submodule_recipe_not_found_error_message (line 689) | fn submodule_recipe_not_found_error_message() {
function submodule_recipe_not_found_spaced_error_message (line 697) | fn submodule_recipe_not_found_spaced_error_message() {
function submodule_recipe_not_found_colon_separated_error_message (line 711) | fn submodule_recipe_not_found_colon_separated_error_message() {
function colon_separated_path_does_not_run_recipes (line 725) | fn colon_separated_path_does_not_run_recipes() {
function expected_submodule_but_found_recipe_in_root_error (line 742) | fn expected_submodule_but_found_recipe_in_root_error() {
function expected_submodule_but_found_recipe_in_submodule_error (line 751) | fn expected_submodule_but_found_recipe_in_submodule_error() {
function colon_separated_path_components_are_not_used_as_arguments (line 761) | fn colon_separated_path_components_are_not_used_as_arguments() {
function comments_can_follow_modules (line 770) | fn comments_can_follow_modules() {
function doc_comment_on_module (line 784) | fn doc_comment_on_module() {
function doc_attribute_on_module (line 800) | fn doc_attribute_on_module() {
function group_attribute_on_module (line 817) | fn group_attribute_on_module() {
function group_attribute_on_module_unsorted (line 863) | fn group_attribute_on_module_unsorted() {
function group_attribute_on_module_list_submodule (line 910) | fn group_attribute_on_module_list_submodule() {
function group_attribute_on_module_list_submodule_unsorted (line 960) | fn group_attribute_on_module_list_submodule_unsorted() {
function bad_module_attribute_fails (line 1011) | fn bad_module_attribute_fails() {
function empty_doc_attribute_on_module (line 1027) | fn empty_doc_attribute_on_module() {
function overrides_work_when_submodule_is_present (line 1044) | fn overrides_work_when_submodule_is_present() {
function exported_variables_are_available_in_submodules (line 1064) | fn exported_variables_are_available_in_submodules() {
function exported_variables_can_be_unexported_in_submodules (line 1081) | fn exported_variables_can_be_unexported_in_submodules() {
function exported_variables_can_be_overridden_in_submodules (line 1098) | fn exported_variables_can_be_overridden_in_submodules() {
FILE: tests/multibyte_char.rs
function bugfix (line 4) | fn bugfix() {
FILE: tests/newline_escape.rs
function newline_escape_deps (line 4) | fn newline_escape_deps() {
function newline_escape_deps_no_indent (line 25) | fn newline_escape_deps_no_indent() {
function newline_escape_deps_linefeed (line 46) | fn newline_escape_deps_linefeed() {
function newline_escape_deps_invalid_esc (line 64) | fn newline_escape_deps_invalid_esc() {
function newline_escape_unpaired_linefeed (line 84) | fn newline_escape_unpaired_linefeed() {
FILE: tests/no_aliases.rs
function skip_alias (line 4) | fn skip_alias() {
FILE: tests/no_cd.rs
function linewise (line 4) | fn linewise() {
function shebang (line 25) | fn shebang() {
FILE: tests/no_dependencies.rs
function skip_normal_dependency (line 4) | fn skip_normal_dependency() {
function skip_prior_dependency (line 20) | fn skip_prior_dependency() {
function skip_dependency_multi (line 36) | fn skip_dependency_multi() {
FILE: tests/no_exit_message.rs
function recipe_exit_message_suppressed (line 4) | fn recipe_exit_message_suppressed() {
function silent_recipe_exit_message_suppressed (line 20) | fn silent_recipe_exit_message_suppressed() {
function recipe_has_doc_comment (line 36) | fn recipe_has_doc_comment() {
function unknown_attribute (line 57) | fn unknown_attribute() {
function empty_attribute (line 80) | fn empty_attribute() {
function extraneous_attribute_before_comment (line 103) | fn extraneous_attribute_before_comment() {
function extraneous_attribute_before_empty_line (line 126) | fn extraneous_attribute_before_empty_line() {
function shebang_exit_message_suppressed (line 149) | fn shebang_exit_message_suppressed() {
function no_exit_message (line 165) | fn no_exit_message() {
function exit_message (line 180) | fn exit_message() {
function recipe_exit_message_setting_suppressed (line 196) | fn recipe_exit_message_setting_suppressed() {
function shebang_exit_message_setting_suppressed (line 213) | fn shebang_exit_message_setting_suppressed() {
function exit_message_override_no_exit_setting (line 230) | fn exit_message_override_no_exit_setting() {
function exit_message_and_no_exit_message_compile_forbidden (line 246) | fn exit_message_and_no_exit_message_compile_forbidden() {
FILE: tests/options.rs
function long_options_may_not_be_empty (line 4) | fn long_options_may_not_be_empty() {
function short_options_may_not_be_empty (line 26) | fn short_options_may_not_be_empty() {
function short_options_may_not_have_multiple_characters (line 48) | fn short_options_may_not_have_multiple_characters() {
function parameters_may_be_passed_with_long_options (line 70) | fn parameters_may_be_passed_with_long_options() {
function long_option_defaults_to_parameter_name (line 85) | fn long_option_defaults_to_parameter_name() {
function parameters_may_be_passed_with_short_options (line 100) | fn parameters_may_be_passed_with_short_options() {
constant LONG_SHORT (line 114) | const LONG_SHORT: &str = "
function parameters_with_both_long_and_short_option_may_be_passed_as_long (line 121) | fn parameters_with_both_long_and_short_option_may_be_passed_as_long() {
function parameters_with_both_long_and_short_option_may_be_passed_as_short (line 130) | fn parameters_with_both_long_and_short_option_may_be_passed_as_short() {
function parameters_with_both_long_and_short_may_not_use_both (line 139) | fn parameters_with_both_long_and_short_may_not_use_both() {
function multiple_short_options_in_one_argument_is_an_error (line 148) | fn multiple_short_options_in_one_argument_is_an_error() {
function duplicate_long_option_attributes_are_forbidden (line 163) | fn duplicate_long_option_attributes_are_forbidden() {
function defaulted_duplicate_long_option (line 185) | fn defaulted_duplicate_long_option() {
function duplicate_short_option_attributes_are_forbidden (line 210) | fn duplicate_short_option_attributes_are_forbidden() {
function variadics_with_long_options_are_forbidden (line 232) | fn variadics_with_long_options_are_forbidden() {
function variadics_with_short_options_are_forbidden (line 253) | fn variadics_with_short_options_are_forbidden() {
function long_option_names_may_not_contain_equal_sign (line 274) | fn long_option_names_may_not_contain_equal_sign() {
function short_option_names_may_not_contain_equal_sign (line 295) | fn short_option_names_may_not_contain_equal_sign() {
function long_options_may_follow_an_omitted_positional_argument (line 316) | fn long_options_may_follow_an_omitted_positional_argument() {
function short_options_may_follow_an_omitted_positional_argument (line 337) | fn short_options_may_follow_an_omitted_positional_argument() {
function options_with_a_default_may_be_omitted (line 358) | fn options_with_a_default_may_be_omitted() {
function variadics_can_follow_options (line 377) | fn variadics_can_follow_options() {
function argument_values_starting_with_dashes_are_accepted_if_recipe_does_not_take_options (line 398) | fn argument_values_starting_with_dashes_are_accepted_if_recipe_does_not_...
function argument_values_starting_with_dashes_are_an_error_if_recipe_takes_options (line 416) | fn argument_values_starting_with_dashes_are_an_error_if_recipe_takes_opt...
function argument_values_starting_with_dashes_are_accepted_after_double_dash (line 432) | fn argument_values_starting_with_dashes_are_accepted_after_double_dash() {
function positional_and_long_option_arguments_can_be_intermixed (line 453) | fn positional_and_long_option_arguments_can_be_intermixed() {
function positional_and_short_option_arguments_can_be_intermixed (line 481) | fn positional_and_short_option_arguments_can_be_intermixed() {
function unknown_options_are_an_error (line 509) | fn unknown_options_are_an_error() {
function missing_required_options_are_an_error (line 523) | fn missing_required_options_are_an_error() {
function duplicate_long_options_are_an_error (line 537) | fn duplicate_long_options_are_an_error() {
function duplicate_short_options_are_an_error (line 551) | fn duplicate_short_options_are_an_error() {
function options_require_value (line 565) | fn options_require_value() {
function recipes_with_long_options_have_correct_positional_argument_mismatch_message (line 579) | fn recipes_with_long_options_have_correct_positional_argument_mismatch_m...
function recipes_with_short_options_have_correct_positional_argument_mismatch_message (line 599) | fn recipes_with_short_options_have_correct_positional_argument_mismatch_...
function long_options_with_values_are_flags (line 619) | fn long_options_with_values_are_flags() {
function short_options_with_values_are_flags (line 634) | fn short_options_with_values_are_flags() {
function flags_cannot_take_values (line 649) | fn flags_cannot_take_values() {
function value_requires_long_or_short (line 663) | fn value_requires_long_or_short() {
function options_arg_passed_as_positional_arguments (line 685) | fn options_arg_passed_as_positional_arguments() {
FILE: tests/os_attributes.rs
function os_family (line 4) | fn os_family() {
function os (line 35) | fn os() {
function all (line 106) | fn all() {
function none (line 128) | fn none() {
FILE: tests/overrides.rs
function unknown_override (line 4) | fn unknown_override() {
function unknown_override_options (line 22) | fn unknown_override_options() {
function unknown_override_args (line 49) | fn unknown_override_args() {
function unknown_override_arg (line 70) | fn unknown_override_arg() {
function overrides_first (line 87) | fn overrides_first() {
function overrides_not_evaluated (line 109) | fn overrides_not_evaluated() {
function invalid_override_path_set (line 131) | fn invalid_override_path_set() {
function invalid_override_path_positional (line 141) | fn invalid_override_path_positional() {
function unknown_variable_in_submodule_override (line 149) | fn unknown_variable_in_submodule_override() {
function override_variable_in_submodule (line 160) | fn override_variable_in_submodule() {
function override_variable_in_nested_submodule (line 171) | fn override_variable_in_nested_submodule() {
function override_variable_used_in_setting (line 183) | fn override_variable_used_in_setting() {
function submodule_override_does_not_affect_parent (line 201) | fn submodule_override_does_not_affect_parent() {
function unknown_submodule_in_override_path (line 219) | fn unknown_submodule_in_override_path() {
function submodule_override_not_evaluated (line 227) | fn submodule_override_not_evaluated() {
FILE: tests/parallel.rs
function prior_dependencies_run_in_parallel (line 5) | fn prior_dependencies_run_in_parallel() {
function subsequent_dependencies_run_in_parallel (line 46) | fn subsequent_dependencies_run_in_parallel() {
function parallel_dependencies_report_errors (line 86) | fn parallel_dependencies_report_errors() {
function dependents_block_on_running_dependencies (line 108) | fn dependents_block_on_running_dependencies() {
FILE: tests/parameters.rs
function parameter_default_values_may_use_earlier_parameters (line 4) | fn parameter_default_values_may_use_earlier_parameters() {
function parameter_default_values_may_not_use_later_parameters (line 18) | fn parameter_default_values_may_not_use_later_parameters() {
function star_may_follow_default (line 40) | fn star_may_follow_default() {
FILE: tests/parser.rs
function dont_run_duplicate_recipes (line 4) | fn dont_run_duplicate_recipes() {
function invalid_bang_operator (line 16) | fn invalid_bang_operator() {
function truncated_bang_operator (line 36) | fn truncated_bang_operator() {
FILE: tests/positional_arguments.rs
function linewise (line 4) | fn linewise() {
function linewise_with_attribute (line 40) | fn linewise_with_attribute() {
function variadic_linewise (line 75) | fn variadic_linewise() {
function shebang (line 93) | fn shebang() {
function shebang_with_attribute (line 111) | fn shebang_with_attribute() {
function variadic_shebang (line 128) | fn variadic_shebang() {
function default_arguments (line 149) | fn default_arguments() {
function empty_variadic_is_undefined (line 165) | fn empty_variadic_is_undefined() {
function variadic_arguments_are_separate (line 181) | fn variadic_arguments_are_separate() {
FILE: tests/private.rs
function private_attribute_for_recipe (line 4) | fn private_attribute_for_recipe() {
function private_attribute_for_alias (line 22) | fn private_attribute_for_alias() {
function private_attribute_for_module (line 43) | fn private_attribute_for_module() {
function private_variables_are_not_listed (line 66) | fn private_variables_are_not_listed() {
FILE: tests/quiet.rs
function no_stdout (line 4) | fn no_stdout() {
function stderr (line 17) | fn stderr() {
function command_echoing (line 30) | fn command_echoing() {
function error_messages (line 43) | fn error_messages() {
function assignment_backtick_stderr (line 56) | fn assignment_backtick_stderr() {
function interpolation_backtick_stderr (line 70) | fn interpolation_backtick_stderr() {
function choose_none (line 84) | fn choose_none() {
function choose_invocation (line 93) | fn choose_invocation() {
function choose_status (line 105) | fn choose_status() {
function edit_invocation (line 116) | fn edit_invocation() {
function edit_status (line 126) | fn edit_status() {
function init_exists (line 136) | fn init_exists() {
function show_missing (line 145) | fn show_missing() {
function quiet_shebang (line 155) | fn quiet_shebang() {
function no_quiet_setting (line 168) | fn no_quiet_setting() {
function quiet_setting (line 182) | fn quiet_setting() {
function quiet_setting_with_no_quiet_attribute (line 197) | fn quiet_setting_with_no_quiet_attribute() {
function quiet_setting_with_quiet_recipe (line 214) | fn quiet_setting_with_quiet_recipe() {
function quiet_setting_with_quiet_line (line 229) | fn quiet_setting_with_quiet_line() {
function quiet_setting_with_no_quiet_attribute_and_quiet_recipe (line 244) | fn quiet_setting_with_no_quiet_attribute_and_quiet_recipe() {
function quiet_setting_with_no_quiet_attribute_and_quiet_line (line 260) | fn quiet_setting_with_no_quiet_attribute_and_quiet_line() {
FILE: tests/quote.rs
function single_quotes_are_prepended_and_appended (line 4) | fn single_quotes_are_prepended_and_appended() {
function quotes_are_escaped (line 17) | fn quotes_are_escaped() {
function quoted_strings_can_be_used_as_arguments (line 30) | fn quoted_strings_can_be_used_as_arguments() {
FILE: tests/readme.rs
function readme (line 4) | fn readme() {
FILE: tests/recursion_limit.rs
function bugfix (line 4) | fn bugfix() {
constant RECURSION_LIMIT_REACHED (line 15) | const RECURSION_LIMIT_REACHED: &str = if cfg!(windows) {
FILE: tests/regexes.rs
function match_succeeds_evaluates_to_first_branch (line 4) | fn match_succeeds_evaluates_to_first_branch() {
function match_fails_evaluates_to_second_branch (line 24) | fn match_fails_evaluates_to_second_branch() {
function bad_regex_fails_at_runtime (line 44) | fn bad_regex_fails_at_runtime() {
function mismatch (line 68) | fn mismatch() {
FILE: tests/request.rs
function environment_variable_set (line 4) | fn environment_variable_set() {
function environment_variable_missing (line 19) | fn environment_variable_missing() {
FILE: tests/run.rs
function dont_run_duplicate_recipes (line 4) | fn dont_run_duplicate_recipes() {
function one_flag_only_allows_one_invocation (line 18) | fn one_flag_only_allows_one_invocation() {
FILE: tests/scope.rs
function dependencies_in_submodules_run_with_submodule_scope (line 4) | fn dependencies_in_submodules_run_with_submodule_scope() {
function aliases_in_submodules_run_with_submodule_scope (line 20) | fn aliases_in_submodules_run_with_submodule_scope() {
function dependencies_in_nested_submodules_run_with_submodule_scope (line 37) | fn dependencies_in_nested_submodules_run_with_submodule_scope() {
function imported_recipes_run_in_correct_scope (line 56) | fn imported_recipes_run_in_correct_scope() {
FILE: tests/script.rs
function runs_with_command (line 4) | fn runs_with_command() {
function no_arguments (line 24) | fn no_arguments() {
function with_arguments (line 38) | fn with_arguments() {
function allowed_with_shebang (line 53) | fn allowed_with_shebang() {
function script_line_numbers (line 73) | fn script_line_numbers() {
function script_line_numbers_with_multi_line_recipe_signature (line 97) | fn script_line_numbers_with_multi_line_recipe_signature() {
function shebang_line_numbers (line 135) | fn shebang_line_numbers() {
function shebang_line_numbers_with_multiline_constructs (line 170) | fn shebang_line_numbers_with_multiline_constructs() {
function multiline_shebang_line_numbers (line 211) | fn multiline_shebang_line_numbers() {
function shebang_line_numbers_windows (line 250) | fn shebang_line_numbers_windows() {
function no_arguments_with_default_script_interpreter (line 286) | fn no_arguments_with_default_script_interpreter() {
function no_arguments_with_non_default_script_interpreter (line 311) | fn no_arguments_with_non_default_script_interpreter() {
FILE: tests/search.rs
function search_test (line 3) | fn search_test<P: AsRef<Path>>(path: P, args: &[&str]) {
function test_justfile_search (line 20) | fn test_justfile_search() {
function test_capitalized_justfile_search (line 36) | fn test_capitalized_justfile_search() {
function test_upwards_path_argument (line 52) | fn test_upwards_path_argument() {
function test_downwards_path_argument (line 65) | fn test_downwards_path_argument() {
function test_upwards_multiple_path_argument (line 84) | fn test_upwards_multiple_path_argument() {
function test_downwards_multiple_path_argument (line 100) | fn test_downwards_multiple_path_argument() {
function single_downwards (line 121) | fn single_downwards() {
function single_upwards (line 133) | fn single_upwards() {
function double_upwards (line 145) | fn double_upwards() {
function find_dot_justfile (line 161) | fn find_dot_justfile() {
function dot_justfile_conflicts_with_justfile (line 184) | fn dot_justfile_conflicts_with_justfile() {
FILE: tests/search_arguments.rs
function argument_with_different_path_prefix_is_allowed (line 4) | fn argument_with_different_path_prefix_is_allowed() {
function passing_dot_as_argument_is_allowed (line 12) | fn passing_dot_as_argument_is_allowed() {
FILE: tests/settings.rs
function all_settings_allow_expressions (line 4) | fn all_settings_allow_expressions() {
function undefined_variable_in_working_directory (line 30) | fn undefined_variable_in_working_directory() {
function undefined_variable_in_dotenv_filename (line 50) | fn undefined_variable_in_dotenv_filename() {
function undefined_variable_in_dotenv_path (line 70) | fn undefined_variable_in_dotenv_path() {
function undefined_variable_in_tempdir (line 90) | fn undefined_variable_in_tempdir() {
function undefined_variable_in_script_interpreter_command (line 110) | fn undefined_variable_in_script_interpreter_command() {
function undefined_variable_in_script_interpreter_argument (line 130) | fn undefined_variable_in_script_interpreter_argument() {
function undefined_variable_in_shell_command (line 150) | fn undefined_variable_in_shell_command() {
function undefined_variable_in_shell_argument (line 170) | fn undefined_variable_in_shell_argument() {
function undefined_variable_in_windows_shell_command (line 190) | fn undefined_variable_in_windows_shell_command() {
function undefined_variable_in_windows_shell_argument (line 210) | fn undefined_variable_in_windows_shell_argument() {
function built_in_constant (line 230) | fn built_in_constant() {
function variable (line 246) | fn variable() {
function unused_non_const_assignments (line 265) | fn unused_non_const_assignments() {
function variable_with_override (line 286) | fn variable_with_override() {
function expression (line 306) | fn expression() {
function expression_with_override (line 325) | fn expression_with_override() {
function backtick (line 344) | fn backtick() {
function function_call (line 364) | fn function_call() {
function non_const_variable (line 384) | fn non_const_variable() {
function assert (line 406) | fn assert() {
function bad_regex (line 426) | fn bad_regex() {
function backtick_override (line 449) | fn backtick_override() {
function submodule_expression (line 470) | fn submodule_expression() {
function overrides_are_ignored_in_submodules (line 497) | fn overrides_are_ignored_in_submodules() {
FILE: tests/shadowing_parameters.rs
function parameter_may_shadow_variable (line 4) | fn parameter_may_shadow_variable() {
function shadowing_parameters_do_not_change_environment (line 15) | fn shadowing_parameters_do_not_change_environment() {
function exporting_shadowing_parameters_does_change_environment (line 26) | fn exporting_shadowing_parameters_does_change_environment() {
FILE: tests/shebang.rs
function powershell (line 4) | fn powershell() {
function powershell_exe (line 21) | fn powershell_exe() {
function cmd (line 38) | fn cmd() {
function cmd_exe (line 55) | fn cmd_exe() {
function multi_line_cmd_shebangs_are_removed (line 72) | fn multi_line_cmd_shebangs_are_removed() {
function simple (line 90) | fn simple() {
function echo (line 104) | fn echo() {
function echo_with_command_color (line 119) | fn echo_with_command_color() {
function run_shebang (line 140) | fn run_shebang() {
FILE: tests/shell.rs
constant JUSTFILE (line 3) | const JUSTFILE: &str = "
function flag (line 15) | fn flag() {
function cmd (line 42) | fn cmd() {
function powershell (line 68) | fn powershell() {
function shell_args (line 94) | fn shell_args() {
function shell_override (line 111) | fn shell_override() {
function shell_arg_override (line 130) | fn shell_arg_override() {
function set_shell (line 149) | fn set_shell() {
function recipe_shell_not_found_error_message (line 169) | fn recipe_shell_not_found_error_message() {
function backtick_recipe_shell_not_found_error_message (line 186) | fn backtick_recipe_shell_not_found_error_message() {
FILE: tests/shell_expansion.rs
function strings_are_shell_expanded (line 4) | fn strings_are_shell_expanded() {
function shell_expanded_strings_must_not_have_whitespace (line 18) | fn shell_expanded_strings_must_not_have_whitespace() {
function shell_expanded_error_messages_highlight_string_token (line 38) | fn shell_expanded_error_messages_highlight_string_token() {
function shell_expanded_strings_are_dumped_correctly (line 59) | fn shell_expanded_strings_are_dumped_correctly() {
function shell_expanded_strings_can_be_used_in_settings (line 73) | fn shell_expanded_strings_can_be_used_in_settings() {
function shell_expanded_strings_can_be_used_in_import_paths (line 90) | fn shell_expanded_strings_can_be_used_in_import_paths() {
function shell_expanded_strings_can_be_used_in_mod_paths (line 106) | fn shell_expanded_strings_can_be_used_in_mod_paths() {
function shell_expanded_strings_do_not_conflict_with_dependencies (line 121) | fn shell_expanded_strings_do_not_conflict_with_dependencies() {
FILE: tests/show.rs
function show (line 4) | fn show() {
function alias_show (line 24) | fn alias_show() {
function alias_show_missing_target (line 40) | fn alias_show_missing_target() {
function show_suggestion (line 58) | fn show_suggestion() {
function show_alias_suggestion (line 75) | fn show_alias_suggestion() {
function show_no_suggestion (line 99) | fn show_no_suggestion() {
function show_no_alias_suggestion (line 116) | fn show_no_alias_suggestion() {
function show_recipe_at_path (line 135) | fn show_recipe_at_path() {
function show_invalid_path (line 149) | fn show_invalid_path() {
function show_space_separated_path (line 157) | fn show_space_separated_path() {
FILE: tests/signals.rs
function kill (line 3) | fn kill(child: &Child, signal: Signal) {
function interrupt_test (line 7) | fn interrupt_test(arguments: &[&str], justfile: &str) {
function interrupt_shebang (line 46) | fn interrupt_shebang() {
function interrupt_line (line 59) | fn interrupt_line() {
function interrupt_backtick (line 71) | fn interrupt_backtick() {
function interrupt_command (line 85) | fn interrupt_command() {
function forwarding (line 94) | fn forwarding() {
function siginfo_prints_current_process (line 166) | fn siginfo_prints_current_process() {
FILE: tests/slash_operator.rs
function once (line 4) | fn once() {
function twice (line 13) | fn twice() {
function no_lhs_once (line 22) | fn no_lhs_once() {
function no_lhs_twice (line 31) | fn no_lhs_twice() {
function no_rhs_once (line 45) | fn no_rhs_once() {
function default_un_parenthesized (line 61) | fn default_un_parenthesized() {
function no_lhs_un_parenthesized (line 82) | fn no_lhs_un_parenthesized() {
function default_parenthesized (line 103) | fn default_parenthesized() {
function no_lhs_parenthesized (line 117) | fn no_lhs_parenthesized() {
FILE: tests/string.rs
function raw_string (line 4) | fn raw_string() {
function multiline_raw_string (line 20) | fn multiline_raw_string() {
function multiline_backtick (line 46) | fn multiline_backtick() {
function multiline_cooked_string (line 69) | fn multiline_cooked_string() {
function cooked_string_suppress_newline (line 95) | fn cooked_string_suppress_newline() {
function invalid_escape_sequence (line 117) | fn invalid_escape_sequence() {
function error_line_after_multiline_raw_string (line 136) | fn error_line_after_multiline_raw_string() {
function error_column_after_multiline_raw_string (line 161) | fn error_column_after_multiline_raw_string() {
function multiline_raw_string_in_interpolation (line 186) | fn multiline_raw_string_in_interpolation() {
function error_line_after_multiline_raw_string_in_interpolation (line 212) | fn error_line_after_multiline_raw_string_in_interpolation() {
function unterminated_raw_string (line 236) | fn unterminated_raw_string() {
function unterminated_string (line 257) | fn unterminated_string() {
function unterminated_backtick (line 278) | fn unterminated_backtick() {
function unterminated_indented_raw_string (line 299) | fn unterminated_indented_raw_string() {
function unterminated_indented_string (line 320) | fn unterminated_indented_string() {
function unterminated_indented_backtick (line 341) | fn unterminated_indented_backtick() {
function indented_raw_string_contents_indentation_removed (line 362) | fn indented_raw_string_contents_indentation_removed() {
function indented_cooked_string_contents_indentation_removed (line 385) | fn indented_cooked_string_contents_indentation_removed() {
function indented_backtick_string_contents_indentation_removed (line 408) | fn indented_backtick_string_contents_indentation_removed() {
function indented_raw_string_escapes (line 428) | fn indented_raw_string_escapes() {
function indented_cooked_string_escapes (line 451) | fn indented_cooked_string_escapes() {
function indented_backtick_string_escapes (line 475) | fn indented_backtick_string_escapes() {
function shebang_backtick (line 495) | fn shebang_backtick() {
function valid_unicode_escape (line 515) | fn valid_unicode_escape() {
function unicode_escapes_with_all_hex_digits (line 524) | fn unicode_escapes_with_all_hex_digits() {
function maximum_valid_unicode_escape (line 533) | fn maximum_valid_unicode_escape() {
function unicode_escape_no_braces (line 542) | fn unicode_escape_no_braces() {
function unicode_escape_empty (line 559) | fn unicode_escape_empty() {
function unicode_escape_requires_immediate_opening_brace (line 576) | fn unicode_escape_requires_immediate_opening_brace() {
function unicode_escape_non_hex (line 593) | fn unicode_escape_non_hex() {
function unicode_escape_invalid_character (line 610) | fn unicode_escape_invalid_character() {
function unicode_escape_too_long (line 627) | fn unicode_escape_too_long() {
function unicode_escape_unterminated (line 644) | fn unicode_escape_unterminated() {
FILE: tests/subsequents.rs
function success (line 4) | fn success() {
function failure (line 31) | fn failure() {
function circular_dependency (line 59) | fn circular_dependency() {
function unknown (line 79) | fn unknown() {
function unknown_argument (line 99) | fn unknown_argument() {
function argument (line 121) | fn argument() {
function duplicate_subsequents_dont_run (line 145) | fn duplicate_subsequents_dont_run() {
function subsequents_run_even_if_already_ran_as_prior (line 182) | fn subsequents_run_even_if_already_ran_as_prior() {
FILE: tests/summary.rs
function summary (line 4) | fn summary() {
function summary_sorted (line 21) | fn summary_sorted() {
function summary_unsorted (line 36) | fn summary_unsorted() {
function summary_none (line 52) | fn summary_none() {
function no_recipes (line 62) | fn no_recipes() {
function submodule_recipes (line 71) | fn submodule_recipes() {
function summary_implies_unstable (line 90) | fn summary_implies_unstable() {
FILE: tests/tempdir.rs
function tempdir (line 3) | pub(crate) fn tempdir() -> TempDir {
function setting (line 19) | fn setting() {
function argument_overrides_setting (line 54) | fn argument_overrides_setting() {
FILE: tests/test.rs
type Output (line 6) | pub(crate) struct Output {
type Test (line 13) | pub(crate) struct Test {
method new (line 32) | pub(crate) fn new() -> Self {
method with_tempdir (line 36) | pub(crate) fn with_tempdir(tempdir: TempDir) -> Self {
method arg (line 56) | pub(crate) fn arg(mut self, val: &str) -> Self {
method args (line 61) | pub(crate) fn args<'a>(mut self, args: impl AsRef<[&'a str]>) -> Self {
method create_dir (line 68) | pub(crate) fn create_dir(self, path: impl AsRef<Path>) -> Self {
method current_dir (line 73) | pub(crate) fn current_dir(mut self, path: impl AsRef<Path>) -> Self {
method env (line 78) | pub(crate) fn env(mut self, key: &str, val: &str) -> Self {
method justfile (line 83) | pub(crate) fn justfile(mut self, justfile: impl Into<String>) -> Self {
method justfile_path (line 88) | pub(crate) fn justfile_path(&self) -> PathBuf {
method symlink (line 94) | pub(crate) fn symlink(self, original: &str, link: &str) -> Self {
method no_justfile (line 103) | pub(crate) fn no_justfile(mut self) -> Self {
method response (line 108) | pub(crate) fn response(mut self, response: Response) -> Self {
method shell (line 113) | pub(crate) fn shell(mut self, shell: bool) -> Self {
method stderr (line 118) | pub(crate) fn stderr(mut self, stderr: impl Into<String>) -> Self {
method stderr_regex (line 123) | pub(crate) fn stderr_regex(mut self, stderr_regex: impl AsRef<str>) ->...
method stdin (line 128) | pub(crate) fn stdin(mut self, stdin: impl Into<String>) -> Self {
method stdout (line 133) | pub(crate) fn stdout(mut self, stdout: impl Into<String>) -> Self {
method stdout_regex (line 138) | pub(crate) fn stdout_regex(mut self, stdout_regex: impl AsRef<str>) ->...
method test_round_trip (line 143) | pub(crate) fn test_round_trip(mut self, test_round_trip: bool) -> Self {
method tree (line 148) | pub(crate) fn tree(self, mut tree: Tree) -> Self {
method unindent_stdout (line 154) | pub(crate) fn unindent_stdout(mut self, unindent_stdout: bool) -> Self {
method write (line 159) | pub(crate) fn write(self, path: impl AsRef<Path>, content: impl AsRef<...
method make_executable (line 166) | pub(crate) fn make_executable(self, path: impl AsRef<Path>) -> Self {
method expect_file (line 190) | pub(crate) fn expect_file(mut self, path: impl AsRef<Path>, content: i...
method success (line 199) | pub(crate) fn success(self) -> Output {
method failure (line 204) | pub(crate) fn failure(self) -> Output {
method status (line 209) | pub(crate) fn status(self, status: i32) -> Output {
method round_trip (line 323) | fn round_trip(&self) {
function assert_eval_eq (line 361) | pub(crate) fn assert_eval_eq(expression: &str, result: &str) {
FILE: tests/timestamps.rs
function quiet (line 4) | fn quiet() {
function linewise (line 20) | fn linewise() {
function script (line 35) | fn script() {
function format_string (line 51) | fn format_string() {
FILE: tests/undefined_variables.rs
function parameter_default_unknown_variable_in_expression (line 4) | fn parameter_default_unknown_variable_in_expression() {
function unknown_variable_in_unary_call (line 20) | fn unknown_variable_in_unary_call() {
function unknown_first_variable_in_binary_call (line 40) | fn unknown_first_variable_in_binary_call() {
function unknown_second_variable_in_binary_call (line 60) | fn unknown_second_variable_in_binary_call() {
function unknown_variable_in_ternary_call (line 80) | fn unknown_variable_in_ternary_call() {
FILE: tests/unexport.rs
function unexport_environment_variable_linewise (line 4) | fn unexport_environment_variable_linewise() {
function unexport_environment_variable_shebang (line 20) | fn unexport_environment_variable_shebang() {
function duplicate_unexport_fails (line 37) | fn duplicate_unexport_fails() {
function export_unexport_conflict (line 63) | fn export_unexport_conflict() {
function unexport_doesnt_override_local_recipe_export (line 88) | fn unexport_doesnt_override_local_recipe_export() {
function unexport_does_not_conflict_with_recipe_syntax (line 104) | fn unexport_does_not_conflict_with_recipe_syntax() {
function unexport_does_not_conflict_with_assignment_syntax (line 118) | fn unexport_does_not_conflict_with_assignment_syntax() {
FILE: tests/unstable.rs
function set_unstable_true_with_env_var (line 4) | fn set_unstable_true_with_env_var() {
function set_unstable_false_with_env_var (line 16) | fn set_unstable_false_with_env_var() {
function set_unstable_false_with_env_var_unset (line 28) | fn set_unstable_false_with_env_var_unset() {
function set_unstable_with_setting (line 37) | fn set_unstable_with_setting() {
function unstable_setting_does_not_affect_submodules (line 50) | fn unstable_setting_does_not_affect_submodules() {
FILE: tests/usage.rs
function usage (line 4) | fn usage() {
FILE: tests/which_function.rs
constant HELLO_SCRIPT (line 3) | const HELLO_SCRIPT: &str = "#!/usr/bin/env bash
function finds_executable (line 8) | fn finds_executable() {
function prints_empty_string_for_missing_executable (line 24) | fn prints_empty_string_for_missing_executable() {
function skips_non_executable_files (line 39) | fn skips_non_executable_files() {
function supports_multiple_paths (line 55) | fn supports_multiple_paths() {
function supports_shadowed_executables (line 82) | fn supports_shadowed_executables() {
function ignores_nonexecutable_candidates (line 124) | fn ignores_nonexecutable_candidates() {
function handles_absolute_path (line 154) | fn handles_absolute_path() {
function handles_dotslash (line 173) | fn handles_dotslash() {
function handles_dir_slash (line 198) | fn handles_dir_slash() {
function is_unstable (line 223) | fn is_unstable() {
function require_error (line 238) | fn require_error() {
function finds_executable_via_pathext (line 255) | fn finds_executable_via_pathext() {
function pathext_not_applied_when_candidate_has_extension (line 276) | fn pathext_not_applied_when_candidate_has_extension() {
function pathext_custom_extension (line 296) | fn pathext_custom_extension() {
function pathext_entry_missing_dot_is_error (line 316) | fn pathext_entry_missing_dot_is_error() {
function pathext_ignored_on_non_windows (line 337) | fn pathext_ignored_on_non_windows() {
function require_success (line 357) | fn require_success() {
FILE: tests/windows.rs
function bare_bash_in_shebang (line 4) | fn bare_bash_in_shebang() {
FILE: tests/windows_shell.rs
function windows_shell_setting (line 4) | fn windows_shell_setting() {
function windows_powershell_setting_uses_powershell_set_shell (line 22) | fn windows_powershell_setting_uses_powershell_set_shell() {
function windows_powershell_setting_uses_powershell (line 40) | fn windows_powershell_setting_uses_powershell() {
FILE: tests/working_directory.rs
constant JUSTFILE (line 3) | const JUSTFILE: &str = r#"
constant DATA (line 16) | const DATA: &str = "OK";
constant WANT (line 18) | const WANT: &str = "shebang: OK\nexpression: OK\ndefault: OK\nlinewise: ...
function justfile_without_working_directory (line 23) | fn justfile_without_working_directory() -> Result<(), Box<dyn Error>> {
function justfile_without_working_directory_relative (line 49) | fn justfile_without_working_directory_relative() -> Result<(), Box<dyn E...
function change_working_directory_to_search_justfile_parent (line 76) | fn change_working_directory_to_search_justfile_parent() -> Result<(), Bo...
function justfile_and_working_directory (line 102) | fn justfile_and_working_directory() -> Result<(), Box<dyn Error>> {
function search_dir_child (line 132) | fn search_dir_child() -> Result<(), Box<dyn Error>> {
function search_dir_parent (line 160) | fn search_dir_parent() -> Result<(), Box<dyn Error>> {
function setting (line 186) | fn setting() {
function no_cd_overrides_setting (line 216) | fn no_cd_overrides_setting() {
function working_dir_in_submodule_is_relative_to_module_path (line 239) | fn working_dir_in_submodule_is_relative_to_module_path() {
function working_dir_applies_to_backticks (line 258) | fn working_dir_applies_to_backticks() {
function working_dir_applies_to_shell_function (line 276) | fn working_dir_applies_to_shell_function() {
function working_dir_applies_to_backticks_in_submodules (line 294) | fn working_dir_applies_to_backticks_in_submodules() {
function working_dir_applies_to_shell_function_in_submodules (line 315) | fn working_dir_applies_to_shell_function_in_submodules() {
function attribute_duplicate (line 336) | fn attribute_duplicate() {
function attribute (line 357) | fn attribute() {
function attribute_with_nocd_is_forbidden (line 372) | fn attribute_with_nocd_is_forbidden() {
function setting_and_attribute (line 394) | fn setting_and_attribute() {
Condensed preview — 269 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,493K chars).
[
{
"path": ".editorconfig",
"chars": 358,
"preview": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\n# Text is UTF-8\nchars"
},
{
"path": ".gitattributes",
"chars": 8,
"preview": "* -text\n"
},
{
"path": ".github/workflows/ci.yaml",
"chars": 2017,
"preview": "name: CI\n\non:\n pull_request:\n branches:\n - '*'\n push:\n branches:\n - master\n\ndefaults:\n run:\n shell: ba"
},
{
"path": ".github/workflows/release.yaml",
"chars": 5314,
"preview": "name: Release\n\non:\n push:\n tags:\n - '*'\n\ndefaults:\n run:\n shell: bash\n\nenv:\n RUSTFLAGS: --deny warnings\n\njob"
},
{
"path": ".gitignore",
"chars": 214,
"preview": ".DS_Store\n.idea\n/.vagrant\n/.vscode\n/README.html\n/book/en/build\n/book/en/src\n/book/zh/build\n/book/zh/src\n/fuzz/artifacts\n"
},
{
"path": "CHANGELOG.md",
"chars": 157513,
"preview": "Changelog\n=========\n\n[1.47.1](https://github.com/casey/just/releases/tag/1.47.1) - 2026-03-16\n--------------------------"
},
{
"path": "CONTRIBUTING.md",
"chars": 309,
"preview": "Contributing\n============\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion"
},
{
"path": "Cargo.toml",
"chars": 2793,
"preview": "[package]\nname = \"just\"\nversion = \"1.47.1\"\nauthors = [\"Casey Rodarmor <casey@rodarmor.com>\"]\nautotests = false\ncategorie"
},
{
"path": "GRAMMAR.md",
"chars": 4109,
"preview": "justfile grammar\n================\n\nJustfiles are processed by a mildly context-sensitive tokenizer\nand a recursive desce"
},
{
"path": "LICENSE",
"chars": 7048,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "README.md",
"chars": 132192,
"preview": "<div align=right>Table of Contents↗️</div>\n\n<h1 align=center><code>just</code></h1>\n\n<div align=center>\n <a href=https:"
},
{
"path": "README.中文.md",
"chars": 52873,
"preview": "↖️ 目录\n\n<h1 align=\"center\"><code>just</code></h1>\n\n<div align=\"center\">\n <a href=\"https://crates.io/crates/just\">\n <i"
},
{
"path": "Vagrantfile",
"chars": 512,
"preview": "Vagrant.configure(2) do |config|\n config.vm.box = 'debian/jessie64'\n\n config.vm.provision \"shell\", inline: <<-EOS\n "
},
{
"path": "bin/forbid",
"chars": 283,
"preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nif ! which rg > /dev/null; then\n echo 'error: `rg` not found, please install ri"
},
{
"path": "bin/package",
"chars": 1149,
"preview": "#!/usr/bin/env bash\n\nset -euxo pipefail\n\nVERSION=${REF#\"refs/tags/\"}\nDIST=`pwd`/dist\n\necho \"Packaging just $VERSION for "
},
{
"path": "book/en/book.toml",
"chars": 209,
"preview": "[book]\nlanguage = \"en\"\nsrc = \"src\"\ntitle = \"Just Programmer's Manual\"\n\n[build]\nbuild-dir = \"build\"\n\n[output.html]\ngit-re"
},
{
"path": "book/zh/book.toml",
"chars": 194,
"preview": "[book]\nlanguage = \"zh\"\nsrc = \"src\"\ntitle = \"Just 用户指南\"\n\n[build]\nbuild-dir = \"build\"\n\n[output.html]\ngit-repository-url = "
},
{
"path": "build.rs",
"chars": 334,
"preview": "fn main() {\n let os = std::env::var(\"CARGO_CFG_TARGET_OS\").unwrap();\n let env = std::env::var(\"CARGO_CFG_TARGET_ENV\")."
},
{
"path": "clippy.toml",
"chars": 89,
"preview": "cognitive-complexity-threshold = 1337\nsource-item-ordering = ['enum', 'struct', 'trait']\n"
},
{
"path": "completions/just.bash",
"chars": 7252,
"preview": "_just() {\n local i cur prev words cword opts cmd\n COMPREPLY=()\n\n # Modules use \"::\" as the separator, which is "
},
{
"path": "completions/just.elvish",
"chars": 5714,
"preview": "use builtin;\nuse str;\n\nset edit:completion:arg-completer[just] = {|@words|\n fn spaces {|n|\n builtin:repeat $n "
},
{
"path": "completions/just.fish",
"chars": 5414,
"preview": "function __fish_just_complete_recipes\n if string match -rq '(-f|--justfile)\\s*=?(?<justfile>[^\\s]+)' -- (string s"
},
{
"path": "completions/just.nu",
"chars": 367,
"preview": "def \"nu-complete just\" [] {\n (^just --dump --unstable --dump-format json | from json).recipes | transpose recipe data"
},
{
"path": "completions/just.powershell",
"chars": 12336,
"preview": "using namespace System.Management.Automation\nusing namespace System.Management.Automation.Language\n\nRegister-ArgumentCom"
},
{
"path": "completions/just.zsh",
"chars": 7655,
"preview": "#compdef just\n\nautoload -U is-at-least\n\n_just() {\n typeset -A opt_args\n typeset -a _arguments_options\n local re"
},
{
"path": "contrib/just.sh",
"chars": 645,
"preview": "#!/usr/bin/env bash\n\n# cd upwards to the justfile\nwhile [[ ! -e justfile ]]; do\n if [[ $PWD = / ]] || [[ $PWD = $JUSTST"
},
{
"path": "crates/generate-book/Cargo.toml",
"chars": 160,
"preview": "[package]\nname = \"generate-book\"\nversion = \"0.0.0\"\nedition = \"2018\"\npublish = false\n\n[dependencies]\npulldown-cmark = \"0."
},
{
"path": "crates/generate-book/src/main.rs",
"chars": 5066,
"preview": "use {\n pulldown_cmark::{CowStr, Event, HeadingLevel, Options, Parser, Tag},\n pulldown_cmark_to_cmark::cmark,\n std::{\n"
},
{
"path": "crates/update-contributors/Cargo.toml",
"chars": 122,
"preview": "[package]\nname = \"update-contributors\"\nversion = \"0.0.0\"\nedition = \"2021\"\npublish = false\n\n[dependencies]\nregex = \"1.5.4"
},
{
"path": "crates/update-contributors/src/main.rs",
"chars": 922,
"preview": "use {\n regex::{Captures, Regex},\n std::{fs, process::Command, str},\n};\n\nfn author(pr: u64) -> String {\n eprintln!(\"#{"
},
{
"path": "crates-io-readme.md",
"chars": 585,
"preview": "`just` is a handy way to save and run project-specific commands.\n\nCommands are stored in a file called `justfile` or `Ju"
},
{
"path": "examples/cross-platform.just",
"chars": 796,
"preview": "# use with https://github.com/casey/just\n#\n# Example cross-platform Python project\n#\n\npython_dir := if os_family() == \"w"
},
{
"path": "examples/keybase.just",
"chars": 356,
"preview": "# use with https://github.com/casey/just\n\n# Be inspired to use just to notify a chat\n# channel, this examples shows use "
},
{
"path": "examples/kitchen-sink.just",
"chars": 4462,
"preview": "set shell := [\"sh\", \"-c\"]\nset windows-shell := [\"powershell.exe\", \"-NoLogo\", \"-Command\"]\nset allow-duplicate-recipes\nset"
},
{
"path": "examples/powershell.just",
"chars": 663,
"preview": "# Cross platform shebang:\nshebang := if os() == 'windows' {\n 'powershell.exe'\n} else {\n '/usr/bin/env pwsh'\n}\n\n# Set s"
},
{
"path": "examples/pre-commit.just",
"chars": 2193,
"preview": "# use with https://github.com/casey/just\n\n# Example combining just + pre-commit\n# pre-commit: https://pre-commit.com/\n# "
},
{
"path": "examples/screenshot.just",
"chars": 196,
"preview": "alias b := build\n\nhost := `uname -a`\n\n# build main\nbuild:\n cc *.c -o main\n\n# test everything\ntest-all: build\n ./te"
},
{
"path": "fuzz/Cargo.toml",
"chars": 420,
"preview": "[package]\nname = \"just-fuzz\"\nversion = \"0.0.0\"\nauthors = [\"Automatically generated\"]\npublish = false\nedition = \"2018\"\n\n["
},
{
"path": "fuzz/fuzz_targets/compile.rs",
"chars": 115,
"preview": "#![no_main]\nuse libfuzzer_sys::fuzz_target;\n\nfuzz_target!(|src: &str| {\n let _ = just::fuzzing::compile(src);\n});\n"
},
{
"path": "justfile",
"chars": 4720,
"preview": "#!/usr/bin/env -S just --justfile\n# ^ A shebang isn't required, but allows a justfile to be executed\n# like a script, "
},
{
"path": "rustfmt.toml",
"chars": 128,
"preview": "edition = \"2024\"\nmax_width = 100\nnewline_style = \"Unix\"\ntab_spaces = 2\nuse_field_init_shorthand = true\nuse_try_shorthand"
},
{
"path": "src/alias.rs",
"chars": 1286,
"preview": "use super::*;\n\n/// An alias, e.g. `alias name := target`\n#[derive(Debug, PartialEq, Clone, Serialize)]\npub(crate) struct"
},
{
"path": "src/alias_style.rs",
"chars": 143,
"preview": "use super::*;\n\n#[derive(Debug, Default, PartialEq, Clone, ValueEnum)]\npub(crate) enum AliasStyle {\n Left,\n #[default]\n"
},
{
"path": "src/analyzer.rs",
"chars": 14875,
"preview": "use {super::*, CompileErrorKind::*};\n\n#[derive(Default)]\npub(crate) struct Analyzer<'run, 'src> {\n aliases: Table<'src,"
},
{
"path": "src/arg_attribute.rs",
"chars": 273,
"preview": "use super::*;\n\npub(crate) struct ArgAttribute<'src> {\n pub(crate) help: Option<String>,\n pub(crate) long: Option<Strin"
},
{
"path": "src/assignment.rs",
"chars": 380,
"preview": "use super::*;\n\n/// An assignment, e.g `foo := bar`\npub(crate) type Assignment<'src> = Binding<'src, Expression<'src>>;\n\n"
},
{
"path": "src/assignment_resolver.rs",
"chars": 3004,
"preview": "use {super::*, CompileErrorKind::*};\n\npub(crate) struct AssignmentResolver<'src: 'run, 'run> {\n assignments: &'run Tabl"
},
{
"path": "src/ast.rs",
"chars": 954,
"preview": "use super::*;\n\n/// The top-level type produced by the parser. Not all successful parses result\n/// in valid justfiles, s"
},
{
"path": "src/attribute.rs",
"chars": 10077,
"preview": "use super::*;\n\n#[allow(clippy::large_enum_variant)]\n#[derive(\n EnumDiscriminants, PartialEq, Debug, Clone, Serialize, O"
},
{
"path": "src/attribute_set.rs",
"chars": 1874,
"preview": "use {super::*, std::collections};\n\n#[derive(Default, Debug, Clone, PartialEq, Serialize)]\npub(crate) struct AttributeSet"
},
{
"path": "src/binding.rs",
"chars": 527,
"preview": "use super::*;\n\n/// A binding of `name` to `value`\n#[derive(Debug, Clone, PartialEq, Serialize)]\npub(crate) struct Bindin"
},
{
"path": "src/color.rs",
"chars": 3488,
"preview": "use {\n super::*,\n ansi_term::{ANSIGenericString, Color::*, Prefix, Style, Suffix},\n std::io::{self, IsTerminal},\n};\n\n"
},
{
"path": "src/color_display.rs",
"chars": 401,
"preview": "use super::*;\n\npub(crate) trait ColorDisplay {\n fn color_display(&self, color: Color) -> Wrapper\n where\n Self: Size"
},
{
"path": "src/command_color.rs",
"chars": 568,
"preview": "use super::*;\n\n#[derive(Copy, Clone, ValueEnum)]\npub(crate) enum CommandColor {\n Black,\n Blue,\n Cyan,\n Green,\n Purp"
},
{
"path": "src/command_ext.rs",
"chars": 2182,
"preview": "use super::*;\n\npub(crate) trait CommandExt {\n fn export(\n &mut self,\n settings: &Settings,\n dotenv: &BTreeMap<"
},
{
"path": "src/compilation.rs",
"chars": 361,
"preview": "use super::*;\n\n#[derive(Debug)]\npub(crate) struct Compilation<'src> {\n pub(crate) asts: HashMap<PathBuf, Ast<'src>>,\n "
},
{
"path": "src/compile_error.rs",
"chars": 12615,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq)]\npub(crate) struct CompileError<'src> {\n pub(crate) kind: Box<CompileErrorKin"
},
{
"path": "src/compile_error_kind.rs",
"chars": 3934,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq)]\npub(crate) enum CompileErrorKind<'src> {\n ArgAttributeValueRequiresOption,\n "
},
{
"path": "src/compiler.rs",
"chars": 9740,
"preview": "use super::*;\n\npub(crate) struct Compiler;\n\nimpl Compiler {\n pub(crate) fn compile<'src>(\n config: &Config,\n load"
},
{
"path": "src/completions.rs",
"chars": 10264,
"preview": "use super::*;\n\n#[derive(ValueEnum, Debug, Clone, Copy, PartialEq)]\npub(crate) enum Shell {\n Bash,\n Elvish,\n Fish,\n #"
},
{
"path": "src/condition.rs",
"chars": 706,
"preview": "use super::*;\n\n#[derive(PartialEq, Debug, Clone)]\npub(crate) struct Condition<'src> {\n pub(crate) lhs: Box<Expression<'"
},
{
"path": "src/conditional_operator.rs",
"chars": 530,
"preview": "use super::*;\n\n/// A conditional expression operator.\n#[derive(PartialEq, Debug, Copy, Clone)]\npub(crate) enum Condition"
},
{
"path": "src/config.rs",
"chars": 48580,
"preview": "use {\n super::*,\n clap::{\n Arg, ArgAction, ArgGroup, ArgMatches, Command,\n builder::{\n FalseyValueParser, S"
},
{
"path": "src/config_error.rs",
"chars": 1834,
"preview": "use super::*;\n\n#[derive(Debug, Snafu)]\n#[snafu(visibility(pub(crate)), context(suffix(Context)))]\npub(crate) enum Config"
},
{
"path": "src/const_error.rs",
"chars": 780,
"preview": "use super::*;\n\n#[derive(Clone, Copy, Debug)]\npub(crate) enum ConstError<'src> {\n Backtick(Token<'src>),\n FunctionCall("
},
{
"path": "src/constants.rs",
"chars": 2464,
"preview": "use super::*;\n\nconst CONSTANTS: &[(&str, &str, Option<&str>, &str)] = &[\n (\"HEX\", \"0123456789abcdef\", None, \"1.27.0\"),\n"
},
{
"path": "src/count.rs",
"chars": 502,
"preview": "use super::*;\n\npub(crate) struct Count<T: Display>(pub T, pub usize);\n\nimpl<T: Display> Display for Count<T> {\n fn fmt("
},
{
"path": "src/delimiter.rs",
"chars": 505,
"preview": "use super::*;\n\n#[derive(Clone, Copy, Debug, Eq, PartialEq)]\npub(crate) enum Delimiter {\n Brace,\n Bracket,\n FormatStri"
},
{
"path": "src/dependency.rs",
"chars": 1016,
"preview": "use super::*;\n\n#[derive(Clone, PartialEq, Debug, Serialize)]\npub(crate) struct Dependency<'src> {\n #[serde(serialize_wi"
},
{
"path": "src/dump_format.rs",
"chars": 136,
"preview": "use super::*;\n\n#[derive(Clone, Copy, Debug, Default, PartialEq, ValueEnum)]\npub(crate) enum DumpFormat {\n Json,\n #[def"
},
{
"path": "src/enclosure.rs",
"chars": 535,
"preview": "use super::*;\n\npub(crate) struct Enclosure<T: Display> {\n enclosure: &'static str,\n value: T,\n}\n\nimpl<T: Display> Encl"
},
{
"path": "src/error.rs",
"chars": 23197,
"preview": "use super::*;\n\n#[derive(Debug)]\npub(crate) enum Error<'src> {\n AmbiguousModuleFile {\n module: Name<'src>,\n found:"
},
{
"path": "src/evaluator.rs",
"chars": 17653,
"preview": "use super::*;\n\npub(crate) struct Evaluator<'src: 'run, 'run> {\n assignments: Option<&'run Table<'src, Assignment<'src>>"
},
{
"path": "src/execution_context.rs",
"chars": 1639,
"preview": "use super::*;\n\n#[derive(Copy, Clone)]\npub(crate) struct ExecutionContext<'src: 'run, 'run> {\n pub(crate) config: &'run "
},
{
"path": "src/executor.rs",
"chars": 4228,
"preview": "use super::*;\n\npub(crate) enum Executor<'a> {\n Command(Interpreter<String>),\n Shebang(Shebang<'a>),\n}\n\nimpl Executor<'"
},
{
"path": "src/expression.rs",
"chars": 5729,
"preview": "use super::*;\n\n/// An expression. Note that the Just language grammar has both an `expression`\n/// production of additio"
},
{
"path": "src/filesystem.rs",
"chars": 374,
"preview": "use super::*;\n\npub(crate) fn is_file(path: &Path) -> RunResult<'static, bool> {\n match path.metadata() {\n Ok(metadat"
},
{
"path": "src/format_string_part.rs",
"chars": 131,
"preview": "#[derive(PartialEq, Debug, Clone, Ord, Eq, PartialOrd)]\npub(crate) enum FormatStringPart {\n Continue,\n End,\n Single,\n"
},
{
"path": "src/fragment.rs",
"chars": 679,
"preview": "use super::*;\n\n/// A line fragment consisting either of…\n#[derive(PartialEq, Debug, Clone)]\npub(crate) enum Fragment<'sr"
},
{
"path": "src/function.rs",
"chars": 20251,
"preview": "use {\n super::*,\n Function::*,\n heck::{\n ToKebabCase, ToLowerCamelCase, ToShoutyKebabCase, ToShoutySnakeCase, ToSn"
},
{
"path": "src/fuzzing.rs",
"chars": 80,
"preview": "use super::*;\n\npub fn compile(text: &str) {\n let _ = testing::compile(text);\n}\n"
},
{
"path": "src/interpreter.rs",
"chars": 687,
"preview": "use super::*;\n\n#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]\npub(crate) struct Interpreter<T> {\n p"
},
{
"path": "src/invocation.rs",
"chars": 171,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq)]\npub(crate) struct Invocation<'src, 'run> {\n pub(crate) arguments: Vec<Vec<St"
},
{
"path": "src/invocation_parser.rs",
"chars": 16982,
"preview": "use super::*;\n\n#[allow(clippy::doc_markdown)]\n/// The invocation parser is responsible for grouping command-line positio"
},
{
"path": "src/item.rs",
"chars": 1784,
"preview": "use super::*;\n\n/// A single top-level item\n#[derive(Debug, Clone)]\npub(crate) enum Item<'src> {\n Alias(Alias<'src, Name"
},
{
"path": "src/justfile.rs",
"chars": 23866,
"preview": "use {super::*, serde::Serialize};\n\n#[derive(Debug, PartialEq, Serialize)]\npub(crate) struct Justfile<'src> {\n pub(crate"
},
{
"path": "src/keyed.rs",
"chars": 697,
"preview": "use super::*;\n\npub(crate) trait Keyed<'key> {\n fn key(&self) -> &'key str;\n}\n\nimpl<'key, T: Keyed<'key>> Keyed<'key> fo"
},
{
"path": "src/keyword.rs",
"chars": 1104,
"preview": "use super::*;\n\n#[derive(Debug, Eq, PartialEq, IntoStaticStr, Display, Copy, Clone, EnumString)]\n#[strum(serialize_all = "
},
{
"path": "src/lexer.rs",
"chars": 52362,
"preview": "use {super::*, CompileErrorKind::*, TokenKind::*};\n\n/// Just language lexer\n///\n/// The lexer proceeds character-by-char"
},
{
"path": "src/lib.rs",
"chars": 6561,
"preview": "//! `just` is primarily used as a command-line binary, but does provide a\n//! limited public library interface.\n//!\n//! "
},
{
"path": "src/line.rs",
"chars": 1388,
"preview": "use super::*;\n\n/// A single line in a recipe body, consisting of any number of `Fragment`s.\n#[derive(Debug, Clone, Parti"
},
{
"path": "src/list.rs",
"chars": 3249,
"preview": "use super::*;\n\npub(crate) struct List<T: Display, I: Iterator<Item = T> + Clone> {\n conjunction: &'static str,\n values"
},
{
"path": "src/load_dotenv.rs",
"chars": 1646,
"preview": "use super::*;\n\npub(crate) fn load_dotenv(\n config: &Config,\n settings: &Settings,\n working_directory: &Path,\n) -> Run"
},
{
"path": "src/loader.rs",
"chars": 616,
"preview": "use super::*;\n\npub(crate) struct Loader {\n paths: Arena<PathBuf>,\n srcs: Arena<String>,\n}\n\nimpl Loader {\n pub(crate) "
},
{
"path": "src/main.rs",
"chars": 102,
"preview": "fn main() {\n if let Err(code) = just::run(std::env::args_os()) {\n std::process::exit(code);\n }\n}\n"
},
{
"path": "src/modulepath.rs",
"chars": 2755,
"preview": "use super::*;\n\n#[derive(Debug, Default, Eq, Ord, PartialEq, PartialOrd, Clone)]\npub(crate) struct Modulepath {\n pub(cra"
},
{
"path": "src/name.rs",
"chars": 929,
"preview": "use super::*;\n\n/// A name. This is just a `Token` of kind `Identifier`, but we give it its own\n/// type for clarity.\n#[d"
},
{
"path": "src/namepath.rs",
"chars": 1233,
"preview": "use super::*;\n\n#[derive(Clone, Debug, PartialEq, Eq, Ord, PartialOrd)]\npub(crate) struct Namepath<'src>(Vec<Name<'src>>)"
},
{
"path": "src/node.rs",
"chars": 9644,
"preview": "use super::*;\n\n/// Methods common to all AST nodes. Currently only used in parser unit tests.\npub(crate) trait Node<'src"
},
{
"path": "src/number.rs",
"chars": 93,
"preview": "#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]\npub(crate) struct Number(pub(crate) u32);\n"
},
{
"path": "src/numerator.rs",
"chars": 377,
"preview": "use super::*;\n\npub(crate) struct Numerator(u32);\n\nimpl Numerator {\n pub(crate) fn new() -> Self {\n Self(constants()."
},
{
"path": "src/ordinal.rs",
"chars": 196,
"preview": "pub(crate) trait Ordinal {\n /// Convert an index starting at 0 to an ordinal starting at 1\n fn ordinal(self) -> Self;\n"
},
{
"path": "src/output_error.rs",
"chars": 1352,
"preview": "use super::*;\n\n#[derive(Debug)]\npub(crate) enum OutputError {\n /// Non-zero exit code\n Code(i32),\n /// Interrupted by"
},
{
"path": "src/parameter.rs",
"chars": 1632,
"preview": "use super::*;\n\n#[derive(PartialEq, Debug, Clone, Serialize)]\npub(crate) struct Parameter<'src> {\n pub(crate) default: O"
},
{
"path": "src/parameter_kind.rs",
"chars": 617,
"preview": "use super::*;\n\n/// Parameters can either be…\n#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize)]\n#[serde(rename_all "
},
{
"path": "src/parser.rs",
"chars": 78642,
"preview": "use {super::*, TokenKind::*};\n\n/// Just language parser\n///\n/// The parser is a (hopefully) straightforward recursive de"
},
{
"path": "src/pattern.rs",
"chars": 1523,
"preview": "use super::*;\n\n#[derive(Debug, Clone)]\npub(crate) struct Pattern<'src> {\n pub(crate) regex: Regex,\n pub(crate) token: "
},
{
"path": "src/platform/unix.rs",
"chars": 1823,
"preview": "use super::*;\n\nimpl PlatformInterface for Platform {\n fn make_shebang_command(\n _config: &Config,\n path: &Path,\n "
},
{
"path": "src/platform/windows.rs",
"chars": 2466,
"preview": "use super::*;\n\nimpl PlatformInterface for Platform {\n fn make_shebang_command(\n config: &Config,\n path: &Path,\n "
},
{
"path": "src/platform.rs",
"chars": 97,
"preview": "use super::*;\n\npub(crate) struct Platform;\n\n#[cfg(unix)]\nmod unix;\n\n#[cfg(windows)]\nmod windows;\n"
},
{
"path": "src/platform_interface.rs",
"chars": 865,
"preview": "use super::*;\n\npub(crate) trait PlatformInterface {\n /// translate path from \"native\" path to path interpreter expects\n"
},
{
"path": "src/position.rs",
"chars": 174,
"preview": "/// Source position\n#[derive(Copy, Clone, PartialEq, Debug)]\npub(crate) struct Position {\n pub(crate) column: usize,\n "
},
{
"path": "src/positional.rs",
"chars": 5787,
"preview": "use super::*;\n\n/// A struct containing the parsed representation of positional command-line\n/// arguments, i.e. argument"
},
{
"path": "src/ran.rs",
"chars": 422,
"preview": "use super::*;\n\n#[derive(Default)]\npub(crate) struct Ran(Mutex<BTreeMap<Modulepath, BTreeMap<Vec<Vec<String>>, Arc<Mutex<"
},
{
"path": "src/range_ext.rs",
"chars": 1059,
"preview": "use super::*;\n\npub(crate) trait RangeExt<T> {\n fn display(&self) -> DisplayRange<&Self> {\n DisplayRange(self)\n }\n}\n"
},
{
"path": "src/recipe.rs",
"chars": 17075,
"preview": "use super::*;\n\n/// Return a `Error::Signal` if the process was terminated by a signal,\n/// otherwise return an `Error::U"
},
{
"path": "src/recipe_resolver.rs",
"chars": 5202,
"preview": "use {super::*, CompileErrorKind::*};\n\npub(crate) struct RecipeResolver<'src: 'run, 'run> {\n assignments: &'run Table<'s"
},
{
"path": "src/recipe_signature.rs",
"chars": 393,
"preview": "use super::*;\n\npub(crate) struct RecipeSignature<'a> {\n pub(crate) name: &'a str,\n pub(crate) recipe: &'a Recipe<'a>,\n"
},
{
"path": "src/request.rs",
"chars": 377,
"preview": "use super::*;\n\n#[derive(Clone, Debug, Deserialize, PartialEq)]\n#[serde(rename_all = \"kebab-case\")]\npub enum Request {\n "
},
{
"path": "src/run.rs",
"chars": 1357,
"preview": "use super::*;\n\n/// Main entry point into `just`. Parse arguments from `args` and run.\n#[allow(clippy::missing_errors_doc"
},
{
"path": "src/scope.rs",
"chars": 1687,
"preview": "use super::*;\n\n#[derive(Debug)]\npub(crate) struct Scope<'src: 'run, 'run> {\n bindings: Table<'src, Binding<'src, String"
},
{
"path": "src/search.rs",
"chars": 12756,
"preview": "use {super::*, std::path::Component};\n\nconst DEFAULT_JUSTFILE_NAME: &str = JUSTFILE_NAMES[0];\npub(crate) const JUSTFILE_"
},
{
"path": "src/search_config.rs",
"chars": 826,
"preview": "use super::*;\n\n/// Controls how `just` will search for the justfile.\n#[derive(Debug, Default, PartialEq)]\npub(crate) enu"
},
{
"path": "src/search_error.rs",
"chars": 1366,
"preview": "use super::*;\n\n#[derive(Debug, Snafu)]\n#[snafu(visibility(pub(crate)))]\npub(crate) enum SearchError {\n #[snafu(display("
},
{
"path": "src/set.rs",
"chars": 376,
"preview": "use super::*;\n\n#[derive(Debug, Clone)]\npub(crate) struct Set<'src> {\n pub(crate) name: Name<'src>,\n pub(crate) value: "
},
{
"path": "src/setting.rs",
"chars": 2297,
"preview": "use super::*;\n\n#[derive(Debug, Clone)]\npub(crate) enum Setting<'src> {\n AllowDuplicateRecipes(bool),\n AllowDuplicateVa"
},
{
"path": "src/settings.rs",
"chars": 4977,
"preview": "use super::*;\n\npub(crate) const DEFAULT_SHELL: &str = \"sh\";\npub(crate) const DEFAULT_SHELL_ARGS: &[&str] = &[\"-cu\"];\npub"
},
{
"path": "src/shebang.rs",
"chars": 3448,
"preview": "#[derive(Copy, Clone)]\npub(crate) struct Shebang<'line> {\n pub(crate) argument: Option<&'line str>,\n pub(crate) interp"
},
{
"path": "src/show_whitespace.rs",
"chars": 412,
"preview": "use super::*;\n\n/// String wrapper that uses nonblank characters to display spaces and tabs\npub(crate) struct ShowWhitesp"
},
{
"path": "src/sigil.rs",
"chars": 100,
"preview": "#[derive(Eq, Ord, PartialEq, PartialOrd)]\npub(crate) enum Sigil {\n Guard,\n Infallible,\n Quiet,\n}\n"
},
{
"path": "src/signal.rs",
"chars": 3895,
"preview": "use super::*;\n\n#[derive(Clone, Copy, Debug, PartialEq)]\n#[repr(i32)]\npub(crate) enum Signal {\n Hangup = 1,\n #[cfg(any("
},
{
"path": "src/signal_handler.rs",
"chars": 3757,
"preview": "use super::*;\n\npub(crate) struct SignalHandler {\n caught: Option<Signal>,\n children: BTreeMap<i32, Command>,\n initial"
},
{
"path": "src/signals.rs",
"chars": 3515,
"preview": "use {\n super::*,\n nix::{\n errno::Errno,\n fcntl::{FcntlArg, FdFlag},\n sys::signal::{SaFlags, SigAction, SigHan"
},
{
"path": "src/source.rs",
"chars": 1659,
"preview": "use super::*;\n\n#[derive(Debug)]\npub(crate) struct Source<'src> {\n pub(crate) file_depth: u32,\n pub(crate) file_path: V"
},
{
"path": "src/string_delimiter.rs",
"chars": 140,
"preview": "#[derive(Debug, PartialEq, Clone, Copy, Ord, PartialOrd, Eq)]\npub(crate) enum StringDelimiter {\n Backtick,\n QuoteDoubl"
},
{
"path": "src/string_kind.rs",
"chars": 2627,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq, Clone, Copy, Ord, PartialOrd, Eq)]\npub(crate) struct StringKind {\n pub(crate)"
},
{
"path": "src/string_literal.rs",
"chars": 765,
"preview": "use super::*;\n\n#[derive(PartialEq, Debug, Clone, Ord, Eq, PartialOrd)]\npub(crate) struct StringLiteral<'src> {\n pub(cra"
},
{
"path": "src/string_state.rs",
"chars": 102,
"preview": "use super::*;\n\npub(crate) enum StringState {\n FormatContinue(StringKind),\n FormatStart,\n Normal,\n}\n"
},
{
"path": "src/subcommand.rs",
"chars": 23207,
"preview": "use {super::*, clap_mangen::Man};\n\npub const INIT_JUSTFILE: &str = \"\\\n# https://just.systems\n\ndefault:\n echo 'Hello, "
},
{
"path": "src/suggestion.rs",
"chars": 418,
"preview": "use super::*;\n\n#[derive(Clone, Copy, Debug, PartialEq)]\npub(crate) struct Suggestion<'src> {\n pub(crate) name: &'src st"
},
{
"path": "src/summary.rs",
"chars": 10786,
"preview": "//! Justfile summary creation, for testing purposes only.\n//!\n//! The contents of this module are not bound by any stabi"
},
{
"path": "src/switch.rs",
"chars": 310,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq)]\npub(crate) enum Switch {\n Long(String),\n Short(char),\n}\n\nimpl Display for S"
},
{
"path": "src/table.rs",
"chars": 2243,
"preview": "use {super::*, std::collections::btree_map};\n\n#[derive(Debug, PartialEq, Serialize)]\n#[serde(transparent)]\npub(crate) st"
},
{
"path": "src/testing.rs",
"chars": 3698,
"preview": "use {super::*, pretty_assertions::assert_eq};\n\npub(crate) fn compile(src: &str) -> Justfile {\n Compiler::test_compile(s"
},
{
"path": "src/thunk.rs",
"chars": 6592,
"preview": "use super::*;\n\n#[allow(clippy::arbitrary_source_item_ordering)]\n#[derive_where(Debug, PartialEq)]\n#[derive(Clone)]\npub(c"
},
{
"path": "src/token.rs",
"chars": 2826,
"preview": "use super::*;\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd)]\npub(crate) struct Token<'src> {\n pub(crate"
},
{
"path": "src/token_kind.rs",
"chars": 1983,
"preview": "use super::*;\n\n#[derive(Debug, PartialEq, Clone, Copy, Ord, PartialOrd, Eq)]\npub(crate) enum TokenKind {\n AmpersandAmpe"
},
{
"path": "src/tree.rs",
"chars": 3209,
"preview": "use {super::*, std::borrow::Cow};\n\n/// Construct a `Tree` from a symbolic expression literal. This macro, and the\n/// Tr"
},
{
"path": "src/unindent.rs",
"chars": 2920,
"preview": "#[must_use]\npub fn unindent(text: &str) -> String {\n // find line start and end indices\n let mut lines = Vec::new();\n "
},
{
"path": "src/unresolved_dependency.rs",
"chars": 519,
"preview": "use super::*;\n\n#[derive(PartialEq, Debug, Clone)]\npub(crate) struct UnresolvedDependency<'src> {\n pub(crate) arguments:"
},
{
"path": "src/unresolved_recipe.rs",
"chars": 3839,
"preview": "use super::*;\n\npub(crate) type UnresolvedRecipe<'src> = Recipe<'src, UnresolvedDependency<'src>>;\n\nimpl<'src> Unresolved"
},
{
"path": "src/unstable_feature.rs",
"chars": 803,
"preview": "use super::*;\n\n#[derive(Copy, Clone, Debug, PartialEq, Ord, Eq, PartialOrd)]\npub(crate) enum UnstableFeature {\n EagerAs"
},
{
"path": "src/usage.rs",
"chars": 3946,
"preview": "use super::*;\n\npub(crate) struct Usage<'a, D> {\n pub(crate) long: bool,\n pub(crate) path: &'a Modulepath,\n pub(crate)"
},
{
"path": "src/use_color.rs",
"chars": 123,
"preview": "use super::*;\n\n#[derive(Copy, Clone, Debug, PartialEq, ValueEnum)]\npub(crate) enum UseColor {\n Always,\n Auto,\n Never,"
},
{
"path": "src/variables.rs",
"chars": 3156,
"preview": "use super::*;\n\npub(crate) struct Variables<'expression, 'src> {\n stack: Vec<&'expression Expression<'src>>,\n}\n\nimpl<'ex"
},
{
"path": "src/verbosity.rs",
"chars": 835,
"preview": "#[allow(clippy::arbitrary_source_item_ordering)]\n#[derive(Copy, Clone, Debug, PartialEq, PartialOrd)]\npub(crate) enum Ve"
},
{
"path": "src/warning.rs",
"chars": 887,
"preview": "use super::*;\n\n#[derive(Clone, Debug, PartialEq)]\npub(crate) enum Warning {}\n\nimpl Warning {\n #[allow(clippy::unused_se"
},
{
"path": "src/which.rs",
"chars": 1991,
"preview": "use super::*;\n\npub(crate) fn which(context: function::Context, name: &str) -> Result<Option<String>, String> {\n let nam"
},
{
"path": "tests/alias.rs",
"chars": 939,
"preview": "use super::*;\n\n#[test]\nfn alias_nested_module() {\n Test::new()\n .write(\"foo.just\", \"mod bar\\nbaz: \\n @echo FOO\")\n "
},
{
"path": "tests/alias_style.rs",
"chars": 1638,
"preview": "use super::*;\n\n#[test]\nfn default() {\n Test::new()\n .justfile(\n \"\n alias f := foo\n\n # comment\n "
},
{
"path": "tests/allow_duplicate_recipes.rs",
"chars": 573,
"preview": "use super::*;\n\n#[test]\nfn allow_duplicate_recipes() {\n Test::new()\n .justfile(\n \"\n b:\n echo foo\n "
},
{
"path": "tests/allow_duplicate_variables.rs",
"chars": 287,
"preview": "use super::*;\n\n#[test]\nfn allow_duplicate_variables() {\n Test::new()\n .justfile(\n \"\n a := 'foo'\n a :="
},
{
"path": "tests/allow_missing.rs",
"chars": 1024,
"preview": "use super::*;\n\n#[test]\nfn allow_missing_recipes_in_run_invocation() {\n Test::new()\n .arg(\"foo\")\n .stderr(\"error: "
},
{
"path": "tests/arg_attribute.rs",
"chars": 7132,
"preview": "use super::*;\n\n#[test]\nfn pattern_match() {\n Test::new()\n .justfile(\n \"\n [arg('bar', pattern='BAR')]\n "
},
{
"path": "tests/assert_stdout.rs",
"chars": 181,
"preview": "use super::*;\n\npub(crate) fn assert_stdout(output: &std::process::Output, stdout: &str) {\n assert_success(output);\n as"
},
{
"path": "tests/assert_success.rs",
"chars": 289,
"preview": "#[track_caller]\npub(crate) fn assert_success(output: &std::process::Output) {\n if !output.status.success() {\n eprint"
},
{
"path": "tests/assertions.rs",
"chars": 538,
"preview": "use super::*;\n\n#[test]\nfn assert_pass() {\n Test::new()\n .justfile(\n \"\n foo:\n {{ assert('a' == '"
},
{
"path": "tests/assignment.rs",
"chars": 984,
"preview": "use super::*;\n\n#[test]\nfn set_export_parse_error() {\n Test::new()\n .justfile(\n \"\n set export := fals\n \",\n "
},
{
"path": "tests/attributes.rs",
"chars": 7102,
"preview": "use super::*;\n\n#[test]\nfn all() {\n Test::new()\n .justfile(\n \"\n [dragonfly]\n [freebsd]\n [linux]\n "
},
{
"path": "tests/backticks.rs",
"chars": 270,
"preview": "use super::*;\n\n#[test]\nfn trailing_newlines_are_stripped() {\n Test::new()\n .shell(false)\n .args([\"--evaluate\", \"f"
},
{
"path": "tests/byte_order_mark.rs",
"chars": 885,
"preview": "use super::*;\n\n#[test]\nfn ignore_leading_byte_order_mark() {\n Test::new()\n .justfile(\n \"\n \\u{feff}foo:\n "
},
{
"path": "tests/ceiling.rs",
"chars": 1917,
"preview": "use super::*;\n\n#[test]\nfn justfile_run_search_stops_at_ceiling_dir() {\n let tempdir = tempdir();\n\n let ceiling = tempd"
},
{
"path": "tests/changelog.rs",
"chars": 162,
"preview": "use super::*;\n\n#[test]\nfn print_changelog() {\n Test::new()\n .args([\"--changelog\"])\n .stdout(fs::read_to_string(\"C"
},
{
"path": "tests/choose.rs",
"chars": 4850,
"preview": "use super::*;\n\n#[test]\nfn env() {\n Test::new()\n .arg(\"--choose\")\n .env(\"JUST_CHOOSER\", \"head -n1\")\n .justfile("
},
{
"path": "tests/command.rs",
"chars": 3436,
"preview": "use super::*;\n\n#[test]\nfn long() {\n Test::new()\n .arg(\"--command\")\n .arg(\"printf\")\n .arg(\"foo\")\n .justfile("
},
{
"path": "tests/completions/just.bash",
"chars": 1510,
"preview": "#!/usr/bin/env bash\n\n# --- Shared functions ---\nreply_equals() {\n local reply=$(declare -p COMPREPLY)\n local expected="
},
{
"path": "tests/completions/justfile",
"chars": 38,
"preview": "install:\ntest:\ndeploy:\npush:\npublish:\n"
},
{
"path": "tests/completions/subdir/justfile",
"chars": 19,
"preview": "special:\nsurprise:\n"
},
{
"path": "tests/completions.rs",
"chars": 936,
"preview": "use super::*;\n\n#[test]\nfn bash() {\n if cfg!(not(target_os = \"linux\")) {\n return;\n }\n let output = Command::new(JUS"
},
{
"path": "tests/conditional.rs",
"chars": 4269,
"preview": "use super::*;\n\n#[test]\nfn then_branch_unevaluated() {\n Test::new()\n .justfile(\n \"\n foo:\n echo {{ if 'a'"
},
{
"path": "tests/confirm.rs",
"chars": 3116,
"preview": "use super::*;\n\n#[test]\nfn confirm_recipe_arg() {\n Test::new()\n .arg(\"--yes\")\n .justfile(\n \"\n [confirm"
},
{
"path": "tests/constants.rs",
"chars": 1181,
"preview": "use super::*;\n\n#[test]\nfn constants_are_defined() {\n assert_eval_eq(\"HEX\", \"0123456789abcdef\");\n}\n\n#[test]\nfn constants"
},
{
"path": "tests/datetime.rs",
"chars": 439,
"preview": "use super::*;\n\n#[test]\nfn datetime() {\n Test::new()\n .justfile(\n \"\n x := datetime('%Y-%m-%d %z')\n \""
},
{
"path": "tests/default.rs",
"chars": 657,
"preview": "use super::*;\n\n#[test]\nfn default_attribute_overrides_first_recipe() {\n Test::new()\n .justfile(\n \"\n foo:"
},
{
"path": "tests/delimiters.rs",
"chars": 1620,
"preview": "use super::*;\n\n#[test]\nfn mismatched_delimiter() {\n Test::new()\n .justfile(\"(]\")\n .stderr(\n \"\n error: Mis"
},
{
"path": "tests/dependencies.rs",
"chars": 2291,
"preview": "use super::*;\n\n#[test]\nfn recipe_doubly_nested_module_dependencies() {\n Test::new()\n .write(\"foo.just\", \"mod bar\\nba"
},
{
"path": "tests/directories.rs",
"chars": 1953,
"preview": "use super::*;\n\n#[test]\nfn cache_directory() {\n Test::new()\n .justfile(\"x := cache_directory()\")\n .args([\"--evalua"
},
{
"path": "tests/dotenv.rs",
"chars": 8331,
"preview": "use super::*;\n\n#[test]\nfn dotenv() {\n Test::new()\n .write(\".env\", \"KEY=ROOT\")\n .write(\"sub/.env\", \"KEY=SUB\")\n "
},
{
"path": "tests/dump.rs",
"chars": 476,
"preview": "use super::*;\n\n#[test]\nfn dump() {\n Test::new()\n .arg(\"--dump\")\n .justfile(\n \"\n # this recipe does so"
},
{
"path": "tests/edit.rs",
"chars": 3845,
"preview": "use super::*;\n\nconst JUSTFILE: &str = \"Yooooooo, hopefully this never becomes valid syntax.\";\n\n/// Test that --edit does"
},
{
"path": "tests/equals.rs",
"chars": 392,
"preview": "use super::*;\n\n#[test]\nfn export_recipe() {\n Test::new()\n .justfile(\n \"\n export foo='bar':\n echo {{"
},
{
"path": "tests/error_messages.rs",
"chars": 2461,
"preview": "use super::*;\n\n#[test]\nfn invalid_alias_attribute() {\n Test::new()\n .justfile(\"[private]\\n[linux]\\nalias t := test\\n"
},
{
"path": "tests/evaluate.rs",
"chars": 2140,
"preview": "use super::*;\n\n#[test]\nfn evaluate() {\n Test::new()\n .arg(\"--evaluate\")\n .justfile(\n r#\"\nfoo := \"a\\t\"\nhello "
},
{
"path": "tests/examples.rs",
"chars": 371,
"preview": "use super::*;\n\n#[test]\nfn examples() {\n for result in fs::read_dir(\"examples\").unwrap() {\n let entry = result.unwrap"
},
{
"path": "tests/explain.rs",
"chars": 366,
"preview": "use super::*;\n\n#[test]\nfn explain_recipe() {\n Test::new()\n .justfile(\n \"\n # List some fruits\n fruits:"
},
{
"path": "tests/export.rs",
"chars": 4103,
"preview": "use super::*;\n\n#[test]\nfn success() {\n Test::new()\n .justfile(\n r#\"\nexport FOO := \"a\"\nbaz := \"c\"\nexport BAR := "
},
{
"path": "tests/fallback.rs",
"chars": 5715,
"preview": "use super::*;\n\n#[test]\nfn fallback_from_subdir_bugfix() {\n Test::new()\n .write(\n \"sub/justfile\",\n unindent"
},
{
"path": "tests/format.rs",
"chars": 22424,
"preview": "use super::*;\n\n#[test]\nfn unstable_not_passed() {\n Test::new()\n .arg(\"--fmt\")\n .justfile(\"\")\n .stderr_regex(\"e"
},
{
"path": "tests/format_string.rs",
"chars": 5605,
"preview": "use super::*;\n\n#[test]\nfn empty() {\n Test::new()\n .justfile(\n \"\n foo := f''\n\n @baz:\n ech"
},
{
"path": "tests/functions.rs",
"chars": 29308,
"preview": "use super::*;\n\n#[test]\nfn test_os_arch_functions_in_interpolation() {\n Test::new()\n .justfile(\n r\"\nfoo:\n echo "
}
]
// ... and 69 more files (download for full content)
About this extraction
This page contains the full source code of the casey/just GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 269 files (1.3 MB), approximately 399.9k tokens, and a symbol index with 2170 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.