dart-long-lines ยท diff
git:20260912.57dc63f to git:20260913.6c39005
41 added, 23 removed. Audit A to A.
---
name: dart-long-lines
description: |-
Guidelines for handling long lines in Dart code to adhere to the 80-column
rule. The `lines_longer_than_80_chars` lint.
license: Apache-2.0
key_features:
- 80-column rule compliance
- Line length refactoring
- Linter rule enforcement
---
# Dart Long Lines
## 1. When to use this skill
Use this skill when:
- - Writing Dart code that might exceed the 80-column limit.
- - Refactoring code to comply with the `lines_longer_than_80_chars` lint.
- Reference: https://dart.dev/tools/linter-rules/lines_longer_than_80_chars
+ - Writing Dart code that might exceed the 80-column limit.
+ - Refactoring code to comply with the `lines_longer_than_80_chars` lint.
+ Reference: https://dart.dev/tools/linter-rules/lines_longer_than_80_chars
+
### When NOT to use (Abstention Guardrails)
Do NOT break lines or alter code when:
+
- **Unbreakable URLs & URIs**: Lines contain long HTTP/HTTPS URLs, import URIs,
or file paths where breaking them across lines would invalidate the link.
- **Complex Regular Expression Literals**: Long RegExp patterns
(`RegExp(r'...')`) where inserting whitespace or line breaks changes the
matching semantics.
- **ASCII Art, Tables, or Preformatted Diagrams**: Preformatted text blocks,
table rows, or ASCII diagrams inside comments or strings where wrapping lines
destroys visual alignment.
- **Prior to Automated Formatting**: Do NOT manually break code lines before
running `dart format`. Let `dart format` handle code wrapping automatically;
only manually wrap comments, docs, and multi-line strings that the formatter
does not re-wrap.
## Discovery
To find lines that exceed the limit:
### Automated Analysis
+
The most reliable way to find long lines is to use the Dart analyzer:
+
- **Command**: `dart analyze`
- **Lint**: `lines_longer_than_80_chars`
### Manual Search
+
To search for long lines using regex:
+
- **Regex**: `^.{81,}$` (Matches any line with 81 or more characters).
## 2. Guidelines
### Format First
+
Always run `dart format` before manually breaking long lines. The formatter
- often automatically fixes long lines, especially in generated code, and
- applies standard Dart styling rules.
+ often automatically fixes long lines, especially in generated code, and applies
+ standard Dart styling rules.
### Code Comments
+
Break long code comments (`//`) cleanly at word boundaries to ensure lines do
not exceed 80 characters. Maintain tight formatting and avoid unnecessary
vertical space.
### Documentation Comments (`///`)
- - Apply the same line-breaking rules as for code comments.
- - Avoid breaking markdown link blocks like `[name]` or
- `[text](http://example.com)` across lines. Place them on their own line if
- they exceed the limit.
- - Start doc comments with a single summary sentence, followed by a blank line
- before the rest of the comment. It is okay to break this first sentence
- across multiple lines to fit the 80-column limit.
- - Avoid unresolved references or dangling sentences.
+ - Apply the same line-breaking rules as for code comments.
+ - Avoid breaking markdown link blocks like `[name]` or
+ `[text](http://example.com)` across lines. Place them on their own line if
+ they exceed the limit.
+ - Start doc comments with a single summary sentence, followed by a blank line
+ before the rest of the comment. It is okay to break this first sentence across
+ multiple lines to fit the 80-column limit.
+ - Avoid unresolved references or dangling sentences.
+
### Long Strings
- - Use adjacent string literals (e.g., `'part 1 ' 'part 2'`) to break long
- strings. Break at word boundaries.
- - If a single-line string contains newline characters (`\n`) or if there are
- consecutive `print` statements, consider migrating to a multi-line string
- literal (`'''`).
+ - Use adjacent string literals (e.g., `'part 1 ' 'part 2'`) to break long
+ strings. Break at word boundaries.
+ - If a single-line string contains newline characters (`\n`) or if there are
+ consecutive `print` statements, consider migrating to a multi-line string
+ literal (`'''`).
+
### Format and Analyze After Changes
- - Run `dart format` and `dart analyze` after making changes.
- - Be aware that splitting strings may trigger new lints (e.g.,
- `prefer_single_quotes` if a double-quoted string is split into parts that
- no longer contain single quotes).
+ - Run `dart format` and `dart analyze` after making changes.
+ - Be aware that splitting strings may trigger new lints (e.g.,
+ `prefer_single_quotes` if a double-quoted string is split into parts that no
+ longer contain single quotes).
+
## 3. Examples
### Documentation Comment Link
+
**Avoid:**
+
```dart
/// This is a long doc comment that contains a link to [a very long
/// URL](http://example.com/very/long/url/that/exceeds/eighty/chars).
```
**Prefer:**
+
```dart
/// This is a long doc comment that contains a link to [a very long URL][ref].
///
/// [ref]: http://example.com/very/long/url/that/exceeds/eighty/chars
```
### Adjacent String Literals
+
**Prefer:**
+
```dart
final longString = 'This is a very long string that needs to be broken '
'across multiple lines to stay under the limit.';
```
### Multi-line String Migration
+
**Avoid:**
+
```dart
print('This is line 1\nThis is line 2 that is also quite long\nThis is line 3 which makes the whole thing exceed eighty characters');
```
**Prefer:**
+
```dart
print('''This is line 1
This is line 2 that is also quite long
This is line 3 which makes the whole thing exceed eighty characters''');
```
-