# no-return-assign

Disallow assignment within an explicit or implicit return value

A returned assignment makes the assigned value the function result after mutating its target, and a single `=` can be mistaken for an equality operator.
Instead, you SHOULD perform the assignment as a statement and return the resulting value separately.

- Category: suspicious
- Level: warning
- Fix: none
- Scope: module

## Reported

```ds title="main.ds"
function reset(value: int32): int32 {
    let current = value;
    return (current = 0);
}
```

## Accepted

```ds title="main.ds"
function reset(value: int32): int32 {
    let current = value;
    current = 0;
    return current;
}
```

## Prior art

- [ESLint · no-return-assign](https://eslint.org/docs/latest/rules/no-return-assign)

[language/linter/src/rules/suspicious/no_return_assign.rs:6](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/suspicious/no_return_assign.rs#L6)
