# Nushell core team meeting 2024-05-08 ## Attendees - Darren - Devyn - Michael - Andy - Jakub - Filip - Wind - Stefan - Woossaaahh - Antoine - Ian - Jack ## Agenda - [x] Proposal: Remove `str contains --not` flag (redundant since we have `not` operator) - context: https://github.com/nushell/nushell/pull/12781#issuecomment-2097688044 - [x] redirection of string(stream) like POSIX stream to file - Ian's proposed PR making that external only: https://github.com/nushell/nushell/pull/12785 - Issue desiring the ability to redirect `print (-e)`: https://github.com/nushell/nushell/issues/12686 - [x] Stream refactor - Error handling - [ ] [Command spring cleaning](/QyUBRm5fQiKeRNHv4rZBYw) - [x] Lightning topic: MIME commands and `ls --mime-type` - [ ] Table values and streams (possibly next meeting instead) ## Discussed Topics ## `--not` on `str contains` - Jakub: should not add `--not` flag to every command that returns a bool - challenge to keep consistent and would escalate - Darren `not (check)` is a bit wordy - Devyn: `is-not-empty` is one of the frequently used cases where the ceremony would be annoying - `not` is an operator so it can't really act like a regular command - `| not $in` should work already (thx Ian for pointing this out) - `| not` would be slightly more elegant (would require some parser hacking because `not` is an operator) ## redirection of string(stream) like POSIX stream to file Should we reserve `out>` for externals only? - We kind of have `out>` doing multiple things potentially, going from a string stream to a file would be very straightforward, but `print` doesn't produce a string stream - Darren: don't want to forbid redirecting external streams, more inconsistency not great - Side-challenge: missing `err>null` and `err> /dev/null` is not cross-platform - `out> file` is faster for externals because the OS can do it - maybe we're not going to resolve this today - should we do a poll? - kubouch: only `o>` and `o>>` should work for nushell internal values, `o>|` is a noop = `|` - kubouch: manual wrappers around external commands how would this play with redirect? - file redirections create a scope, all external commands inside the expression use the file redirection - Wind: User expecting `echo "aaa" o> file.txt` - we will create one inconsistency anyways > try to find the minimal pain, easiest to explain way - Jack: `o+e>` would break if we disallow values and you may encounter a situation where there is an external emitting STDERR in your previous pipeline step. - error stream could be a future think to talk about - Conclusion for #12785: improve the error message, try out, gather user feedback Separate track `print` and internal `eprintln!`s - We can't support things like `print err>` or `print out>` already, so it's important that people understand the difference - Since we now know what the redirection state (`OutDest`) is from the `Stack`, it's actually possible for `print` to support this. Maybe we can be consistent - more thought/analysis needed (out of scope for now) ## Stream refactor - Ian working on ByteStream, which replaces ExternalStream with a generalized single stream type that can be more easily used by internal commands too - PR: https://github.com/nushell/nushell/pull/12774 - exit code changes have been factored out (would have been a breaking change) - Devyn already on top building a type-flavour: - mark if it is a utf-8 stream or unknown encoding and internals can also enforce binary - Unknown (from external) - String (all operations can be sure about utf-8 encoding) - Binary (explicit will show hexdump) - [plus adding this to some internal commands already](/4lHUs6Q3Q9iu7wek2xlSdw) ## MIME type commands - This is a lot to stabilize? The crate we're using doesn't guarantee output stability - https://docs.rs/mime_guess/latest/mime_guess/#note-mime-types-returned-are-not-stableguaranteed - HTTP commands accept any mime type but really only do something special for JSON - For the PR: this could be a plugin, and maybe we just remove `ls --mime-type` - Maybe just leave things as they are. It's cool to have `ls --mime-type` - PR: https://github.com/nushell/nushell/pull/12695 -> plugin