Skip to main content

implicit_reopen

Learn about the implicit_reopen linter rule.

Experimental
Fix available

Don't implicitly reopen classes.

Details

#

Using an interface, base, final, or sealed modifier on a class, or a base modifier on a mixin, authors can control whether classes and mixins allow being implemented, extended, and/or mixed in from outside of the library where they're defined. In some cases, it's possible for an author to inadvertently relax these controls and implicitly "reopen" a class. (A similar reopening cannot occur with a mixin.)

This lint guards against unintentionally reopening a class by requiring such cases to be made explicit with the @reopen annotation in package:meta.

BAD:

dart
interface class I {}  class C extends I {} // LINT 

GOOD:

dart
interface class I {}  final class C extends I {} 
dart
import 'package:meta/meta.dart';  interface class I {}  @reopen class C extends I {} 

Enable

#

To enable the implicit_reopen rule, add implicit_reopen under linter > rules in your analysis_options.yaml file:

analysis_options.yaml
yaml
linter:  rules:  - implicit_reopen 

If you're instead using the YAML map syntax to configure linter rules, add implicit_reopen: true under linter > rules:

analysis_options.yaml
yaml
linter:  rules:  implicit_reopen: true