nushell/crates/nu-engine/src
Ian Manske 4d3283e235
Change append operator to concatenation operator (#14344)
# Description

The "append" operator currently serves as both the append operator and
the concatenation operator. This dual role creates ambiguity when
operating on nested lists.

```nu
[1 2] ++ 3     # appends a value to a list [1 2 3]
[1 2] ++ [3 4] # concatenates two lists    [1 2 3 4]

[[1 2] [3 4]] ++ [5 6]
# does this give [[1 2] [3 4] [5 6]]
# or             [[1 2] [3 4] 5 6]  
```

Another problem is that `++=` can change the type of a variable:
```nu
mut str = 'hello '
$str ++= ['world']
($str | describe) == list<string>
```

Note that appending is only relevant for lists, but concatenation is
relevant for lists, strings, and binary values. Additionally, appending
can be expressed in terms of concatenation (see example below). So, this
PR changes the `++` operator to only perform concatenation.

# User-Facing Changes

Using the `++` operator with a list and a non-list value will now be a
compile time or runtime error.
```nu
mut list = []
$list ++= 1 # error
```
Instead, concatenate a list with one element:
```nu
$list ++= [1]
```
Or use `append`:
```nu
$list = $list | append 1
```

# After Submitting

Update book and docs.

---------

Co-authored-by: Douglas <32344964+NotTheDr01ds@users.noreply.github.com>
2024-11-24 10:59:54 -08:00
..
compile Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
call_ext.rs Internal representation (IR) compiler and evaluator (#13330) 2024-07-10 17:33:59 -07:00
closure_eval.rs Use Arc for environment variables on the stack (#13333) 2024-07-10 17:34:50 -07:00
column.rs Use Record's public API in a bunch of places (#10927) 2023-11-08 14:24:00 +01:00
command_prelude.rs Internal representation (IR) compiler and evaluator (#13330) 2024-07-10 17:33:59 -07:00
documentation.rs add command_type to help (#14165) 2024-10-24 19:06:49 +02:00
env.rs Make get_env_var return a reference to a Value (#13987) 2024-10-02 13:05:48 +02:00
eval_helpers.rs Error on non-zero exit statuses (#13515) 2024-09-07 06:44:26 +00:00
eval_ir.rs Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
eval.rs Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
glob_from.rs Add command_prelude module (#12291) 2024-03-26 21:17:30 +00:00
lib.rs Add top-level crate documentation/READMEs (#12907) 2024-07-14 10:10:41 +02:00
scope.rs add is_const to help commands and scope commands (#14125) 2024-10-21 12:54:18 +02:00