# prefer-readonly

Require readonly for private fields never mutated after initialization

A private field that is never mutated after initialization grants unnecessary write access inside its declaration.
Instead, you SHOULD mark the field `readonly` so later mutation is rejected.

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

## Reported

```ds title="main.ds"
class User {
    private name: string;

    constructor(name: string) {
        this.name = name;
    }

    describe(): string {
        return this.name;
    }
}
```

## Accepted

```ds title="main.ds"
class User {
    private readonly name: string;

    constructor(name: string) {
        this.name = name;
    }

    describe(): string {
        return this.name;
    }
}
```

## Prior art

- [typescript-eslint · prefer-readonly](https://typescript-eslint.io/rules/prefer-readonly)

[language/linter/src/rules/style/prefer_readonly.rs:9](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/style/prefer_readonly.rs#L9)
