# no-drop-of-trivial-value

Disallow dropping values without destructors

Calling `drop` for a value that requires no destruction performs no cleanup.
Instead, you SHOULD remove the call or use a narrower scope when ownership must end sooner.

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

## Reported

```ds title="main.ds"
import { drop } from "destack:memory";

function discard(value: int32): void {
    drop(value);
}
```

## Accepted

```ds title="main.ds"
import { Drop, drop } from "destack:memory";

struct Subscription implements Drop {
    drop(&exclusive this): void {}
}

function unsubscribe(value: Subscription): void {
    drop(value);
}
```

## Prior art

- [Clippy · drop_non_drop](https://rust-lang.github.io/rust-clippy/master/index.html#drop_non_drop)

[language/linter/src/rules/suspicious/no_drop_of_trivial_value.rs:5](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/suspicious/no_drop_of_trivial_value.rs#L5)
