Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

else statement captures mutable variables #7384

Closed
amtoine opened this issue Dec 7, 2022 · 1 comment · Fixed by #7385
Closed

else statement captures mutable variables #7384

amtoine opened this issue Dec 7, 2022 · 1 comment · Fixed by #7385
Labels
🐛 bug Something isn't working
Milestone

Comments

@amtoine
Copy link
Member

amtoine commented Dec 7, 2022

Describe the bug

from this discussion on the discord server with @fdncred and @jntrnr, it appears mutable variables showcase a strange behaviour when used in the last else statement in a for loop 🤔

How to reproduce

run the following script

mut m = ""

for el in (seq 1 10) {
  $m = $m
}

for el in (seq 1 10) {
  if ($el == 1) {
    $m = $m
  }
}

for el in (seq 1 10) {
  if ($el == 1) {
    $m = $m
  } else {
    $m = $m  # fails on this very line
  }
}

Expected behavior

here i simply expect the script to print nothing to the shell 😋

however i get

Error: nu::parser::expected_keyword (link)

  × Capture of mutable variable.
    ╭─[entry #52:16:1]
 16 │   } else {
 17 │     $m = $m
    ·     ─┬
    ·      ╰── capture of mutable variable
 18 │   }
    ╰────

Screenshots

No response

Configuration

key value
version 0.72.0
branch
commit_hash
build_os linux-x86_64
build_target x86_64-unknown-linux-gnu
rust_version rustc 1.65.0 (Arch Linux rust 1:1.65.0-1)
cargo_version cargo 1.65.0
pkg_version 0.72.0
build_time 2022-12-03 18:27:13 +01:00
build_rust_channel release
features database, default, trash, which, zip
installed_plugins

Additional context

No response

@fdncred fdncred added the 🐛 bug Something isn't working label Dec 7, 2022
sophiajt added a commit that referenced this issue Dec 7, 2022
# Description

fixes #7384 

This is a stop-gap fix until we remove type-directed parsing. With this,
you can create a `OneOf` shape that can be one of a list of syntax
shapes. This gives you a little more control than you get with `Any`,
allowing you to add `Block` without breaking other parsing rules.

# User-Facing Changes

`else` block will no longer capture variables as it will now use a block
instead of a closure.

# 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.
@amtoine
Copy link
Member Author

amtoine commented Dec 7, 2022

thanks a lot 😌 🎉

@hustcer hustcer added this to the v0.73 milestone Dec 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants