9d41f28545
Change-Id: I8bcac6d4816af2ba3b27f271cf39959371d3da2c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/509544 Reviewed-by: Keerti Parthasarathy <keertip@google.com>
99 lines
3.7 KiB
Markdown
99 lines
3.7 KiB
Markdown
# Using plugins
|
|
|
|
This document describes how to enable analyzer plugins. Analyzer plugins can
|
|
report diagnostics (lints and warnings) in an IDE and also at the command line
|
|
(with `dart analyze` or `flutter analyze`). Analyzer plugins can also offer
|
|
quick fixes and assists in an IDE. A set of analyzer plugins can be enabled for
|
|
a given package or [workspace][] via the `analysis_options.yaml` file, at the
|
|
root of the package or workspace source tree. Analyzer plugins cannot be
|
|
enabled, disabled, or otherwise specified or configured in a nested analysis
|
|
options file
|
|
|
|
Analyzer plugins are supported starting in Dart 3.10 (Flutter 3.38).
|
|
|
|
Analyzer plugins are specified in the top-level `plugins` section:
|
|
|
|
```yaml
|
|
plugins:
|
|
my_plugin: ^1.0.0
|
|
```
|
|
|
|
[workspace]: https://dart.dev/tools/pub/workspaces
|
|
|
|
> [!NOTE]
|
|
> This is similar to how analyzer plugins are enabled in the [legacy][] analyzer
|
|
plugin system. However, in the legacy system, this `plugins` section is listed
|
|
under the top-level `analyzer` section. In the new analyzer plugin system,
|
|
`plugins` is a top-level section.
|
|
|
|
Individual plugins are listed similar to how dependencies are listed in a
|
|
`pubspec.yaml` file; they are listed as a key-value pair, with the package name
|
|
as the key. The value can be a package version constraint, in which case the
|
|
package is downloaded from https://pub.dev (or another location, if the
|
|
`hosted` key is present), a git URI, or an absolute path.
|
|
|
|
For example, while developing a plugin locally, it can be enabled as:
|
|
|
|
```yaml
|
|
plugins:
|
|
my_plugin:
|
|
path: /path/to/my_plugin
|
|
```
|
|
|
|
See the standard [Package dependencies documentation][] for details regarding
|
|
how a plugin's source location can be specified.
|
|
|
|
[Package dependencies documentation]: https://dart.dev/tools/pub/dependencies
|
|
|
|
When the analysis server sees that a set of plugins is enabled, it creates a
|
|
synthetic package which depends on each plugin package, which is loaded into a
|
|
separate isolate of the analysis server process. It uses [`dart pub upgrade`][]
|
|
to resolve a compatible set of versions of the plugin packages and their
|
|
dependencies. Note that Dart 3.10 (Flutter 3.38) sets its own constraint on the
|
|
`analysis_server_plugin` package, `^0.3.0`. This may change with each release
|
|
of Dart and Flutter.
|
|
|
|
> [!NOTE]
|
|
> After any change is made to the `plugins` section of an
|
|
> `analysis_options.yaml` file, the Dart Analysis Server must be restarted to
|
|
> see the effects.
|
|
|
|
[legacy]: https://github.com/dart-lang/sdk/blob/main/pkg/analyzer_plugin/doc/tutorial/tutorial.md
|
|
[`dart pub upgrade`]: https://dart.dev/tools/pub/cmd/pub-upgrade
|
|
|
|
## Enabling a lint rule
|
|
|
|
A plugin can report two kinds of diagnostics: warnings and lints. Any warnings
|
|
that a plugin defines are enabled by default (like analyzer warnings). Any lint
|
|
rules that a plugin defines are disabled by default (like analyzer lint rules),
|
|
and must be explicitly enabled in analysis options. Lint rules are enabled
|
|
under the `diagnostics` section for a plugin:
|
|
|
|
```yaml
|
|
plugins:
|
|
my_plugin:
|
|
path: /path/to/my_plugin
|
|
diagnostics:
|
|
rule_1: true
|
|
rule_2: true
|
|
rule_3: false
|
|
```
|
|
|
|
In the configuration above, `rule_1` and `rule_2` are enabled. Additionally,
|
|
`rule_3` is disabled, which can be useful if an included analysis options file
|
|
explicitly enables the rule.
|
|
|
|
## Suppressing diagnostics
|
|
|
|
A diagnostic which is reported by a plugin can be suppressed with a comment. The
|
|
syntax is similar to suppressing an out-of-the-box warning or lint diagnostic
|
|
(see [the docs](https://dart.dev/tools/analysis#suppressing-diagnostics-for-a-file)).
|
|
To suppress a warning or lint named "some_code" in a plugin named "some_plugin,"
|
|
use a comment like the following:
|
|
|
|
```dart
|
|
// ignore: some_plugin/some_code
|
|
|
|
// ignore_for_file: some_plugin/some_code
|
|
```
|