Linting and Formatting

Linting and Formatting

About

  • Code Quality Tools enforce consistent style and catch potential errors.
  • dart format: Opinionated code formatter
  • dart analyze: Static analysis with linter rules
  • Configurable via analysis_options.yaml
  • Integrates with all major IDEs

Main Topics

  1. dart format

    • Definition: Automatic code formatting tool.

    • Example:

      // Before formatting:
      void main(){print('Hello');}
      
      // After `dart format`:
      void main() {
        print('Hello');
      }
  2. dart analyze

    • Definition: Static code analysis.
    • Example:
      // Detects issues like:
      var x = null; // Prefer explicit types
  3. Customizing Rules

    • Definition: Modifying analysis options.
    • Example:
      # analysis_options.yaml
      linter:
        rules:
          - prefer_const_constructors
          - avoid_print
  4. IDE Integration

    • Definition: Real-time feedback in editors.
    • Example:
      // VSCode shows squiggles for:
      unusedVariable = 5; // 'unusedVariable' is unused
  5. CI Pipeline Integration

    • Definition: Automated quality checks.
    • Example:
      # GitHub Action
      - name: Dart Analysis
        run: dart analyze

How to Use

  • Formatting: Run dart format . in project root
  • Analysis: Check IDE problems view or run dart analyze
  • Customization: Edit analysis_options.yaml
  • Suppression: Use // ignore: rule_name comments

How It Works

  • AST Parsing: Analyzes abstract syntax tree
  • Rule Engine: Applies configured lint rules
  • Formatters: Token-based whitespace manipulation
  • IDE Plugins: Use Language Server Protocol

Example Setup:

# analysis_options.yaml
analyzer:
  strong-mode:
    implicit-casts: false
linter:
  rules:
    - always_declare_return_types
    - avoid_empty_else

Conclusion

Dart’s linting and formatting tools establish consistent code quality standards across projects. dart format enforces readable style while dart analyze catches potential errors, together maintaining clean, maintainable codebases that follow best practices.