43 lines
2.1 KiB
Markdown
43 lines
2.1 KiB
Markdown
|
|
[](https://github.com/dart-lang/tools/actions/workflows/boolean_selector.yaml)
|
||
|
|
[](https://pub.dev/packages/boolean_selector)
|
||
|
|
[](https://pub.dev/packages/boolean_selector/publisher)
|
||
|
|
|
||
|
|
The `boolean_selector` package defines a simple and flexible syntax for boolean
|
||
|
|
expressions. It can be used for filtering based on user-defined expressions. For
|
||
|
|
example, the [`test`][test] package uses boolean selectors to allow users to
|
||
|
|
define what platforms their tests support.
|
||
|
|
|
||
|
|
[test]: https://github.com/dart-lang/test
|
||
|
|
|
||
|
|
The boolean selector syntax is based on a simplified version of Dart's
|
||
|
|
expression syntax. Selectors can contain identifiers, parentheses, and boolean
|
||
|
|
operators, including `||`, `&&`, `!`, and `? :`. Any valid Dart identifier is
|
||
|
|
allowed, and identifiers may also contain hyphens. For example, `chrome`,
|
||
|
|
`chrome || content-shell`, and `js || (vm && linux)` are all valid boolean
|
||
|
|
selectors.
|
||
|
|
|
||
|
|
A boolean selector is parsed from a string using
|
||
|
|
[`BooleanSelector.parse()`][parse], and evaluated against a set of variables
|
||
|
|
using [`BooleanSelector.evaluate()`][evaluate]. The variables are supplied as
|
||
|
|
a function that takes a variable name and returns its value. For example:
|
||
|
|
|
||
|
|
[parse]: https://pub.dev/documentation/boolean_selector/latest/boolean_selector/BooleanSelector/BooleanSelector.parse.html
|
||
|
|
|
||
|
|
[evaluate]: https://pub.dev/documentation/boolean_selector/latest/boolean_selector/BooleanSelector/evaluate.html
|
||
|
|
|
||
|
|
```dart
|
||
|
|
import 'package:boolean_selector/boolean_selector.dart';
|
||
|
|
|
||
|
|
void main(List<String> args) {
|
||
|
|
var selector = BooleanSelector.parse("(x && y) || z");
|
||
|
|
print(selector.evaluate((variable) => args.contains(variable)));
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Versioning
|
||
|
|
|
||
|
|
If this package adds new features to the boolean selector syntax, it will
|
||
|
|
increment its major version number. This ensures that packages that expose the
|
||
|
|
syntax to their users will be able to update their own minor versions, so their
|
||
|
|
users can indicate that they rely on the new syntax.
|