Releases: reubeno/brush
brush v0.3.0
🚀 Release Notes
This is a major release, containing architectural improvements and compatibility-focused features and fixes. A big thanks to all of the contributors over the last few months, including issue filers, question-askers, and code contributors 🙏.
Based on user-filed issues (thank you!), targeted work went into improving compatibility with popular tools like fzf and neofetch.
Additionally, a significant amount of work went into refactoring and improving usability of the public API surface within the crate-based libraries that make up brush's core. These come with breaking changes for programmatic clients, but we're confident they will come with significant benefit.
The following summary covers the most notable changes and the full change details are below.
✅ Features and Improvements
Builtins
- The
fcbuiltin received its initial implementation! bindimplementation received support for binding key sequences to readline functions (e.g.,"\C-a":beginning-of-line).trapnow fully implements theEXITtrap.
Standard variables
- Basic support for use of
BASH_XTRACEFDwas added. A new command-line parameter tobrush(--inherit-fd) enables allow-listing inherited file descriptors for use within the shell.
Control flow
- Support for an undocumented C-like syntax for arithmetic
forloops has been implemented for improved compatibility.
🪳 Notable bug fixes
- Fixes for quote handling of
\'in double-quoted word contexts. - Targeted fixes to history importing make it more robust against non-UTF8 compatible text.
- Fixes for parsing of here-documents in quoted command substitutions.
- Fixes for nuanced quote removal in parameter expressions with replacements (e.g.,
"${var:+'x'}"). - Fixes for command substitution expansions resulting in spawning processes with large volumes of output (e.g.,
$(emit-a-lot-of-text)). - Updates to the open file table made by commandless
exec(e.g.,exec 2>/dev/null) are now reflected immediately, even when in a loop context.
🚧 API Changes
Changes in this section pertain to programmatic clients of the brush-core, brush-parser, and brush-interactive crates. They do not apply to application-level shell users.
brush-builtins
All shell builtins have been moved into a new dedicated brush-builtins crate. With this move, significant refactoring was done to ensure that these builtins are all implementable using public APIs exposed by brush-core. In doing so, this also significantly advanced the richness of the latter APIs.
Important
Programmatic clients of the brush-core crate will find that a constructed Shell is not automatically populated with the usual set of builtins. New optional APIs exist in the brush-builtins crate to retrieve default builtins and in brush-core to register them with a Shell instance.
Parsing and AST
As an important step on our journey to evolve brush's parsers, @lu_zero has made contributions that start enriching our parsed Abstract Syntax Trees (ASTs) with links back to the source text. As part of this work, a new SourceLocation trait was introduced and implemented for many AST node types. Work will continue in the coming releases.
API Ergonomics
To improve ergonomics, we've introduce builder-based construction utilities to key structures like brush_core::Shell. We will continue to expand on this adoption over time to simplify the work of constructing these values.
Note that the signature of Shell::new() has changed and may require adjustment in callers.
Error handling
As preparatory work for future improvements, we've overhauled the core error types and execution result types in brush-core:
-
Errorhas been renamed toErrorKind, with a new wrappingErrorstruct type that can carry additional context. This will be used in the future for improved diagnostics. -
Clients of
brush-corecan now provide their own custom error formatter to render a displayable string from anErrorvalue. This will be used by some of our frontends for fancier diagnostics in the future. It also decouples error formatting from writing. -
Multiple overlapping result types across the core interpreter, command utilities, and builtins have been consolidated into a coherent set of
ExecutionResult,ExecutionExitCode, andExecutionControlFlowtypes. Along the way a handful of bugs for edge cases were identified and resolved as part of the streamlining.
Details
- build(deps): bump the github-actions group with 6 updates by @dependabot[bot] in #669
- build(deps): bump procfs from 0.17.0 to 0.18.0 in the cargo group across 1 directory by @dependabot[bot] in #671
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #675
- Add a ShellBuilder by @lu-zero in #651
- build(deps): bump the cargo group with 4 updates by @dependabot[bot] in #676
- fix: clean cache in cd pipeline by @reubeno in #679
- ci: run static code checks on linux + macOS too by @reubeno in #678
- build(deps): bump serde from 1.0.221 to 1.0.223 in the cargo group by @dependabot[bot] in #680
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #681
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #683
- build(deps): bump the cargo group with 5 updates by @dependabot[bot] in #684
- chore: fix build error with cargo nightly by @reubeno in #687
- build(deps): bump the github-actions group with 4 updates by @dependabot[bot] in #685
- build(deps): bump the cargo group with 3 updates by @dependabot[bot] in #686
- refactor: use
Shellbuilder pattern in more code by @reubeno in #688 - refactor: update Shell::new() to take creation options as owned by @reubeno in #689
- ci: fix benchmark execution by @reubeno in #691
- refactor: move builtins into their own crate by @reubeno in #690
- refactor: Shell struct API improvements by @reubeno in #692
- chore(msrv)!: upgrade MSRV to 1.87.0 by @reubeno in #693
- refactor: os_pipe::pipe() -> std::io::pipe() by @reubeno in #695
- chore: update dependencies by @reubeno in #696
- build(deps): bump the github-actions group with 6 updates by @dependabot[bot] in #697
- build(deps): bump bon from 3.7.2 to 3.8.0 in the cargo group by @dependabot[bot] in #698
- build(deps): bump the github-actions group with 4 updates by @dependabot[bot] in #707
- build(deps): bump the cargo group with 5 updates by @dependabot[bot] in #708
- fix: workaround error on nightly by @reubeno in #711
- fix: don't fail importing unreadable history lines by @reubeno in #710
- refactor: extract script + function call stacks to their own modules by @reubeno in #709
- docs: first draft of an AI policy in CONTRIBUTING.md by @reubeno in #694
- build(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #712
- build(deps): bump the cargo group with 8 updates by @dependabot[bot] in #713
- fix: tokenizer handling of here docs in quoted command substitutions by @reubeno in #716
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #718
- build(deps): bump the cargo group with 2 updates by @dependabot[bot] in #717
- docs: add an initial AGENTS.md file by @reubeno in #714
- refactor: error/result type overhaul by @reubeno in #720
- feat: enable custom error formatting by @reubeno in #722
- fix: address lint errors from stable + nightly by @reubeno in #723
- chore: add instructions to guide advisory-only copilot code reviews by @reubeno in #721
- ci: add cooldown settings for dependabot by @reubeno in #724
- fix: add missing license symlink by @reubeno in #725
- fix: add missing cfg conditions on builtin registrations by @reubeno in #726
- Refactor SourcePosition to use Arc by @lu-zero in #727
- Introduce source location by @lu-zero in #728
- fix: correct read variable update behavior on empty input by @reubeno in #729
- fix: address race conditions in basic input tests by @reubeno in #730
- ci: upgrade bash-completion by @reubeno in #731
- fix: do not pass along exported-but-un...
brush v0.2.23
🚀 Release Notes
This is a targeted release with a fix for brush --version.
🗒️ Details
- fix(cmdline): correct exit code for
--version+--helpby @reubeno in #667 - chore: prepare release by @reubeno in #668
Full Changelog: brush-shell-v0.2.22...brush-shell-v0.2.23
brush v0.2.22
🚀 Release Notes
This release contains a few focused changes and dependency upgrades.
Notable changes:
- Added initial (optional)
mietteintegration for improved error messages. (Thanks to @lu-zero for making this happen!) - Resolved some warnings and errors with the experimental Windows build of
brush. (Thanks to @twz123 for identifying issues with thehomedircrate!) - Excluded from history commands executed by
bindbindings.
🗒️ Details
- fix: exclude bind-bound commands from history by @reubeno in #650
- build(deps): bump the cargo group with 4 updates by @dependabot[bot] in #654
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #655
- Add minimal miette support by @lu-zero in #648
- fix(cmdline): improve error handling for unknown cmdline options by @reubeno in #656
- docs: update readme by @reubeno in #657
- build(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #658
- build(deps): bump the cargo group with 4 updates by @dependabot[bot] in #659
- chore: additional clippy fixes by @reubeno in #661
- chore: downgrade homedir by @reubeno in #662
- chore: address warnings on windows targets by @reubeno in #663
- build(deps): bump tracing-subscriber from 0.3.19 to 0.3.20 in the cargo group by @dependabot[bot] in #664
- chore: prepare release by @reubeno in #665
Full Changelog: brush-shell-v0.2.21...brush-shell-v0.2.22
brush v0.2.21
🚀 Release Notes
This release contains several bug fixes to improve compatibility with bash, as well as some feature work focused on command history. We are now also publishing more complete license notices along with the binaries we release on GitHub.
Notable features and fixes:
- Implemented
historybuiltin! This has been in the works for a while, but we saw it reach stability during this release cycle. - Resolved a handful of issues discovered by users trying to run Arch's
makepkgscript underbrush, including some missing functionality in brace expansion and arithmetic expression parsing. (Thanks to @theoparis for finding and reporting these!) - Resolved panics occurring with strings containing multi-byte characters. (Thanks to @colindean for catching and root-causing these!)
- Adds support for
(<"$file")special-case supported by bash.
Notable installation improvements:
brushis now installable viahomebrew! (Thanks to @colindean for updating our readme with instructions.)brushis installable (more officially) from Arch! (Thanks to @roland-5 for readme updates on that.)
🗒️ Details
- fix(ci): correct CD workflow run name by @reubeno in #603
- build(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #605
- Arch Linux - update installation instruction by @roland-5 in #604
- fix: prepare tests to run against bash-5.3 by @reubeno in #610
- build(deps): bump the github-actions group across 1 directory with 4 updates by @dependabot[bot] in #611
- build(deps): bump the cargo group across 1 directory with 5 updates by @dependabot[bot] in #609
- build(deps): bump the cargo group with 3 updates by @dependabot[bot] in #612
- build(deps): bump the cargo group with 2 updates by @dependabot[bot] in #613
- build(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #617
- build(deps): bump tokio from 1.46.1 to 1.47.0 in the cargo group by @dependabot[bot] in #616
- build(deps): bump the cargo group with 2 updates by @dependabot[bot] in #619
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #620
- build(deps): bump the cargo group with 2 updates by @dependabot[bot] in #621
- feat(history): implement history builtin by @reubeno in #599
- ci: publish license notices by @reubeno in #622
- chore: update dependencies by @reubeno in #623
- fix(parser): resolve issue with parser confusing subshell for arith expr by @reubeno in #624
- fix(expansion): support broader set of nested brace expansions by @reubeno in #625
- fix(unset): correct unset of associative array element by @reubeno in #626
- build(deps): bump indenter from 0.3.3 to 0.3.4 in the cargo group by @dependabot[bot] in #627
- build(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #628
- fix(declare): refine varname validation by @reubeno in #629
- fix: hyphenated script args by @reubeno in #630
- fix: special case for command subst by @reubeno in #632
- chore: update lock file by @reubeno in #633
- chore: remove unused import from python script by @reubeno in #634
- ci: pin rust-toolchain tasks by @reubeno in #635
- chore: remove unused global variable by @reubeno in #636
- chore: remove unused global variable by @reubeno in #637
- build(deps): bump slab from 0.4.10 to 0.4.11 in the cargo group by @dependabot[bot] in #640
- Adds Homebrew nudge to installation section by @colindean in #638
- fix: correct obvious string indexing errors by @reubeno in #641
- fix: fixes for preexec-style bash extensions by @reubeno in #643
- chore: cleanup allow attributes, switch to expect where possible by @reubeno in #642
- chore: rename license notice document by @reubeno in #645
- chore: prepare release by @reubeno in #644
- fix: add back 2 suppressions by @reubeno in #647
New Contributors
- @roland-5 made their first contribution in #604
- @colindean made their first contribution in #638
Full Changelog: brush-shell-v0.2.20...brush-shell-v0.2.21
brush v0.2.20
🚀 Release Notes
This release includes a targeted change to the project's default compiler flags (see #600 for details). Prior to this change, release builds defaulted to optimizing for the build host's hardware platform; while useful for individuals, this is problematic for users who plan to use the built binaries on a different system.
Notable features and fixes:
- Fixed "illegal instruction" issue sometimes seen when building
brushon one system and running on another. (Thanks to @kachick for diagnosing and fixing this!) - Added support for
+o/-oon thebrushcommand line. - Corrected behavior of positional parameter shadowing with
source/.builtin.
Notable API improvements:
- Ergonomics improvements to
Shell::invoke_function,ShellValueconstruction, and a few other places. (Thanks to @Elsie19 for contributions here!)
🗒️ Details
- chore: suppress cognitive complexity errors (for now) by @reubeno in #583
- fix(dot): only shadow args when provided to
sourceby @reubeno in #582 - docs: README.md installation updates by @reubeno in #580
- ci: fix dry-run PR trigger on CD workflow by @reubeno in #584
- chore: update dependencies + deny policy by @reubeno in #586
- tests: tag test binary dependencies by @reubeno in #585
- tests: add test cases for open issues by @reubeno in #587
- docs: update README.md badges by @reubeno in #588
- fix(input): multiline input with basic input backend by @reubeno in #589
- feat: enable -o/+o on brush command line by @reubeno in #590
- tests: add not-yet-passing history tests by @reubeno in #591
- build(deps): bump the github-actions group with 5 updates by @dependabot in #592
- build(deps): bump test-with from 0.15.1 to 0.15.2 in the cargo group by @dependabot in #593
- chore: remove unneeded dev deps by @reubeno in #594
- chore: add some tools to devcontainer by @reubeno in #595
- ci: enable advanced codeql scanning by @reubeno in #597
- feat(api): API usability improvements for
Shell::invoke_functionby @reubeno in #596 - chan(ShellValue): take in an
Intoby @Elsie19 in #598 - perf: avoid CPU-specific optimization by @kachick in #600
- chore: update dependencies by @reubeno in #601
- chore: prepare release by @reubeno in #602
Full Changelog: brush-shell-v0.2.19...brush-shell-v0.2.20
brush v0.2.19
🚀 Release Notes
This release included a batch of compatibility fixes, ergonomics improvements to the API surfaces of brush-core and brush-parser crates, and some targeted performance improvements.
Notable features:
- Add
BRUSH_VERSIONvariable to distinguish versions ofbrushfrom the version ofbashit targets compatibility with. (Thanks to @kachick for proposing and implementing this one.) - API adjustments to script parsing in
brush-corefor ergonomics. (Thanks to @hwittenborn for contributing this.) - Initial (non-translating) support for gettext quoted strings. (Thanks to @Elsie19 for identifying this gap and merging in an initial implementation.)
- Overhaul of
printfbuiltin using theuucorecrate from the Rust coreutils project. - Added support for
>&-,>&N-, and otherbash-extended redirection forms.
Highlighted fixes:
- Correct handling of escape sequences in ANSI-C strings.
- Handle here documents terminated by EOF (Thanks to @mati865 for reporting this.)
- Fix behavior of
brushwhen commands are piped tostdin. (Thanks to @andychu for catching and reporting this.)
Other shout-outs:
- Big shout-out to @andychu for onboarding
brushto the Oils project's cross-shell compatibility testing! More discussion of this can be found here.
🗒️ Details
- fix(typeset): mark typeset as a declaration builtin by @reubeno in #517
- fix(tokenizer): correctly treat $( (...) ) as a cmd substitution by @reubeno in #521
- feat(AndOrList): add iteration abilities by @Elsie19 in #512
- build(deps): bump the cargo group with 3 updates by @dependabot in #522
- fix(backquote): correct backslash handling by @reubeno in #524
- fix(test): reuse -ef, -nt, -ot support by @reubeno in #525
- fix(vars): ensure effective GID is first in GROUPS by @reubeno in #526
- fix(arithmetic): permit space after unary operator by @reubeno in #527
- feat(vars): implement correct updating for -u/-c/-l vars by @reubeno in #529
- ci: hash-pin actions + explicitly constrain token needs by @reubeno in #532
- feat(env): introduce brush specific variable by @kachick in #531
- ci: clean up ci report workflow by @reubeno in #533
- ci: enable checks against workflow yaml by @reubeno in #534
- ci: fix pedantic warnings from newer zizmor release by @reubeno in #535
- feat: enable cargo-binstall to work with brush by @reubeno in #536
- test: work-in-progress script to run bash test suite by @reubeno in #537
- build(deps): bump pprof from 0.14.0 to 0.15.0 in the cargo group by @dependabot in #542
- ci: run cd workflow in dry-run mode on PR by @reubeno in #543
- build(deps): bump the github-actions group with 2 updates by @dependabot in #541
- test(parser): enable serde::Serialize on AST et al. for test targets by @reubeno in #544
- Allow reading a script from bytes by @hwittenborn in #509
- test(parser): start using insta crate for snapshot-testing parser by @reubeno in #545
- Add ability to clear all functions from shell environment by @hwittenborn in #546
- build(deps): bump the github-actions group with 3 updates by @dependabot in #549
- test(tokenizer): adopt insta for tokenizer tests by @reubeno in #550
- feat(parser): add gettext enabled quotes by @Elsie19 in #446
- fix(tokenizer): correctly handle here docs terminated by EOF by @reubeno in #551
- chore: upgrade MSRV to 1.85.0 by @reubeno in #553
- chore: upgrade crates to Rust 2024 edition by @reubeno in #554
- feat(printf): replace printf impl with uucore wrapper by @reubeno in #552
- chore: enable more lints + fixes by @reubeno in #555
- fix(interactive): fix behavior of cmds piped to stdin by @reubeno in #539
- chore: upgrade dependencies by @reubeno in #556
- chore: update resolver version in Cargo.toml by @reubeno in #557
- fix(traps): add stub definition for RETURN trap by @reubeno in #559
- fix(functions): allow func names to contain slashes by @reubeno in #560
- fix(tokenizer): handle escaped single-quote in ANSI-C quoted string by @reubeno in #561
- fix(arithmetic): correct left shift handling by @reubeno in #562
- build(deps): bump the github-actions group with 4 updates by @dependabot in #564
- fix(local): enable use of local to detect function by @reubeno in #565
- fix(expansion): handle signed numbers in ranges by @reubeno in #566
- fix(redirection): assorted fixes to redirection by @reubeno in #567
- fix(prompt): implement
\Aby @reubeno in #569 - feat(args): add --rcfile command-line option by @reubeno in #568
- fix(expansion): correct ${!PARAM@...} by @reubeno in #570
- fix(ci): upgrade taiki-e/install-action to v2.53.2 to resolve build issue by @reubeno in #572
- fix(expansion): fix parsing escaped single-quotes in ANSI-C strs by @reubeno in #571
- perf: remove redundant lookups in path searching by @reubeno in #573
- Abstract parse errors by @lu-zero in #574
- build(deps): bump the github-actions group with 4 updates by @dependabot in #577
- fix(for/case): allow reserved words in for word lists by @reubeno in #578
- chore: prepare release by @reubeno in #579
New Contributors
- @hwittenborn made their first contribution in #509
Full Changelog: brush-shell-v0.2.18...brush-shell-v0.2.19
brush v0.2.18
🚀 Release Notes
Since our last release we've seen an influx of interest, thanks in part to getting posted to Hacker News and elsewhere. Welcome all! We appreciate your interest, questions, filed issues, and support 😄
This release focuses on a wave of fixes to address some of the user feedback we've received, as well as some targeted features that had been on our backlog for quite some time.
Some select highlights:
- Ergonomic improvements to the
brush-coreexported API surface for applications embeddingbrush. (Particular thanks to @Elsie19 and other contributors on this). - Support for logical/physical options (
-L,-P) tocd,pwd, et al. (This builds on the work that @39555 started several months back; thanks for your patience until we were able to get to it!) - Significant improvements to the
mapfile/readarraybuiltin. (Thanks to @Elsie19 on overhauling mapfile's core input loop.) - Initial implementation of the
ulimitbuiltin. (Thanks to @lu-zero for getting it from unimplemented to something reasonable.) - Initial implementation of
bind -xsupport, used by many shell extensions and users'.bashrcfiles; there's more to do, but this covers a long asked-for feature request from the community.
There's plenty more bug fixes and changes -- as usual, the full details are below. And a big shout-out to our new contributors as well as contributors who dove in deeper this cycle! 🙏
🗒️ Details
- fix: correct release tag check in cd pipeline by @reubeno in #443
- feat(apply_unary_predicate_to_str): implement
-Roperand by @Elsie19 in #439 - feat(Shell): add methods to add environmental variables and builtins by @Elsie19 in #447
- ref(Shell): turn
&Pathparameters intoAsRef<Path>by @Elsie19 in #448 - build(deps): bump taiki-e/upload-rust-binary-action from 1.24.0 to 1.25.0 in the github-actions group by @dependabot in #450
- fix(prompt): support PROMPT_COMMAND arrays by @reubeno in #451
- fix(trap): handle '-' unregistration syntax by @reubeno in #452
- test(extended-tests): explicitly set modified date on test files by @reubeno in #453
- chore: upgrade dependencies: reedline, nix, clap, thiserror, etc. by @reubeno in #456
- chore: enable (and fix) current checks across all workspace crates by @reubeno in #457
- feat: implement {cd,pwd} -{L,P} by @reubeno in #458
- build(deps): bump the cargo group with 3 updates by @dependabot in #461
- build(deps): bump the github-actions group with 2 updates by @dependabot in #460
- fix(complete): fixes + tests for "declare -r" by @reubeno in #462
- fix: enable unnameable_types lint and mitigate errors by @reubeno in #459
- fix(builtin): fix issues with 'builtin' invoking declaration builtins by @reubeno in #466
- fix(declare): turn down volume on non-existent functions by @reubeno in #467
- fix(expansion): allow negative subscripts with indexed arrays + slices by @reubeno in #468
- chore: better log + connect unimpl functionality with GH issues by @reubeno in #476
- chore: separate release and bench profiles by @reubeno in #477
- test: add compat test for $_ (not yet passing) by @reubeno in #480
- docs: update readme by @reubeno in #481
- test: add known failing tests for reported issues by @reubeno in #483
- feat(builtins): implement basic
bind -xsupport by @reubeno in #478 - fix: allow "bind" usage in .bashrc by @reubeno in #485
- build(deps): bump the cargo group with 3 updates by @dependabot in #487
- feat(mapfile): Register also as readarray by @lu-zero in #486
- fix(expansion): fix issues parsing backquoted commands nested in single/double-quoted strings by @reubeno in #491
- feat(funcs): implement function exporting/importing by @reubeno in #492
- fix(break,continue): use
default_value_tfor flag values by @Elsie19 in #493 - docs: add discord invite to readme by @reubeno in #494
- chore(edit_mode): Fix clippy lints by @lu-zero in #495
- fix(help): better compact argument help by @reubeno in #499
- fix(input): map Ctrl+_ -> undo by @reubeno in #500
- fix: fix typos + add spell-checking PR check by @reubeno in #501
- feat(mapfile): implement
-n,-d,-sby @Elsie19 in #490 - Implement ulimit by @lu-zero in #482
- docs(readme): a Fish as a shell implemented in Rust by @brettcannon in #505
- chore: prepare release by @reubeno in #504
- fix: add missing tokio feature to unblock release by @reubeno in #506
- fix: suppress warning when building with --no-default-features by @reubeno in #508
New Contributors
- @brettcannon made their first contribution in #505
Full Changelog: brush-shell-v0.2.17...brush-shell-v0.2.18
brush v0.2.17
Release Notes
This release brings:
- Targeted ergonomics improvements for users of
brush_core::Shell - Minor completion improvements for syntactically complex command-lines
- Build and test support for
-muslvariants ofbrush - Early experimental build-only support for building for
wasm32-unknown-unknown
And a big shout-out to our new contributors! Please keep reading for more details.
What's Changed
- build(deps): bump the cargo group with 3 updates by @dependabot in #426
- chore: get building for wasm32-unknown-unknown by @reubeno in #425
- fix: honor COMP_WORDBREAKS in completion tokenization by @reubeno in #407
- build(deps): bump the cargo group with 2 updates by @dependabot in #427
- ci: build musl variant + reenable aarch64 tests by @reubeno in #428
- build(deps): bump rand from 0.9.0 to 0.9.1 in the cargo group by @dependabot in #431
- test: implement --skip in brush-compat-tests harness by @reubeno in #432
- docs: Add instructions for installing from the AUR by @orhun in #433
- fix: handle complete builtin run without options by @reubeno in #435
- chore(Shell): use relaxed typing for string input by @Elsie19 in #437
- feat(Shell): add
get_env_varmethod for more generic variable returns by @Elsie19 in #438 - build: add workflow for publishing release binaries to GH by @reubeno in #440
- chore: prepare release by @reubeno in #441
New Contributors
Full Changelog: brush-shell-v0.2.16...brush-shell-v0.2.17
brush v0.2.16
Release Notes
This release brings an assortment of fixes for reported compatibility issues and an upgrade of reedline to 0.39.0. Most notably:
execnow supports being used commandlessly, to update open file descriptors in the running shell- arithmetic expressions support
base#literalsyntax for integer literals $PS4is prompt-expanded when used inset -xet al.command -pis now implemented- targeted fixes to support running our compatibility test suite in more environments (e.g., NixOS)
Keep reading for more details.
What's Changed
- fix(builtins): implement command-less exec semantics with open fds by @reubeno in #384
- fix(builtins): correct read handling of IFS/space by @reubeno in #385
- fix(extglob): correct handling of extglobs with empty branches by @reubeno in #386
- feat(arithmetic): support explicit base#literal in arithmetic by @reubeno in #388
- docs: add how to use via nixpkgs by @kachick in #387
- build(deps): bump the cargo group with 2 updates by @dependabot in #389
- fix: default PS1 and PS2 in interactive mode by @reubeno in #390
- fix: correct path tests on empty strings by @reubeno in #391
- fix: reset default prompt color by @reubeno in #392
- build(deps): bump the cargo group with 2 updates by @dependabot in #393
- Expand contents of PS4 when tracing by @dan4thewin in #396
- docs: fill out TBD sections in CONTRIBUTING.md + add extension suggestions by @reubeno in #397
- chore: upgrade cached crate by @reubeno in #398
- docs: add lines-of-code badge to readme by @reubeno in #399
- docs: symlink licenses under crate dirs by @reubeno in #400
- build(deps): bump serde from 1.0.218 to 1.0.219 in the cargo group by @dependabot in #401
- chore: rewrite dir diffing test code to minimize deps by @reubeno in #403
- feat: implement
command -pby @reubeno and @39555 in #402 - fix: allow newline in empty array assignment by @idealseal in #405
- fix: improve panic handling output by @reubeno in #409
- build(deps): bump the cargo group with 2 updates by @dependabot in #410
- test: add more linux distros to test matrix by @reubeno in #412
- ci: bump bash-completion tests to 2.16.0 by @reubeno in #414
- test: enable testing on nixos/nix container image by @reubeno in #413
- chore: upgrade reedline + other deps by @reubeno in #415
- fix(regex): enable multiline mode for extended test regexes by @reubeno in #416
- fix: parse '#' as char only if inside a variable expansion by @idealseal in #418
- build(deps): bump whoami from 1.5.2 to 1.6.0 in the cargo group by @dependabot in #423
- chore: prepare release by @reubeno in #424
New Contributors
- @kachick made their first contribution in #387
- @dan4thewin made their first contribution in #396
- @idealseal made their first contribution in #405
Full Changelog: brush-shell-v0.2.15...brush-shell-v0.2.16
brush v0.2.15
Release Notes
Another release with a sizable number of targeted fixes for posted issues, performance tweaks, and a couple of smaller features. The most noticeable feature may be the introduction of "dynamic variables" into the shell implementation, which allowed us to add quick support for standard special variables like $SHELLOPTS, $BASHOPTS, et al.
What's Changed
- build(deps): bump the cargo group across 1 directory with 4 updates by @dependabot in #320
- fix(builtins): skip unenumerable vars in set builtin by @reubeno in #322
- test(perf): update tokenizer/parser benchmarks by @reubeno in #321
- fix(patterns): fix incorrect parse of char ranges by @reubeno in #323
- chore: remove unneeded string cloning for arithmetic eval by @reubeno in #324
- feat(continue): implement continue n for n >= 2 by @reubeno in #326
- fix(completion): improve basic backend completion output by @reubeno in #327
- chore: update readme by @reubeno in #331
- chore: test updates by @reubeno in #330
- feat(options): implement dotglob semantics by @reubeno in #332
- feat(options): implement "set -t" by @reubeno in #333
- build(deps): bump indexmap from 2.7.0 to 2.7.1 in the cargo group by @dependabot in #334
- feat(options): implement "set -a" by @reubeno in #336
- chore: adopt native arm64 github runners by @reubeno in #335
- chore: remove some unneeded
pub(crate)visibility annotations by @reubeno in #346 - fix(exit): correct exit semantics in various compund statements by @reubeno in #347
- fix(for): correct semantics for "for" without "in" by @reubeno in #348
- fix: correct semantics of = in non-extended test commands by @reubeno in #349
- fix(return): error if return used outside sourced script or function by @reubeno in #350
- build: partially revert recent arm64 changes by @reubeno in #352
- fix(arithmetic): recursively evaluate var references by @reubeno in #351
- fix(arithmetic): fixes for nested parenthesis parsing in arithmetic by @reubeno in #353
- fix(builtins): fix set builtin handling of - and -- by @reubeno in #354
- fix(builtins): do not interpret --help in command builtin command args by @reubeno in #355
- fix(builtins): correct more 'set' argument parsing by @reubeno in #356
- fix(variables): more correct handling of integer variables by @reubeno in #357
- fix(redirection): make sure redirection fd + operator are contiguous by @reubeno in #359
- feat(env): introduce dynamic vars backed by rust code by @reubeno in #360
- perf: minor optimizations for shell create + command run by @reubeno in #362
- perf: simplify export enumeration by @reubeno in #363
- chore: minor cleanups and test additions by @reubeno in #364
- perf: skip word parsing if no expansion required by @reubeno in #365
- chore: remove unneeded result wrappings by @reubeno in #367
- chore: remove a few object clones by @reubeno in #368
- fix: better error when cwd is gone by @reubeno in #370
- fix(builtins): fix read builtin ignoring tab chars by @reubeno in #371
- fix(expansion): handle negative substring offset by @reubeno in #372
- fix(completion): better handle native errors in completion funcs by @reubeno in #373
- fix: propagate execution parameters more thoroughly by @reubeno in #374
- fix(redirection): allow continuing past redir errors by @reubeno in #375
- build(deps): bump the cargo group with 3 updates by @dependabot in #376
- chore: switch to testing on debian:testing by @reubeno in #377
- chore: fix rng warnings by @reubeno in #378
- test: run bash-completion tests by @reubeno in #292
- test: resolve false errors about side effects in bash-completion tests by @reubeno in #379
- fix(builtins): correct parsing of bind positional arg by @reubeno in #381
- chore: prepare release by @reubeno in #382
Full Changelog: brush-shell-v0.2.14...brush-shell-v0.2.15