# `structure.sentence-too-long`
## What it flags
Sentences whose length exceeds a per-profile ceiling. The intrinsic cognitive load of a sentence grows non-linearly with its word count (Graesser et al. 2004, *Coh-Metrix*); FALC caps at 15 words, Plain English at 20. Long sentences increase the probability of a reader under attentional load losing the thread mid-read.
## At a glance
| **Category** | `structure` |
| **Default severity** | `warning` |
| **Default weight** | `2` |
| **Languages** | EN · FR (identical detection) |
| **Source** | [`src/rules/sentence_too_long.rs`](https://github.com/bastien-gallay/lucid-lint/blob/main/src/rules/sentence_too_long.rs) |
## Detection
Split text into sentences via strong punctuation (`.`, `!`, `?`, `…`, paragraph breaks). Count Unicode word tokens, excluding punctuation. Contractions (`don't`) and elisions (`l'accessibilité`) count as one word when the apostrophe sits between two letters. Code blocks are skipped.
## Parameters
| `max_words` | `int` | 30 | 22 | 15 |
| `exclude_code_blocks` | `bool` | `true` | `true` | `true` |
## Examples
Three ideas, colour-matched across the rewrite — position already pairs them, the tint just confirms the rewrite loses none. `lucid-lint` reports; the rewrite is always yours.
### English
**Before** (flagged):
> <span class="lucid-idea" data-idea="1">The caching subsystem, which was introduced in an earlier milestone,</span> <span class="lucid-idea" data-idea="2">turned out to interact poorly with the new request pipeline under sustained load,</span> and <span class="lucid-idea" data-idea="3">the investigation that followed required multiple rounds of profiling.</span>
What `lucid-lint check --profile public` reports:
```text
warning input.md:1:1 Sentence is 33 words long (maximum 22). Consider splitting it into shorter sentences. [structure.sentence-too-long]
```
**After** (your rewrite):
> <span class="lucid-idea" data-idea="1">The caching subsystem was introduced earlier.</span> <span class="lucid-idea" data-idea="2">It interacts poorly with the new request pipeline under sustained load.</span> <span class="lucid-idea" data-idea="3">The investigation required several rounds of profiling.</span>
### French
**Before** (flagged):
> <span class="lucid-idea" data-idea="1">Le sous-système de cache introduit lors d'un jalon précédent</span> <span class="lucid-idea" data-idea="2">interagit mal avec le nouveau pipeline de requêtes sous charge soutenue,</span> et <span class="lucid-idea" data-idea="3">l'enquête a nécessité plusieurs rondes de profilage.</span>
What `lucid-lint check --profile public` reports:
```text
warning input.md:1:1 Sentence is 29 words long (maximum 22). Consider splitting it into shorter sentences. [structure.sentence-too-long]
```
**After** (your rewrite):
> <span class="lucid-idea" data-idea="1">Le cache a été introduit lors d'un jalon précédent.</span> <span class="lucid-idea" data-idea="2">Il interagit mal avec le nouveau pipeline sous charge soutenue.</span> <span class="lucid-idea" data-idea="3">L'enquête a nécessité plusieurs rondes de profilage.</span>
## Suppression
See [Suppressing diagnostics](../guide/suppression.md) for the inline and block forms.
## See also
- [`rhythm.consecutive-long-sentences`](./consecutive-long-sentences.md) — catches rhythm; its threshold must stay lower than `max_words` here.
- [Scoring model](../guide/scoring.md) — `structure.sentence-too-long` carries weight `2` because the cognitive cost compounds with length.
## References
- [Sweller (1988)](../references.md#sweller-1988)
- [Plain Language US (2011)](../references.md#plain-language-us-2011)
- [CAN-ASC-3.1:2025](../references.md#can-asc-3-1-2025)
See [References](../references.md) for the full bibliography.