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_VERSION
variable to distinguish versions of brush
from the version of bash
it targets compatibility with. (Thanks to @kachick for proposing and implementing this one.)
- API adjustments to script parsing in
brush-core
for 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
printf
builtin using the uucore
crate from the Rust coreutils project.
- Added support for
>&-
, >&N-
, and other bash
-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
brush
when commands are piped to stdin
. (Thanks to @andychu for catching and reporting this.)
Other shout-outs:
- Big shout-out to @andychu for onboarding
brush
to 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
\A
by @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
Full Changelog: brush-shell-v0.2.18...brush-shell-v0.2.19
brush-parser-v0.2.17
chore: Release package brush-parser version 0.2.17
brush-interactive-v0.2.19
chore: Release package brush-interactive version 0.2.19
brush-core-v0.3.2
chore: Release package brush-core version 0.3.2
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-core
exported API surface for applications embedding brush
. (Particular thanks to @Elsie19 and other contributors on this).
- Support for logical/physical options (
-L
, -P
) to cd
, 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
/readarray
builtin. (Thanks to @Elsie19 on overhauling mapfile's core input loop.)
- Initial implementation of the
ulimit
builtin. (Thanks to @lu-zero for getting it from unimplemented to something reasonable.)
- Initial implementation of
bind -x
support, used by many shell extensions and users' .bashrc
files; 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
-R
operand by @Elsie19 in #439
- feat(Shell): add methods to add environmental variables and builtins by @Elsie19 in #447
- ref(Shell): turn
&Path
parameters into AsRef
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 -x
support 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_t
for 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
, -s
by @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
Full Changelog: brush-shell-v0.2.17...brush-shell-v0.2.18
brush-parser-v0.2.16
chore: Release package brush-parser version 0.2.16
brush-interactive-v0.2.18
chore: Release package brush-interactive version 0.2.18
brush-core-v0.3.1
chore: Release package brush-core version 0.3.1
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
-musl
variants of brush
- 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_var
method 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-parser-v0.2.15
chore: Release package brush-parser version 0.2.15