mirror of
https://github.com/nushell/nushell.git
synced 2025-06-08 19:17:16 +02:00
Hello! This is my 1st contribution and an attempt at fixing #15417. # Description When parsing a brace expression, check if the shape is a block or match block before attempting to parse it as a closure. Results: - `if true {|| print hi}` now produces a `nu::parser` error instead of executing and outputting `hi`. The `nu::parser` error is the same one produced by running `|| print hi` (`nu::parser::shell_oror`) - `match true {|| print hi}` now fails with a `nu::parser` error instead of passing parsing and failing with `nu::compile::invalid_keyword_call` My understanding reading the code/docs is that the shape is a contextual constraint that needs to be satisfied for parsing to succeed, in this case the `if` placing a `Block` shape constraint on next tokens. So it would need to be checked in priority (if not `Any`) to understand how the next tokens should be parsed. Is that correct? Or is there a reason I'm not aware of to ignore the shape and attempt to parse as closure like it's currently the case when the parser sees `|` or `||` as next tokens? # User-Facing Changes No change in behaviour, but this PR fixes parsing to fail on some incorrect syntax which could be considered a breaking change. # Tests + Formatting - Added corresponding tests - `toolkit check pr` passed
Nushell core libraries and plugins
These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.
Foundational libraries are split into two kinds of crates:
- Core crates - those crates that work together to build the Nushell language engine
- Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.
Plugins are likewise also split into two types:
- Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
- Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.