# manual-range-contains

Prefer range membership over equivalent bound comparisons

Separate lower-bound and upper-bound comparisons obscure a range membership test.
Instead, you SHOULD call `.contains()` on the corresponding range.

Out-of-range disjunctions over floating-point values are excluded because negating `.contains()` changes NaN behavior.

- Category: style
- Level: warning
- Fix: automatic
- Scope: module

## Reported

```ds title="main.ds"
function isByte(value: int64): boolean {
    return value >= 0 && value <= 255;
}
```

## Accepted

```ds title="main.ds"
function isByte(value: int64): boolean {
    return (0..=255).contains(value);
}
```

## Prior art

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

[language/linter/src/rules/style/manual_range_contains.rs:8](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/style/manual_range_contains.rs#L8)
