Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Unified Diff: pkg/intl/lib/extract_messages.dart

Issue 22392004: Improvements to warnings on message extraction. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Changes from review Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/intl/test/message_extraction/extract_to_json.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/intl/lib/extract_messages.dart
diff --git a/pkg/intl/lib/extract_messages.dart b/pkg/intl/lib/extract_messages.dart
index 2fa06ad2c972355d89d5b23d9bf8586b5ed9ca3b..0375e5ebcb436daeb395c62e5feb0fae2a38c0e7 100644
--- a/pkg/intl/lib/extract_messages.dart
+++ b/pkg/intl/lib/extract_messages.dart
@@ -33,6 +33,21 @@ import 'package:intl/src/intl_message.dart';
bool suppressWarnings = false;
/**
+ * If this is true, then treat all warnings as errors.
+ */
+bool warningsAreErrors = false;
+
+/**
+ * This accumulates a list of all warnings/errors we have found. These are
+ * saved as strings right now, so all that can really be done is print and
+ * count them.
+ */
+List<String> warnings = [];
+
+/** Were there any warnings or errors in extracting messages. */
+bool get hasWarnings => warnings.isNotEmpty;
+
+/**
* Parse the source of the Dart program file [file] and return a Map from
* message names to [IntlMessage] instances.
*/
@@ -58,13 +73,15 @@ CompilationUnit _root;
*/
String _origin;
-void _reportErrorLocation(ASTNode node) {
- if (_origin != null) print(" from $_origin");
+String _reportErrorLocation(ASTNode node) {
+ var result = new StringBuffer();
+ if (_origin != null) result.write(" from $_origin");
var info = _root.lineInfo;
if (info != null) {
var line = info.getLocation(node.offset);
- print(" line: ${line.lineNumber}, column: ${line.columnNumber}");
+ result.write(" line: ${line.lineNumber}, column: ${line.columnNumber}");
}
+ return result.toString();
}
/**
@@ -129,9 +146,17 @@ class MessageFindingVisitor extends GeneralizingASTVisitor {
if (!values.every((each) => each is SimpleStringLiteral)) {
"Intl.message arguments must be simple string literals";
}
- if (!notArgs.any((each) => each.name.label.name == 'name')) {
+ var messageName = notArgs.firstWhere(
+ (eachArg) => eachArg.name.label.name == 'name',
+ orElse: () => null);
+ if (messageName == null) {
return "The 'name' argument for Intl.message must be specified";
}
+ if ((messageName.expression is! SimpleStringLiteral)
+ || messageName.expression.value != name) {
+ return "The 'name' argument for Intl.message must be a simple string "
+ "literal and match the containing function name.";
+ }
var hasArgs = namedArguments.any((each) => each.name.label.name == 'args');
var hasParameters = !parameters.parameters.isEmpty;
if (!hasArgs && hasParameters) {
@@ -146,7 +171,7 @@ class MessageFindingVisitor extends GeneralizingASTVisitor {
*/
void visitMethodDeclaration(MethodDeclaration node) {
parameters = node.parameters;
- String name = node.name.name;
+ name = node.name.name;
super.visitMethodDeclaration(node);
}
@@ -154,16 +179,6 @@ class MessageFindingVisitor extends GeneralizingASTVisitor {
* Record the parameters of the function or method declaration we last
* encountered before seeing the Intl.message call.
*/
- void visitFunctionExpression(FunctionExpression node) {
- parameters = node.parameters;
- name = null;
- super.visitFunctionExpression(node);
- }
-
- /**
- * Record the parameters of the function or method declaration we last
- * encountered before seeing the Intl.message call.
- */
void visitFunctionDeclaration(FunctionDeclaration node) {
parameters = node.functionExpression.parameters;
name = node.name.name;
@@ -193,9 +208,12 @@ class MessageFindingVisitor extends GeneralizingASTVisitor {
var reason = checkValidity(node);
if (reason != null) {
if (!suppressWarnings) {
- print("Skipping invalid Intl.message invocation\n <$node>");
- print(" reason: $reason");
- _reportErrorLocation(node);
+ var err = new StringBuffer();
+ err.write("Skipping invalid Intl.message invocation\n <$node>\n");
+ err.write(" reason: $reason\n");
+ err.write(_reportErrorLocation(node));
+ warnings.add(err.toString());
+ print(err);
}
// We found one, but it's not valid. Stop recursing.
return true;
@@ -249,9 +267,12 @@ class MessageFindingVisitor extends GeneralizingASTVisitor {
message.messagePieces.addAll(interpolation.pieces);
} on IntlMessageExtractionException catch (e) {
message = null;
- print("Error $e");
- print("Processing <$node>");
- _reportErrorLocation(node);
+ var err = new StringBuffer();
+ err.write("Error $e\n");
+ err.write("Processing <$node>\n");
+ err.write(_reportErrorLocation(node));
+ print(err);
+ warnings.add(err);
}
}
@@ -437,9 +458,12 @@ class PluralAndGenderVisitor extends SimpleASTVisitor {
message[arg.name.label.token.toString()] = interpolation.pieces;
} on IntlMessageExtractionException catch (e) {
message = null;
- print("Error $e");
- print("Processing <$node>");
- _reportErrorLocation(node);
+ var err = new StringBuffer();
+ err.write("Error $e");
+ err.write("Processing <$node>");
+ err.write(_reportErrorLocation(node));
+ print(err);
+ warnings.add(err);
}
}
var mainArg = node.argumentList.arguments.elements.firstWhere(
« no previous file with comments | « no previous file | pkg/intl/test/message_extraction/extract_to_json.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698