custom_lint_builder 0.1.1 copy "custom_lint_builder: ^0.1.1" to clipboard
custom_lint_builder: ^0.1.1 copied to clipboard

A package to help writing custom linters

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.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
      }
    }
    

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: 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_lint correctly 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_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

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 exclude obtains from the analysis_options.yaml
  • Fix dart analyze incorrectly failing due to showing the "plugin is starting" lint.

0.0.12 #

Upgrade dependencies

0.0.11 #

Upgrade dependencies

0.0.10 #

  • Upgrade Riverpod to 2.0.0
  • Fix deprecation errors with analyzer

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.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.yaml of applications that are using the plugin.

  • Plugins that are currently loading are now highlighted inside the pubspec.yaml of 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