Markup Analyzer is a customizable lint rule for the custom_lint package in Dart/Flutter. It allows you to prohibit specific types of string expressions in the parameters of Flutter widgets.
This rule enables you to control the usage of string expressions such as simple string literals, interpolations, binary expressions, and others based on your configuration.
-
Add the package to your project's dependencies:
Add the following to your project's
pubspec.yamlunderdev_dependencies:dev_dependencies: custom_lint: markup_analyzer: ^latest_version
-
Get the dependencies:
flutter pub get
-
Activate the plugin in
analysis_options.yaml:Create or update the
analysis_options.yamlfile at the root of your project:analyzer: plugins: - custom_lint custom_lint: rules: - markup_analyzer
You can configure the MarkupAnalyzer rule via analysis_options.yaml by specifying which types of string expressions should be prohibited and the severity level of the error.
Example of a full configuration:
custom_lint:
rules:
- markup_analyzer:
simple: error
interpolation: warning
binary: warning
adjacent: warning
prefixed_identifier: none
method: none
simple_identifier: none
function: noneAfter setting up the plugin and configuring the rules, run the analyzer on your project:
dart run custom_lintAll rule violations will be displayed in the console and highlighted in your IDE if it supports custom_lint.
Configuration:
custom_lint:
rules:
markup_analyzer:
simple: error// BAD
Text('Hello, world!'); // Simple string literal is prohibited.
// OR GOOD
Text(AppLocalizations.of(context).greeting)Configuration:
custom_lint:
rules:
markup_analyzer:
prefixed_identifier: error// ERROR
Text(widget.title); // Prefixed identifier is prohibited.Configuration:
custom_lint:
rules:
markup_analyzer:
interpolation: error// BAD
Text('Hello, $name!'); // String interpolation is prohibited.
// GOOD
Text(AppLocalizations.of(context).helloWithName(name)); // Use string concatenation instead.Configuration:
custom_lint:
rules:
markup_analyzer:
binary: error// ERROR
Text('Hello, ' + 'world!'); // Binary expression with '+' is prohibited.Configuration:
custom_lint:
rules:
markup_analyzer:
adjacent: error// ERROR
Text(
'Hello, '
'world!'
); // Adjacent strings are prohibited.Configuration:
custom_lint:
rules:
markup_analyzer:
method: error// BAD
Text('hello'.tr()); // Method invocation is prohibited.
//GOOD
Text(AppLocalizations.of(context).hello)Configuration:
custom_lint:
rules:
markup_analyzer:
simple_identifier: error// ERROR
Text(title); // Simple identifier is prohibited.Configuration:
custom_lint:
rules:
markup_analyzer:
function: error// ERROR
Text(() { return 'Hello' } ()); // Function invocation is prohibited.