@@ -6,31 +6,38 @@ library unnecessary_brace_in_string_interp;
6
6
7
7
import 'package:analyzer/src/generated/ast.dart' ;
8
8
import 'package:analyzer/src/generated/error.dart' ;
9
+ import 'package:analyzer/src/generated/scanner.dart' ;
9
10
import 'package:analyzer/src/services/lint.dart' ;
10
11
11
- const msg = '''
12
- Interpolated simple identifiers (not followed by an alphanumeric string) do
13
- not need braces.
14
- ''' ;
12
+ final RegExp alphaNumeric = new RegExp (r'^[a-zA-Z0-9]' );
13
+
14
+ const msg =
15
+ '''Interpolated simple identifiers (not followed by an alphanumeric string) do
16
+ not need braces.''' ;
15
17
16
18
const name = 'UnnecessaryBraceInStringInterp' ;
17
19
20
+ bool isAlphaNumeric (Token token) =>
21
+ token is StringToken && token.lexeme.startsWith (alphaNumeric);
22
+
18
23
class UnnecessaryBraceInStringInterp extends Linter {
19
24
@override
20
25
AstVisitor getVisitor () => new Visitor (reporter);
21
26
}
22
27
23
- class Visitor extends SimpleAstVisitor < Object > {
28
+ class Visitor extends SimpleAstVisitor {
24
29
ErrorReporter reporter;
25
30
Visitor (this .reporter);
26
31
27
32
@override
28
33
visitStringInterpolation (StringInterpolation node) {
29
34
var expressions = node.elements.where ((e) => e is InterpolationExpression );
30
35
for (InterpolationExpression expression in expressions) {
31
- if (expression.expression is SimpleIdentifier &&
32
- expression.rightBracket != null ) {
33
- reporter.reportErrorForNode (new LintCode (name, msg), expression, []);
36
+ if (expression.expression is SimpleIdentifier ) {
37
+ Token bracket = expression.rightBracket;
38
+ if (bracket != null && ! isAlphaNumeric (bracket.next)) {
39
+ reporter.reportErrorForNode (new LintCode (name, msg), expression, []);
40
+ }
34
41
}
35
42
}
36
43
}
0 commit comments