# only-used-in-recursion

Disallow parameters used only to calculate their own recursive argument

A parameter read only to calculate its corresponding recursive argument does not affect the result.
Instead, you SHOULD remove the parameter and its argument from every recursive call.

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

## Reported

```ds title="main.ds"
function depth(remaining: int32, unused: int32): int32 {
    if (remaining === 0) {
        return 0;
    }

    return depth(remaining - 1, unused);
}
```

## Accepted

```ds title="main.ds"
function depth(remaining: int32): int32 {
    if (remaining === 0) {
        return 0;
    }

    return depth(remaining - 1);
}
```

## Prior art

- [Clippy · only_used_in_recursion](https://rust-lang.github.io/rust-clippy/master/index.html#only_used_in_recursion)
- [Oxc · only-used-in-recursion](https://github.com/oxc-project/oxc/search?q=only-used-in-recursion&type=code)

[language/linter/src/rules/suspicious/only_used_in_recursion.rs:7](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/suspicious/only_used_in_recursion.rs#L7)
