PreferFirstLastRule class

Rule that prefers .first/.last over index access.

Using .first and .last is more expressive and idiomatic Dart compared to accessing 0 or length - 1.

Known Limitations

This rule operates on syntactic patterns without resolved type information. As a result, it may produce false positives in the following cases:

  • String indexing: String supports [0] but does not have .first or .last properties. The rule cannot distinguish String from List.

    String s = "hello";
    print(s[0]);  // Will trigger, but s.first doesn't exist
    
  • Custom indexable types: Any type with operator[] but without .first/.last getters will trigger false positives.

Exclude files with heavy string manipulation:

anteater:
  rules:
    - prefer-first-last:
        exclude:
          - '**/string_utils.dart'
          - '**/text_*.dart'
Inheritance

Constructors

PreferFirstLastRule()

Properties

category → RuleCategory
Category this rule belongs to.
no setteroverride
defaultSeverity → RuleSeverity
Default severity for violations of this rule.
no setteroverride
description → String
Human-readable description of what this rule checks.
no setteroverride
documentationUrl → String?
Documentation URL for this rule.
no setterinherited
hashCode → int
The hash code for this object.
no setterinherited
id → String
Unique identifier for this rule (e.g., 'avoid-dynamic').
no setteroverride
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited

Methods

check(CompilationUnit unit, {LineInfo? lineInfo}) → List<Violation>
Check the compilation unit for violations.
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited