meta 1.17.0
meta: ^1.17.0 copied to clipboard
Annotations used to express developer intentions that can't otherwise be deduced by statically analyzing source code.
1.17.0 #
-
Introduce
@awaitNotRequiredto annotateFuture-returning functions andFuture-typed fields and top-level variables whose value does not necessarily need to be awaited. This annotation can be used to suppressunawaited_futuresanddiscarded_futureslint diagnostics at call sites.For example, this
logfunction returns aFuture, but maybe the return value is typically not important, and is only useful in tests or while debugging:@awaitNotRequired Future<LogMessage> log(String message) { ... } void fn() { log('Message'); // Not important to wait for logging to complete. }Without the annotation on
log, the analyzer may report a lint diagnostic at the call tolog, such asunawaited_futuresordiscarded_futuresregarding the danger of not awaiting the function call, depending on what lint rules are enabled. -
Mark
Requiredandrequiredas@Deprecated. -
Update SDK constraints to
^3.5.0.
1.16.0 #
-
Add
TargetKinds to a few annotations to match custom-wired behavior that the Dart analyzer has been providing:- Require that
@factoryis only used on methods. - Require that
@Immutableis only used on classes, extensions, and mixins. - Require that
@mustBeOverriddenand@mustCallSuperare only used on overridable members. - Require that
@sealedis only used on classes.
- Require that
-
Updated
@doNotSubmitto (1) disallow same-library access (unlike other visibility annotation), (2) allow parameters marked with@doNotSubmitto be used in nested functions, and (3) disallowed@doNotSubmiton required parameters:import 'package:meta/meta.dart'; @doNotSubmit void a() {} void b() { // HINT: invalid_use_of_do_not_submit: ... a(); }import 'package:meta/meta.dart'; void test({ @doNotSubmit bool solo = false }) { void nested() { // OK if (solo) { /*...*/ } } }import 'package:meta/meta.dart'; void test({ // HINT: Cannot use on required parameters. @doNotSubmit required bool solo }) {}See https://github.com/dart-lang/sdk/issues/55558 for more information.
-
TargetKind.parameteris now allowed on a representation type, such as:// Ok, because `int _actual` is similar to a parameter declaration. extension type const FancyInt(@mustBeConst int _actual) {} -
Renamed
@ResourceIdentifierto@RecordUse.
1.15.0 #
-
Updated
@mustBeOverriddento only flag missing overrides in concrete classes; in other words, abstract classes (including implicitly abstract, i.esealed) and mixin declarations are no longer required to provide an implementation:import 'package:meta/meta.dart'; abstract class Base { @mustBeOverridden void foo() {} } class Derived extends Base { // ERROR: Missing implementation of `foo`. } abstract class Abstract extends Base { // No error. } sealed class Sealed extends Base { // No error. } mixin Mixin on Base { // No error. }See https://github.com/dart-lang/sdk/issues/52965 for more information.
-
Introduce
TargetKind.optionalParameter, to indicate that an annotation is valid on any optional parameter declaration. -
Introduce
TargetKind.overridableMember, to indicate that an annotation is valid on any instance member declaration. -
Introduce
TargetKind.instanceMember, to indicate that an annotation is valid on any instance member declaration. -
Updated
@doNotSubmitto (1) disallow same-library access (unlike other visibility annotation), (2) allow parameters marked with@doNotSubmitto be used in nested functions, and (3) disallowed@doNotSubmiton required parameters:import 'package:meta/meta.dart'; @doNotSubmit void a() {} void b() { // HINT: invalid_use_of_do_not_submit: ... a(); }import 'package:meta/meta.dart'; void test({ @doNotSubmit bool solo = false }) { void nested() { // OK if (solo) { /*...*/ } } }import 'package:meta/meta.dart'; void test({ // HINT: Cannot use on required parameters. @doNotSubmit required bool solo }) {}See https://github.com/dart-lang/sdk/issues/55558 for more information.
1.14.0 #
-
Introduce
TargetKind.constructor, to indicate that an annotation is valid on any constructor declaration. -
Introduce
TargetKind.directive, to indicate that an annotation is valid on any directive. -
Introduce
TargetKind.enumValue, to indicate that an annotation is valid on any enum value declaration. -
Introduce
TargetKind.typeParameter, to indicate that an annotation is valid on any type parameter declaration. -
Introduce
@doNotSubmitto annotate members that should not be accessed in checked-in code, typically because they are intended to be used ephemerally during development.One example is
package:test'ssolo: ...parameter, which skips all other tests in a test suite when set totrue. This parameter is useful during development, but should be prevented from being submitted:import 'package:meta/meta.dart'; void test( String name, void Function() body, { @doNotSubmit bool solo = false }) { // ... }import 'package:test/test.dart'; void main() { test( 'my test', () { // ... }, // HINT: invalid_use_of_do_not_submit: ... solo: true, ); } -
Introduce
@mustBeConstto annotate parameters which only accept constant arguments.
1.13.0 #
- Add type checks for the
@ResourceIdentifierexperimental annotation.
1.12.0 #
- Introduce the
@ResourceIdentifierexperimental annotation for static methods whose constant literal arguments should be collected during compilation. - Indicate that
@requiredand@Requiredare set to be deprecated for later removal.
1.11.0 #
- Introduce
TargetKind.extensionTypeto indicate that an annotation is valid on any extension type declaration.
1.10.0 #
- Introduce
@redeclareto annotate extension type members that redeclare members from a superinterface. - Migrate the
TargetKindenum to a class to ease the addition of new kinds.
1.9.1 #
- Update SDK constraints to
>=2.12.0 <4.0.0. - Mark
@reopenstable.
1.9.0 #
- Introduce
@reopento annotate class or mixin declarations that can safely extend classes markedbase,finalorinterface. - Introduce
@MustBeOverriddento annotate class or mixin members which must be overridden in all subclasses. - Deprecate
@alwaysThrows, which can be replaced by using a return type of 'Never'.
1.8.0 #
- Add
@UseResult.unless. - The mechanism behind
noInlineandtryInlinefromdart2js.darthas been changed. This should not affect the use of these annotations in practice.
1.7.0 #
- Restore
TargetKindExtensionandget displayString. We publishedanalyzer 1.7.2that is compatible withTargetKindExtension.
2.0.0 removed #
- Restore
TargetKindExtensionandget displayString.
1.6.0 #
- Remove
TargetKindExtension. Adding it was a breaking change, because there are clients, e.g.analyze 1.7.0, that also declare an extension onTargetKind, and also declareget displayString. This causes a conflict.
1.5.0 #
- Add
TargetKindExtension.displayString.
1.4.0 #
- Introduce
TargetKind.topLevelVariablethat indicates that an annotation is valid on any top-level variable declaration. - Introduce
@useResultto annotate methods, fields, or getters that return values that should be used - stored, passed as arguments, etc. - Updates for documentation.
1.3.0 #
- Stable release for null safety.
1.3.0-nullsafety.6 #
- Update SDK constraints to
>=2.12.0-0 <3.0.0based on beta release guidelines.
1.3.0-nullsafety.5 #
- Allow prerelease versions of the
2.12SDK.
1.3.0-nullsafety.4 #
- Introduce
@internalto annotate elements that should not be used outside of the package in which the element is declared.
1.3.0-nullsafety.3 #
- Allow 2.10 stable and 2.11.0 dev SDK versions.
1.3.0-nullsafety.2 #
- Update for the 2.10 dev SDK.
1.3.0-nullsafety.1 #
- Allow the <=2.9.10 stable SDK.
1.3.0-nullsafety #
- Opt into null safety.
1.2.2 #
- Removed
unawaitedbecause the attempt to move it frompackage:pedanticcaused too many issues. If you see errors aboutunawaitedbeing declared in two places, please update the version constraints formetato1.2.2or later.
1.2.1 #
- Fixed a bug by adding an import of dart:async so that the code really is compatible with the lower bound of the SDK constraints.
1.2.0 #
- Introduce
unawaitedto mark invocations that return aFuturewhere it's intentional that the future is not being awaited. (Moved frompackage:pedantic.) - Introduce
@doNotStoreto annotate methods, getters and functions to indicate that values obtained by invoking them should not be stored in a field or top-level variable.
1.1.8 #
- Introduce
@nonVirtualto annotate instance members that should not be overridden in subclasses or when mixed in.
1.1.7 #
-
Introduce
@sealedto declare that a class or mixin is not allowed as a super-type.Only classes in the same package as a class or mixin annotated with
@sealedmay extend, implement or mix-in the annotated class or mixin. (SDK issue 27372).
1.1.6 #
- Set max SDK version to <3.0.0.
1.1.5 #
- Introduce @isTest and @isTestGroup to declare a function that is a test, or a test group.
1.1.4 #
- Added dart2js.dart.
1.1.2 #
- Rollback SDK constraint update for 2.0.0. No longer needed.
1.1.1 #
- Update SDK constraint to be 2.0.0 dev friendly.
1.1.0 #
-
Introduce
@alwaysThrowsto declare that a function always throws (SDK issue 17999). This is first available in Dart SDK 1.25.0-dev.1.0.import 'package:meta/meta.dart'; // Without knowing that [failBigTime] always throws, it looks like this // function might return without returning a bool. bool fn(expected, actual) { if (expected != actual) failBigTime(expected, actual); else return True; } @alwaysThrows void failBigTime(expected, actual) { throw new StateError('Expected $expected, but was $actual.'); }
1.0.5 #
- Introduce
@experimentalto annotate a library, or any declaration that is part of the public interface of a library (such as top-level members, class members, and function parameters) to indicate that the annotated API is experimental and may be removed or changed at any-time without updating the version of the containing package, despite the fact that it would otherwise be a breaking change.
1.0.4 #
-
Introduce
@virtualto allow field overrides in strong mode (SDK issue 27384).import 'package:meta/meta.dart' show virtual; class Base { @virtual int x; } class Derived extends Base { int x; // Expose the hidden storage slot: int get superX => super.x; set superX(int v) { super.x = v; } }
1.0.3 #
-
Introduce
@checkedto override a method and tighten a parameter type (SDK issue 25578).import 'package:meta/meta.dart' show checked; class View { addChild(View v) {} } class MyView extends View { // this override is legal, it will check at runtime if we actually // got a MyView. addChild(@checked MyView v) {} } main() { dynamic mv = new MyView(); mv.addChild(new View()); // runtime error }
1.0.2 #
- Introduce
@visibleForTestingannotation for declarations that may be referenced only in the library or in a test.
1.0.1 #
- Updated
@factoryto allow statics and methods returningnull.
1.0.0 #
- First stable API release.
0.12.2 #
- Updated
@protectedto include implemented interfaces (linter#252).
0.12.1 #
- Fixed markdown in dartdocs.
0.12.0 #
- Introduce
@optionalTypeArgsannotation for classes whose type arguments are to be treated as optional.
0.11.0 #
- Added new
Requiredconstructor with a means to specify a reason to explain why a parameter is required.
0.10.0 #
- Introduce
@factoryannotation for methods that must either be abstract or must return a newly allocated object. - Introduce
@literalannotation that indicates that any invocation of a constructor must use the keywordconstunless one or more of the arguments to the constructor is not a compile-time constant.
0.9.0 #
- Introduce
@protectedannotation for members that must only be called from instance members of subclasses. - Introduce
@requiredannotation for optional parameters that should be treated as required. - Introduce
@mustCallSuperannotation for methods that must be invoked by all overriding methods.