pub repository
mirror.p-hatan.comcustom_lint
0.6.9Lint rules are a powerful way to improve the maintainability of a project. Custom Lint allows package authors and developers to easily write custom lint rules.
Readme
Index
Tutorial
You can read the latest blog post or watch the advanced use case with custom_lint video.
About
Lint rules are a powerful way to improve the maintainability of a project. The more, the merrier! But while Dart offers a wide variety of lint rules by default, it cannot reasonably include every possible lint. For example, Dart does not include lints related to third-party packages.
Custom_lint fixes that by allowing package authors to write custom lint rules.
Custom_lint is similar to analyzer_plugin, but goes deeper by trying to provide a better developer experience.
That includes:
- A command-line to obtain the list of lints in your CI without having to write a command line yourself.
- A simplified project setup:
No need to deal with the
analyzerserver or error handling. Custom_lint takes care of that for you, so that you can focus on writing lints. - Debugger support. Inspect your lints using the Dart debugger and place breakpoints.
- Supports hot-reload/hot-restart: Updating the source code of a linter plugin will dynamically restart it, without having to restart your IDE/analyzer server.
- Built-in support for
// ignore:and// ignore_for_file:. - Built-in testing mechanism using
// expect_lint. See Testing your plugins - Support for
print(...)and exceptions: If your plugin somehow throws or print debug messages, custom_lint will generate a log file with the messages/errors.
Usage
Using custom_lint is split in two parts:
- how to define a custom_lint package
- how users can install our package in their application to see our newly defined lints
Creating a custom lint package
To create a custom lint, you will need two things:
-
updating your
pubspec.yamlto includecustom_lint_builderas a dependency:# pubspec.yaml name: my_custom_lint_package environment: sdk: ">=3.0.0 <4.0.0" dependencies: # we will use analyzer for inspecting Dart files analyzer: analyzer_plugin: # custom_lint_builder will give us tools for writing lints custom_lint_builder: -
create a
lib/<my_package_name>.dartfile in your project with the following:import 'package:analyzer/error/listener.dart'; import 'package:custom_lint_builder/custom_lint_builder.dart'; // This is the entrypoint of our custom linter PluginBase createPlugin() => _ExampleLinter(); /// A plugin class is used to list all the assists/lints defined by a plugin. class _ExampleLinter extends PluginBase { /// We list all the custom warnings/infos/errors @override List<LintRule> getLintRules(CustomLintConfigs configs) => [ MyCustomLintCode(), ]; } class MyCustomLintCode extends DartLintRule { MyCustomLintCode() : super(code: _code); /// Metadata about the warning that will show-up in the IDE. /// This is used for `// ignore: code` and enabling/disabling the lint static const _code = LintCode( name: 'my_custom_lint_code', problemMessage: 'This is the description of our custom lint', ); @override void run( CustomLintResolver resolver, ErrorReporter reporter, CustomLintContext context, ) { // Our lint will highlight all variable declarations with our custom warning. context.registry.addVariableDeclaration((node) { // "node" exposes metadata about the variable declaration. We could // check "node" to show the lint only in some conditions. // This line tells custom_lint to render a warning at the location of "node". // And the warning shown will use our `code` variable defined above as description. reporter.atNode(node, code); }); } }
That's it for defining a custom lint package!
If you're looking for a more advanced example, see the example. This example implements:
- a lint appearing on all variables of a specific type
- a quick fix for that lint
- an "assist" for providing refactoring options.
Let's now use it in an application.
Using our custom lint package in an application
For users to run custom_lint packages, there are a few steps:
-
The application must contain an
analysis_options.yamlwith the following:analyzer: plugins: - custom_lint -
The application also needs to add
custom_lintand our package(s) as dev dependency in their application:# The pubspec.yaml of an application using our lints name: example_app environment: sdk: ">=3.0.0 <4.0.0" dev_dependencies: custom_lint: my_custom_lint_package:
That's all!
After running pub get (and possibly restarting their IDE), users should now
see our custom lints in their Dart files:
screenshot of our custom lints in the IDE
Enabling/disabling and configuring lints
By default, custom_lint enables all installed lints.
But chances are you may want to disable one specific lint,
or alternatively, disable all lints besides a few.
This configuration is done in your analysis_options.yaml,
but in a slightly different manner.
Configurations are placed within a custom_lint object, as
followed:
analyzer:
plugins:
- custom_lint
custom_lint:
rules:
- my_lint_rule: false # disable this rule
As mentioned before, all lints are enabled by default.
custom_lint:
# Disable all lints by default
enable_all_lint_rules: false
rules:
- my_lint_rule # only enable my_lint_rule
If you want to change this, you can optionally disable all lints by default:
Last but not least, some lint rules may be configurable. When a lint is configurable, you can configure it in the same place with:
custom_lint:
rules:
- my_lint_rule:
some_parameter: "some value"
Obtaining the list of lints in the CI
Unfortunately, running dart analyze does not pick up our newly defined lints.
We need a separate command for this.
To do that, users of our custom lint package can run the following inside their terminal:
$ dart run custom_lint
lib/main.dart:0:0 • This is the description of our custom lint • my_custom_lint_code
If you are working on a Flutter project, run flutter pub run custom_lint instead.
Using the Dart debugger and enabling hot-reload
By default, custom_lint does enable hot-reload or give you the necessary information to start the debugger. This is because most users don't need those, and only lint authors do.
If you wish to debug lints, you'll have to update your analysis_options.yaml as followed:
analyzer:
plugins:
- custom_lint
custom_lint:
debug: true
# Optional, will cause custom_lint to log its internal debug information
verbose: true
Then, to debug plugins in custom_lint, you need to connect to plugins using "attach"
mode in your IDE (cmd+shift+p + Debug: attach to Dart process in VSCode).
When using this command, you will need a VM service URI provided by custom_lint.
There are two possible ways to obtain one:
- if you started your plugin using
custom_lint --watch, it should be visible in the console output. - if your plugin is started by your IDE, you can open the
custom_lint.logfile that custom_lint created next to thepubspec.yamlof your analyzed projects.
In both cases, what you're looking for is logs similar to:
The Dart VM service is listening on http://127.0.0.1:60671/9DS43lRMY90=/
The Dart DevTools debugger and profiler is available at: http://127.0.0.1:60671/9DS43lRMY90=/devtools/#/?uri=ws%3A%2F%2F127.0.0.1%3A60671%2F9DS43lRMY90%3D%2Fws
What you'll want is the first URI. In this example, that is http://127.0.0.1:60671/9DS43lRMY90=/.
You can then pass this to your IDE, which should now be able to attach to the
plugin.
Testing your plugins
Testing lints
Custom_lint comes with an official testing mechanism for asserting that your plugins correctly work.
Testing lints is straightforward: Simply write a file that should contain
lints from your plugin (such as the example folder). Then, using a syntax
similar to // ignore, write a // expect_lint: code in the line before
your lint:
// expect_lint: riverpod_final_provider
var provider = Provider(...);
When doing this, there are two possible cases:
- The line after the
expect_lintcorrectly contains the expected lint. In that case, the lint is ignored (similarly to if we used// ignore) - The next line does not contain the lint.
In that case, the
expect_lintcomment will have an error.
This allows testing your plugins by simply running custom_lint on your test/example folder.
Then, if any expected lint is missing, the command will fail. But if your plugin correctly
emits the lint, the command will succeed.
Testing quick fixes and assists
Testing quick fixes and assists is also possible with regular tests by combining them with
pkg:analyzer to manually execute the assists or fixes. An example can be found in the
Riverpod repository.
Changelog
0.6.9 - 2024-10-09
custom_lint_coreupgraded to0.6.9
0.6.8 - 2024-10-08
- Fix CI
- Fix custom_lint not warning non-Dart files when necessary.
- Custom_lint no-longer tries to analyze projects that lack a
.dart_tool/package_config.json
0.6.7 - 2024-09-08
- Removed offline package resolution for the analyzer plugin. The logic seemed broken at times, so removing it should make custom_lint more stable.
0.6.6 - 2024-09-08
- Fixed an error in the CLI when Flutter generates code under
.dart_tool/or has dependencies on iOS libraries (thanks to @Kurogoma4D)
0.6.5 - 2024-08-15
- Upgraded to analyzer ^6.6.0. This is a quick fix to unblock the stable Flutter channel. A more robust fix will come later.
- Fixed a bug where isSuperTypeOf throws if the element is null (thanks to @charlescyt)
0.6.4 - 2024-03-16
- Improve error message to attempt debugging a certain bug
0.6.3 - 2024-03-16
- Fixed Unimplemented error when running
pub get. - Hot-reload and debug mode is now disabled by default.
0.6.2 - 2024-02-19
custom_lint --format jsonno-longer outputs non-JSON logs (thanks to @kzrnm)- Upgrade analyzer to support 6.4.0
- Fix null exception when using
TypeChecker.isSuperTypeOf(thanks to @charlescyt)
0.6.0 - 2024-02-04
- Added support for
--fix
0.5.11 - 2024-01-27
- Added support for
analysis_options.yamlthat are nt at the root of the project (thanks to @mrgnhnt96)
0.5.8 - 2024-01-09
// ignorecomments now correctly respect indentation when they are inserted (thanks to @PiotrRogulski)
0.5.7 - 2023-11-20
- Support JSON output format via CLI parameter
--format json|default(thanks to @kuhnroyal)
0.5.6 - 2023-10-30
Optimized logic for finding an unused VM_service port.
0.5.5 - 2023-10-26
- Support
hotreloader4.0.0
0.5.4 - 2023-10-20
- Sort lints by severity in the command line (thanks to @kuhnroyal)
- Fix watch mode not quitting with
q(thanks to @kuhnroyal) - Improve the command line's output (thanks to @kuhnroyal)
- Update uuid to 4.0.0
- Fixed a port leak
- Fix connection issues on Docker/windows (thanks to @hamsbrar)
0.5.3 - 2023-08-29
- The command line now supports ignoring warnings/infos with
--no-fatal-warnings/--no-fatal-infos(thanks to @yamarkz)
0.5.2 - 2023-08-16
- Support both analyzer 5.12.0 and 6.0.0 at the same time.
- Attempt at fixing the windows crash
0.5.1 - 2023-08-03
Support analyzer v6
0.5.0 - 2023-06-21
- Now resolves packages using
pub getif custom_lint failed to resolve packages offline. This should reduce the likelyness of a version conflict in mono-repositories. The conflict may still happen if two projects in a mono-repo use incompatible constraints. Like:name: foo dependencies: package: ^1.0.0name: bar dependencies: package: ^2.0.0 - The command line now shows the lints' severity (thanks to @praxder)
- Now requires Dart 3.0.0
0.4.0 - 2023-05-12
- Report uncaught exceptions inside
context.addPostRunCallback - Added support for analyzer 5.12.0
0.3.4 - 2023-04-19
- custom_lint now automatically generate quick-fixes for "ignore for line/file".
- Update the socket communication logic to avoid possible problem is the message contains a \n.
- fixes custom_lint on windows
0.3.3 - 2023-04-06
- Reduce the likelyness of a dependency version conflict.
- Fix
dart analyzecrashing on large projects in the CI due to custom_lint incorrectly trying to run plugins in debug mode. - Fix the
custom_lintcommand line never terminating in some cases where plugins fail to start (thanks to @kuhnroyal). - Upgraded
analyzerto>=5.7.0 <5.11.0 LintRuleNodeRegistryand other AstVisitor-like now are based offGeneralizingAstVisitorinstead ofGeneralizingAstVisitor- Upgraded
cli_utilto^0.4.0 - The command line no-longer throws if ran on an empty project or a project with no plugins enabled
- Exposes the Pubspec in CustomLintContext
0.3.2 - 2023-03-09
- Revert "Fixed an issue that caused a "Port already in use" error when trying to start custom_lint". This had the opposite effect of what's expected.
0.3.0 - 2023-03-09
- Update analyzer to >=5.7.0 <5.8.0
- Fixed an issue that caused a "Port already in use" error when trying to start custom_lint
0.2.12
Move json_serializable to dev dependencies
0.2.11
- Improved the error message when there is a version conflict in mono-repos (thanks to @@adsonpleal)
- Bump minimum Dart SDK to
sdk: ">=2.19.0 <3.0.0"
0.2.5
Fix custom_lint not correctly killing sub-processes when the IDE stops custom_lint.
0.2.2
Fixes an exception thrown when a project contains images.
0.2.0
Large Breaking change
This new version introduces large changes to how lints/fixes/assists are defined.
Long story short, besides the createPlugin method, the entire syntax changed.
See the readme, examples, and docs around how to use the new syntax.
The new syntax has multiple benefits:
-
It is now possible to enable/disable lints inside the
analysis_options.yamlas followed:# optional include: path/to/another/analysis_options.yaml custom_lint: rules: # enable a lint rule - my_lint_rule # A lint rule that is explicitly disabled - another_lint_rule: falseEnabling/disabling lints is supported by default with the new syntax. Nothing to do~
-
Performance improvement when using a large number of lints. The workload of analyzing files is now shared between lints.
-
The new syntax makes the code simpler to maintain. Before, the
PluginBase.getLintsrapidly ended-up doing too much. Now, it is simple to split the implementation in multiple bits
0.1.2-dev
Do some internal refactoring as an attempt to fix #60
0.1.1
- Fix an issue where plugins were hot-reloaded when the file analyzed changed.
- Optimized analysis such that
PluginBase.getLints()is theorically not reinvoked unless the file analyzed changed.
0.1.0
-
Breaking: The plugin entrypoint has moved.
Plugins no-longer should define a/bin/custom_lint.dartfile. Instead they should define a/lib/<my_package_name>.dart -
Breaking: The plugin entrypoint is modified. Plugins no-longer define a "main", but instead define a
createPluginfunction:Before:
// /bin/custom_lint.dart void main(List<String> args, SendPort sendPort) { startPlugin(sendPort, MyPlugin()); }After:
// /lib/<my_package_name.dart MyPlugin createPlugin() => MyPlugin(); -
Add assist support. Inside your plugins, you can now override
handleGetAssists:import 'package:analyzer_plugin/protocol/protocol_generated.dart' as analyzer_plugin; class MyPlugin extends PluginBase { // ... Future<analyzer_plugin.EditGetAssistsResult> handleGetAssists( ResolvedUnitResult resolvedUnitResult, { required int offset, required int length, }) async { // TODO return some assists for the given offset } }
0.0.16
Fix expect_lint not working if the file doesn't contain any lint.
0.0.15
-
Custom_lint now has a built-in mechanism for testing lints. Simply write a file that should contain lints for your plugin. Then, using a syntax similar to
// ignore, write a// expect_lint: codein the line before your lint:// expect_lint: riverpod_final_provider var provider = Provider(...);When doing this, there are two possible cases:
- The line after the
expect_lintcorrectly contains the expected lint.
In that case, the lint is ignored (similarly to if we used// ignore) - The next line does not contain the lint.
In that case, the
expect_lintcomment will have an error.
This allows testing your plugins by simply running
custom_linton your test/example folder. Then, if any expected lint is missing, the command will fail. But if your plugin correctly emits the lint, the command will succeed. - The line after the
-
Upgrade analyzer/analzer_plugin
0.0.14
- Fix custom_lint not working in the IDE
0.0.13
- Add debugger and hot-reload support (Thanks to @TimWhiting)
- Correctly respect
excludeobtains from the analysis_options.yaml - Fix
dart analyzeincorrectly failing due to showing the "plugin is starting" lint.
0.0.12
- Fix custom_lint plugins not working in release mode and when using git dependencies (thanks to @TimWhiting)
- Fix command line exit code not being set properly (thansk to @andrzejchm)
0.0.11
Fix custom_lint not showing in the IDE
0.0.10+1
Update docs
0.0.10
- Upgrade Riverpod to 2.0.0
- Fix deprecation errors with analyzer
0.0.9+1
Update description and readme
0.0.9
- Lint fixes can now be used when placing the cursor on the last character of a lint
- improve pub score
0.0.8
Allow lints to emit fixes
0.0.7
Fix a bug where the custom_lint command line may not list all lints
0.0.6
feat!: getLints now is expected to return a Stream<Lint> instead of Iterable<Lint>
fix: a bug where the lints shown by the IDE could get out of sync with the actual content of the file
0.0.5
Fixed error reporting if a custom_lint plugin throws but the exception comes from a package instead of the plugin itself.
0.0.4
- Fixed a bug where the command line could show IDE-only meant for debugging
0.0.3
PluginBase.getLints now receive a ResolvedUnitResult instead of a LibraryElement.
0.0.2
-
Compilation errors are now visible within the
pubspec.yamlof applications that are using the plugin. -
Plugins that are currently loading are now highlighted inside the
pubspec.yamlof applications that are using the plugin. -
If a plugin throws when trying to analyze a Dart file, the IDE will now show the exception at the top of the analyzed file.
-
Compilation errors, exceptions and prints are now accessible within a log file (
custom_lint.log) inside applications using the plugin.
0.0.1
Initial release
Installing
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add custom_lintpubspec.yaml
name: custom_lint
version: 0.6.9
description: Lint rules are a powerful way to improve the maintainability of a project. Custom Lint allows package authors and developers to easily write custom lint rules.
repository: https://github.com/invertase/dart_custom_lint
issue_tracker: https://github.com/invertase/dart_custom_lint/issues
environment:
sdk: ">=3.0.0 <4.0.0"
dependencies:
analyzer: ^6.6.0
analyzer_plugin: ^0.11.0
args: ^2.3.1
async: ^2.9.0
ci: ^0.1.0
cli_util: ^0.4.0
collection: ^1.16.0
custom_lint_core: ^0.6.9
freezed_annotation: ^2.2.0
json_annotation: ^4.7.0
meta: ^1.7.0
package_config: ^2.0.2
path: ^1.8.0
pub_semver: ^2.1.1
pubspec_parse: ^1.2.0
rxdart: ^0.28.0
uuid: ">=3.0.6 <5.0.0"
yaml: ^3.1.1
dev_dependencies:
ansi_styles: ^0.3.2+1
benchmark_harness: ^2.2.0
build_runner: ^2.3.2
file: ^7.0.0
freezed: ^2.3.2
glob: ^2.1.2
json_serializable: ^6.5.4
test: ^1.20.2
test_process: ^2.1.0
executables:
custom_lint: custom_lint
Version history
| Version | Published | Archive | SHA-256 |
|---|---|---|---|
| 0.0.1 | 2022-04-11T10:37:28.967785Z | Download | 9cdc374121ac30bedb80f68a07fd76ebf1d55083f8d314bd22df4eae67ae137a |
| 0.0.2 | 2022-04-14T10:43:53.407881Z | Download | e952987a3982038ec72f4783288bb0adeb139fbf5b122a470aa5d1a9dd0fa094 |
| 0.0.3 | 2022-05-16T14:03:26.737735Z | Download | 7b684ff0459998e5eee39dcea3c0d14070120de9e2a1c2918d0fbfddda1e0a4a |
| 0.0.4 | 2022-06-07T12:02:42.865Z | Download | d9dec5988450ec2698bc9b3bd0d5f8d313a3540527d024310f700687cb10f894 |
| 0.0.5 | 2022-06-07T17:54:59.892367Z | Download | 269f8d70c027b4c4fec4325c52f2e3ed50e0d202643e713e8038cffd21104c9c |
| 0.0.6 | 2022-06-13T17:49:47.738781Z | Download | 09c32f0ba53ed11e12ca09453cd9377de506455cd229cbd0b47e7299433a6f41 |
| 0.0.7 | 2022-06-14T13:40:12.407094Z | Download | 2ad9dd3530461521da080bf78ad011a29bffd3c1e779c91aa70fee3c62ba648c |
| 0.0.8 | 2022-06-14T20:14:04.097837Z | Download | baa4661f21a6fe0e6f88da9d2c6e7f827bf94d5bef41f57ac38de968477ad350 |
| 0.0.9 | 2022-07-05T09:09:15.791242Z | Download | a14dff85bda445a78462d907960921d91fbfa58994cb43fc0098aaf4e378a8aa |
| 0.0.9+1 | 2022-07-06T11:32:41.111224Z | Download | 4c4cc2ac5556dee746b3e81edb847335dd77fafe5e9b6808595560be5783f4f3 |
| 0.0.10 | 2022-10-03T10:20:43.324883Z | Download | d58a9c288971d04374b9d1cbd7b8c8d7aa07900873f1224a260e7ded9a737894 |
| 0.0.10+1 | 2022-10-04T08:48:04.719084Z | Download | 2c49e6a1f4994a0d2494e0ec3d122ff2158e2414cf2f02e8502ee68566595761 |
| 0.0.11 | 2022-10-07T14:19:21.186791Z | Download | 2f97dc4806abd2c185665e3c91f5af93cd61718e340bcc29b0a9662306cc024e |
| 0.0.12 | 2022-10-07T15:49:36.461277Z | Download | 4db715848640a185d66bee2d9477bdfb0b2cf18b6e6647bc11dd35984e427436 |
| 0.0.13 | 2022-11-23T13:55:58.573145Z | Download | 0f19aaf6ab634fe6da225174424262fecafc318551282fb38209c78657868b7f |
| 0.0.14 | 2022-11-23T16:16:21.151678Z | Download | 6eab9aae8f204dbac3a785c81a32980c84c00f42a72300a275b7c661d1a6efd6 |
| 0.0.15 | 2022-12-06T15:22:09.076923Z | Download | 2264aea4889331d19ea6eb8cf27e4ee62c5a3eb6f572c81d1d057709b30bf52a |
| 0.0.16 | 2022-12-09T13:09:00.522339Z | Download | fa0b50885e41a66180a9b5a2dca7c2152ad0c8ea10dee16d0c123adc573a21df |
| 0.1.0 | 2023-01-06T07:51:15.830037Z | Download | 244cb887d5f6e9cf0b739774dac37d6b2462c677dce6ec8b2eb952aceef2a18f |
| 0.1.1 | 2023-01-09T15:10:42.545626Z | Download | ee61018ed2c4bafa94458aca259d58335bfe6110f7ba244ad15a853b0513898b |
| 0.1.2-dev | 2023-01-10T09:53:09.414769Z | Download | c0dcebfb2250226c563f4400d0762d8d22e357299af53e9b61944976f15c431a |
| 0.2.0 | 2023-01-20T14:34:45.994014Z | Download | c14f87590e96e4686b8fdaaf5c088983a8fcabf9ccc7274eb1c5516427521a38 |
| 0.2.2 | 2023-01-31T18:57:11.443431Z | Download | ced9a173ce0b30fc498160060c23ff8fed5aabfbfb7c7ceaed782f3129c73084 |
| 0.2.5 | 2023-02-10T17:28:54.634220Z | Download | 29b7e51b5e75fcd5ffce8fc12af87b71cbde7a59d080467b187630231aeb42c0 |
| 0.2.11 | 2023-02-27T18:20:21.294990Z | Download | 8df4335b86ff9695770dfec9599d1b2d87d997b2db59827f11381ecd62ab572e |
| 0.2.12 | 2023-02-28T20:00:14.953769Z | Download | 324e7026902f34e180d8d27e08a89dbbe3dd8a54e0c3852a0df0db0f4046120b |
| 0.3.0 | 2023-03-09T07:23:14.092498Z | Download | 32d120ce01a93ff145ab20ce807d68e0eac71a44fc8802d8688ab64e5bf151ad |
| 0.3.2 | 2023-03-09T15:11:02.081592Z | Download | 32648ef4f1dda618d98a22bc958fa79d479895891061e63338bec510b67e821a |
| 0.3.3 | 2023-04-06T14:57:02.113259Z | Download | 80ccf10b30d4f1d0b40bd6d276a86d72266569c0a7542f1b839daf2fd05c16a5 |
| 0.3.4 | 2023-04-19T11:54:53.963574Z | Download | e87176016465263daf10c209df1f50a52e9e46e7612fab7462da1e6d984638f6 |
| 0.4.0 | 2023-05-12T08:57:17.240922Z | Download | 3ce36c04d30c60cde295588c6185b3f9800e6c18f6670a7ffdb3d5eab39bb942 |
| 0.5.0 | 2023-06-21T10:56:46.333593Z | Download | b09a939c3bb062fdf072aa4c8eb5447231338854c4fefb23e4c9f7cef41cb3ff |
| 0.5.1 | 2023-08-03T16:24:21.399646Z | Download | 99e3cd20010b93c466f07573583660c73f034da2d95cc98e90426c1c16e40640 |
| 0.5.2 | 2023-08-16T10:08:13.621027Z | Download | ae3cf0f83a155bdfc50315d4a11c7b358ea1e201a57ab0bb2b397f1a9a2a9b80 |
| 0.5.3 | 2023-08-29T07:59:55.546944Z | Download | 837821e4619c167fd5a547b03bb2fc6be7e65b800ec75528848429705c31ceba |
| 0.5.4 | 2023-10-20T12:53:17.389489Z | Download | 32ca92485d52095d1296c99c8ab922d112a99f190dac1568aa369fe701038a33 |
| 0.5.5 | 2023-10-26T10:08:40.185087Z | Download | 68671c7b9cad03029c0270119169e32e801f8d87cec00367f233f4408d8913bd |
| 0.5.6 | 2023-10-30T15:04:08.436356Z | Download | f9a828b696930cf8307f9a3617b2b65c9b370e484dc845d69100cadb77506778 |
| 0.5.7 | 2023-11-20T11:05:58.655952Z | Download | 198ec6b8e084d22f508a76556c9afcfb71706ad3f42b083fe0ee923351a96d90 |
| 0.5.8 | 2024-01-09T12:49:06.027628Z | Download | dfb893ff17c83cf08676c6b64df11d3e53d80590978d7c1fb242afff3ba6dedb |
| 0.5.11 | 2024-01-27T17:55:58.060707Z | Download | 22bd87a362f433ba6aae127a7bac2838645270737f3721b180916d7c5946cb5d |
| 0.6.0 | 2024-02-04T15:03:30.056643Z | Download | f89ff83efdba7c8996e86bb3bad0b759d58f9b19ae4d0e277a386ddd8b481217 |
| 0.6.2 | 2024-02-19T09:53:05.774612Z | Download | 445242371d91d2e24bd7b82e3583a2c05610094ba2d0575262484ad889c8f981 |
| 0.6.3 | 2024-03-16T14:52:51.836974Z | Download | 7dbb45d90ec8c73f99b08414cb629d8b35e3f84a28c971bfaffe4bfd99266e1a |
| 0.6.4 | 2024-03-16T15:43:13.380036Z | Download | 7c0aec12df22f9082146c354692056677f1e70bc43471644d1fdb36c6fdda799 |
| 0.6.5 | 2024-08-15T16:41:02.336624Z | Download | 4939d89e580c36215e48a7de8fd92f22c79dcc3eb11fda84f3402b3b45aec663 |
| 0.6.6 | 2024-09-08T08:11:47.421420Z | Download | cbea60b2e574a2958170bfb7a76b2d85e07e175911a7931a8e8eef42cc36673e |
| 0.6.7 | 2024-09-08T11:13:51.381079Z | Download | 6e1ec47427ca968f22bce734d00028ae7084361999b41673291138945c5baca0 |
| 0.6.8 | 2024-10-08T17:08:16.595136Z | Download | 832fcdc676171205201c9cffafd6b5add19393962f6598af8472b48b413026e6 |
| 0.6.9 | 2024-10-09T10:40:45.163373Z | Download | 18f7982b99c84c10d27280852c7e6efb3cc320b6acd85a922999e9a6bf8c7bea |
| 0.6.10 | 2024-10-10T15:52:28.533958Z | Download | 4500e88854e7581ee43586abeaf4443cb22375d6d289241a87b1aadf678d5545 |
| 0.7.0 | 2024-10-27T19:02:52.933666Z | Download | 3486c470bb93313a9417f926c7dd694a2e349220992d7b9d14534dc49c15bba9 |
| 0.7.1 | 2025-01-08T17:54:53.884005Z | Download | 6d509673c4dd0baa90e60dc8366bc2acc6690f16a7d44bfae31294d82c5d2a62 |
| 0.7.2 | 2025-01-29T21:11:30.265803Z | Download | 7e6a73e1722ad90b48f77918994c17a5b177b0869804ea3c4ce9c9199de019f6 |
| 0.7.3 | 2025-02-08T16:26:44.034352Z | Download | 021897cce2b6c783b2521543e362e7fe1a2eaab17bf80514d8de37f99942ed9e |
| 0.7.4 | 2025-02-27T12:00:16.852656Z | Download | 3a9fcbcba1d141d8084a17e57a787993d8d409b294e6d781069a7d627963ebe0 |
| 0.7.5 | 2025-02-27T12:53:28.344757Z | Download | 409c485fd14f544af1da965d5a0d160ee57cd58b63eeaa7280a4f28cf5bda7f1 |
| 0.7.6 | 2025-07-18T21:04:09.693416Z | Download | 9656925637516c5cf0f5da018b33df94025af2088fe09c8ae2ca54c53f2d9a84 |
| 0.7.7 | 2025-07-25T13:37:27.482785Z | Download | 9f0f0c832ed35e57de68bb4884eb86dedd061e826b593b6cea3d8c4600490f71 |
| 0.8.0 | 2025-07-25T13:40:22.353524Z | Download | 78085fbe842de7c5bef92de811ca81536968dbcbbcdac5c316711add2d15e796 |
| 0.8.1 | 2025-09-09T14:08:31.029924Z | Download | 751ee9440920f808266c3ec2553420dea56d3c7837dd2d62af76b11be3fcece5 |
Dependencies
analyzer "^6.6.0"
analyzer_plugin "^0.11.0"
args "^2.3.1"
async "^2.9.0"
ci "^0.1.0"
cli_util "^0.4.0"
collection "^1.16.0"
custom_lint_core "^0.6.9"
freezed_annotation "^2.2.0"
json_annotation "^4.7.0"
meta "^1.7.0"
package_config "^2.0.2"
path "^1.8.0"
pub_semver "^2.1.1"
pubspec_parse "^1.2.0"
rxdart "^0.28.0"
uuid "\u003e=3.0.6 \u003c5.0.0"
yaml "^3.1.1"