# Getting Started

## Requirements

- **Dart** 3.10+ (3.12+ recommended) or **Flutter** 3.38+

## Installation

Analyzer plugins are configured in the **root** `analysis_options.yaml` of your package or workspace via the top-level `plugins` section (not the legacy `analyzer.plugins` list).

To add pyramid_lint to your project, add the following to your `analysis_options.yaml` file:

```yaml
plugins:
  pyramid_lint: ^3.0.0 # replace with the latest version
```

## Configuration

### Enable lints

All Pyramid Lint rules are **disabled by default**. Turn them on under `diagnostics`:

```yaml
plugins:
  pyramid_lint: ^3.0.0
    diagnostics:
      specific_lint_rule: true
```

### Configure lints

Some lints accept options under `options`. See each rule’s documentation for available keys.

```yaml
plugins:
  pyramid_lint: ^3.0.0
    diagnostics:
      max_lines_for_file: true
    options:
      max_lines_for_file:
        max_lines: 300
```

## Lint preset

The following preset enables all rules marked as recommended in [Available Lints](/available-lints). Use it as a starting point and remove rules you do not need.

```yaml
plugins:
  pyramid_lint: ^3.0.0
    diagnostics:
      # Dart lints
      always_put_doc_comments_before_annotations: true
      always_specify_parameter_names: true
      avoid_dynamic: true
      avoid_empty_blocks: true
      avoid_mutable_global_variables: true
      avoid_positional_fields_in_records: true
      avoid_unused_parameters: true
      no_duplicate_imports: true
      no_self_comparisons: true
      prefer_async_await: true
      prefer_iterable_any: true
      prefer_iterable_every: true
      prefer_iterable_first: true
      prefer_iterable_last: true
      prefer_underscore_for_unused_callback_parameters: true
      proper_from_environment: true
      unnecessary_nullable_return_type: true
      # Flutter lints
      avoid_public_members_in_states: true
      avoid_single_child_in_flex: true
      dispose_controllers: true
      prefer_async_callback: true
      prefer_border_from_border_side: true
      prefer_border_radius_all: true
      prefer_dedicated_media_query_functions: true
      prefer_text_rich: true
      prefer_void_callback: true
      proper_edge_insets_constructors: true
      proper_expanded_and_flexible: true
      proper_super_dispose: true
      proper_super_init_state: true
      use_spacer: true
```
