NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #554 most downloaded on pub.dev
A package to help writing custom linters
Last release 1 years ago
09 Sep 2025
Release timing varies
gaps range from 9 days to 5 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
75 releases · first in 2022
One column per quarter.
custom_lint : 0.8.0 -> 0.8.1 custom_lint_builder : 0.8.0 -> 0.8.1
custom_lint : 0.8.0 -> 0.8.1
custom_lint_builder : 0.8.0 -> 0.8.1
Support analyzer 7.5.0
Support analyzer 7.5.0
Nothing published for this version
- custom_lint upgraded to 0.7.6
custom_lint upgraded to 0.7.6Fix inconsistent version
Fix inconsistent version
- custom_lint upgraded to 0.7.4
custom_lint upgraded to 0.7.4- custom_lint upgraded to 0.7.3
custom_lint upgraded to 0.7.3- custom_lint upgraded to 0.7.2
custom_lint upgraded to 0.7.2- Support analyzer 7.0.0
custom_lint --fix and the generated "Fix all " assists now correctly handle imports.
custom_lint --fix and the generated "Fix all <code>" assists
now correctly handle imports.custom_lint_core upgraded to 0.6.10
custom_lint upgraded to 0.6.10custom_lint_core upgraded to 0.6.10custom_lint_core upgraded to 0.6.9
custom_lint upgraded to 0.6.9custom_lint_core upgraded to 0.6.9- Fix CI
- custom_lint upgraded to 0.6.7
custom_lint upgraded to 0.6.7- custom_lint upgraded to 0.6.6
custom_lint upgraded to 0.6.6Upgraded to analyzer ^6.6.0. This is a quick fix to unblock the stable Flutter channel. A more robust fix will come later.
- custom_lint upgraded to 0.6.4
custom_lint upgraded to 0.6.4custom_lint_core upgraded to 0.6.3
custom_lint upgraded to 0.6.3custom_lint_core upgraded to 0.6.3Upgrade analyzer to support 6.4.0
TypeChecker.isSuperTypeOf (thanks to @charlescyt)custom_lint_core upgraded to 0.6.1
custom_lint_core upgraded to 0.6.1Bumped minimum Dart SDK to 3.0.0
--fixcustom_lint_core upgraded to 0.5.14
custom_lint_core upgraded to 0.5.14custom_lint_core upgraded to 0.5.13
custom_lint_core upgraded to 0.5.13custom_lint_core upgraded to 0.5.12
custom_lint_core upgraded to 0.5.12Added support for analysis_options.yaml that are nt at the root of the project (thanks to @mrgnhnt96)
analysis_options.yaml that are nt at the root of the project (thanks to @mrgnhnt96)custom_lint_core upgraded to 0.5.10
custom_lint_core upgraded to 0.5.10custom_lint_core upgraded to 0.5.9
custom_lint_core upgraded to 0.5.9// ignore comments now correctly respect indentation when they are inserted (thanks to @PiotrRogulski)
// ignore comments now correctly respect indentation when they are inserted (thanks to @PiotrRogulski)custom_lint_core upgraded to 0.5.7
custom_lint upgraded to 0.5.7custom_lint_core upgraded to 0.5.7custom_lint_core upgraded to 0.5.6
custom_lint upgraded to 0.5.6custom_lint_core upgraded to 0.5.6custom_lint_core upgraded to 0.5.5
custom_lint upgraded to 0.5.5custom_lint_core upgraded to 0.5.5custom_lint_core upgraded to 0.5.4
custom_lint upgraded to 0.5.4custom_lint_core upgraded to 0.5.4custom_lint_core upgraded to 0.5.3
custom_lint upgraded to 0.5.3custom_lint_core upgraded to 0.5.3Support both analyzer 5.12.0 and 6.0.0 at the same time.
Nothing published for this version
Nothing published for this version
custom_lint_core upgraded to 0.5.0
custom_lint upgraded to 0.5.0custom_lint_core upgraded to 0.5.0Report uncaught exceptions inside context.addPostRunCallback
context.addPostRunCallbackcustom_lint_core upgraded to 0.3.4
custom_lint upgraded to 0.3.4custom_lint_core upgraded to 0.3.4Upgraded analyzer to >=5.7.0 <5.11.0
analyzer to >=5.7.0 <5.11.0LintRuleNodeRegistry and other AstVisitor-like now are based off GeneralizingAstVisitor instead of GeneralizingAstVisitorcustom_lint_core upgraded to 0.3.2
custom_lint upgraded to 0.3.2custom_lint_core upgraded to 0.3.2custom_lint_core upgraded to 0.3.1
custom_lint_core upgraded to 0.3.1Upgrade custom_lint
Upgrade custom_lint
Fixes LintCode.url no-longer showing-up in the IDE
LintCode.url no-longer showing-up in the IDEsdk: ">=2.19.0 <3.0.0"Fix filesToAnalyze only working on the file name instead of the file path.
Fix filesToAnalyze only working on the file name instead of the file path.
Fix TypeChecker.fromPackage not always return true when it should
Fix TypeChecker.fromPackage not always return true when it should
Fix exception thrown by TypeChecker.isExactlyType if DartType.element is null.
Fix exception thrown by TypeChecker.isExactlyType if DartType.element is null.
Extract LintRule and similar other utilities to a separate package: custom_lint_core. custom_lint_builder re-exports custom_lint_core, so the utilitie
Extract LintRule and similar other utilities to a separate package: custom_lint_core.
custom_lint_builder re-exports custom_lint_core, so the utilities are still available.
Fix infinite loop on InconsistentAnalysisException
Fix infinite loop on InconsistentAnalysisException
Fix custom_lint not correctly killing sub-processes when the IDE stops custom_lint.
matcherNormalizedPrioritizedSourceChangeSnapshotAdded .testRun & testAnalyzeAndRun methods, which enables programmatically running a lint/assist/fix against a Dart file.
<DartLintRule/DartFix/DartAssist>.testRun & testAnalyzeAndRun methods, which
enables programmatically running a lint/assist/fix against a Dart file.matcherNormalizedPrioritizedSourceChangeSnapshot test matcher, which
allows checking that a list of file edits matches against a JSON snapshot of the changes.Fixes InconsistentAnalysisException
Fixes InconsistentAnalysisException
Fixes an exception thrown when a project contains images.
Fixes an exception thrown when a project contains images.
Add TypeChecker.every and TypeChecker.package
Add TypeChecker.every and TypeChecker.package
Large Breaking change This new version introduces large changes to how lints/fixes/assists are defined. Long story short, besides the createPlugin met…
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.yaml
as 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: false
Enabling/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.getLints rapidly ended-up doing too much.
Now, it is simple to split the implementation in multiple bits
Do some internal refactoring as an attempt to fix #60
Do some internal refactoring as an attempt to fix #60
Fix an issue where plugins were hot-reloaded when the file analyzed changed.
PluginBase.getLints() is theorically not reinvoked
unless the file analyzed changed.Breaking: The plugin entrypoint has moved. Plugins no-longer should define a /bin/custom_lint.dart file. Instead they should define a /lib/ .dart
Breaking: The plugin entrypoint has moved.
Plugins no-longer should define a /bin/custom_lint.dart file.
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 createPlugin function:
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
}
}
Fix expect_lint not working if the file doesn't contain any lint.
Fix expect_lint not working if the file doesn't contain any lint.
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 simila
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: code
in the line before your lint:
// expect_lint: riverpod_final_provider
var provider = Provider(...);
When doing this, there are two possible cases:
expect_lint correctly contains the expected lint.// ignore)expect_lint comment 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.
Upgrade analyzer/analzer_plugin
Your coding agent can read these notes before it upgrades. Set up the MCP server →