nushell/tests
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
..
assets/nu_json Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
const_ Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
eval Change append operator to concatenation operator (#14344) 2024-11-24 10:59:54 -08:00
fixtures Bump Calamine (#14403) 2024-11-21 20:31:14 +08:00
hooks Refactor config updates (#13802) 2024-10-11 18:40:32 +02:00
modules don't include import path in args to aliased external commands (#14231) 2024-11-06 07:40:29 -06:00
overlays Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
parsing Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
path Avoid taking unnecessary ownership of intermediates (#12740) 2024-05-04 00:53:15 +00:00
plugin_persistence Make plugin list read state from plugin registry file as well (#14085) 2024-10-20 23:12:57 +02:00
plugins Make plugin list read state from plugin registry file as well (#14085) 2024-10-20 23:12:57 +02:00
repl return accurate type errors from blocks/expressions in type unions (#14420) 2024-11-23 13:42:00 -08:00
scope Change the usage misnomer to "description" (#13598) 2024-08-22 12:02:08 +02:00
shell Add proper config defaults for hooks (#14341) 2024-11-14 20:27:26 -08:00
main.rs Merged tests to produce a single binary (#12826) 2024-05-13 13:37:53 +00:00