nushell/crates/nu-command/src/filesystem
Doru 3d65fd7cc4
Expose filtering by file type in glob (#7834)
# Description

Add flags for filtering the output of `glob` by file type. I find myself
occasionally wanting to do this, and getting a file's
[file_type](https://docs.rs/wax/latest/wax/struct.WalkEntry.html#method.file_type)
is presumably fast to do as it doesn't have to go through the fallible
metadata method.

The design of the signature does concern me; it's not as readable as a
filter or "include" type list would be. They have to be filtered one by
one, which can be annoying if you only want files `-D -S`, or only want
folders `-F -S`, or only want symlinks `--butwhy?`. I considered
SyntaxShape::Keyword for this but I'll just defer to comments on this PR
if they pop up.

I'd also like to bring up performance since including these flags
technically incurs a `.filter` penalty on all glob calls, which could be
optimized out if we added a branch for the no-filters case. But in
reality I'd expect the file system to be the bottleneck and the flags to
be pretty branch predictor friendly, so eh

# User-Facing Changes
Three new flags when using `glob` and a slightly more cluttered help
page. No breaking changes, I hope.

# Tests + Formatting

Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- `cargo test --workspace` to check that all tests pass

# After Submitting

If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
2023-01-28 07:50:12 -06:00
..
cd.rs Clean up cd.rs (#7876) 2023-01-27 15:02:38 +01:00
cd_query.rs Fix typos by codespell (#7600) 2022-12-26 02:31:26 -05:00
cp.rs some filesystem command signatures (#7464) 2022-12-19 13:40:57 +01:00
glob.rs Expose filtering by file type in glob (#7834) 2023-01-28 07:50:12 -06:00
ls.rs Fix usage of deprecated C-style logical and (#7627) 2022-12-29 16:47:33 +01:00
mkdir.rs some filesystem command signatures (#7464) 2022-12-19 13:40:57 +01:00
mod.rs move BufferedReader out of nu-command (#7697) 2023-01-06 15:22:17 -08:00
mv.rs some filesystem command signatures (#7464) 2022-12-19 13:40:57 +01:00
open.rs Progress bar Implementation (#7661) 2023-01-10 20:57:48 -05:00
rm.rs Fix usage of deprecated C-style logical and (#7627) 2022-12-29 16:47:33 +01:00
save.rs make save stream on list stream data (#7675) 2023-01-15 10:54:30 -08:00
start.rs let start open anything and everything (#7580) 2023-01-03 10:47:37 -08:00
touch.rs Standardise the use of ShellError::UnsupportedInput and ShellError::TypeMismatch and add spans to every instance of the former (#7217) 2022-12-23 01:48:53 -05:00
util.rs move BufferedReader out of nu-command (#7697) 2023-01-06 15:22:17 -08:00
watch.rs Standardise the use of ShellError::UnsupportedInput and ShellError::TypeMismatch and add spans to every instance of the former (#7217) 2022-12-23 01:48:53 -05:00