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

Side by Side Diff: lib/src/intl_message.dart

Issue 1244843002: Allow ClassName_methodName for a message name, easier to disambiguate duplicates (Closed) Base URL: https://github.com/dart-lang/intl.git@master
Patch Set: Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « lib/intl.dart ('k') | pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * This provides classes to represent the internal structure of the 6 * This provides classes to represent the internal structure of the
7 * arguments to `Intl.message`. It is used when parsing sources to extract 7 * arguments to `Intl.message`. It is used when parsing sources to extract
8 * messages or to generate code for message substitution. Normal programs 8 * messages or to generate code for message substitution. Normal programs
9 * using Intl would not import this library. 9 * using Intl would not import this library.
10 * 10 *
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 var messageName = arguments.firstWhere((eachArg) => 86 var messageName = arguments.firstWhere((eachArg) =>
87 eachArg is NamedExpression && eachArg.name.label.name == 'name', 87 eachArg is NamedExpression && eachArg.name.label.name == 'name',
88 orElse: () => null); 88 orElse: () => null);
89 if (messageName == null) { 89 if (messageName == null) {
90 return "The 'name' argument for Intl.message must be specified"; 90 return "The 'name' argument for Intl.message must be specified";
91 } 91 }
92 if (messageName.expression is! SimpleStringLiteral) { 92 if (messageName.expression is! SimpleStringLiteral) {
93 return "The 'name' argument for Intl.message must be a simple string " 93 return "The 'name' argument for Intl.message must be a simple string "
94 "literal."; 94 "literal.";
95 } 95 }
96 if (outerName != null && outerName != messageName.expression.value) { 96 var hasOuterName = outerName != null;
97 return "The 'name' argument for Intl.message must match " 97 var givenName = messageName.expression.value;
98 "the name of the containing function (" 98 var simpleMatch = outerName == givenName;
99 "'${messageName.expression.value}' vs. '$outerName')"; 99 ClassDeclaration classNode(n) {
100 if (n == null) return null;
101 if (n is ClassDeclaration) return n;
102 return classNode(n.parent);
103 }
104 var classDeclaration = classNode(node);
105 var classPlusMethod = classDeclaration == null
106 ? null
107 : "${classDeclaration.name.token.toString()}_$outerName";
108 var classMatch = classPlusMethod != null && (givenName == classPlusMethod);
109 if (!(hasOuterName && (simpleMatch || classMatch))) {
110 return "The 'name' argument for Intl.message must match either"
111 "the name of the containing function or <className>_<methodName> ("
112 "'$givenName' vs. '$outerName')";
100 } 113 }
101 var simpleArguments = arguments.where((each) => each is NamedExpression && 114 var simpleArguments = arguments.where((each) => each is NamedExpression &&
102 ["desc", "name"].contains(each.name.label.name)); 115 ["desc", "name"].contains(each.name.label.name));
103 var values = simpleArguments.map((each) => each.expression).toList(); 116 var values = simpleArguments.map((each) => each.expression).toList();
104 for (var arg in values) { 117 for (var arg in values) {
105 if (arg is! StringLiteral) { 118 if (arg is! StringLiteral) {
106 return ("Intl.message arguments must be string literals: $arg"); 119 return ("Intl.message arguments must be string literals: $arg");
107 } 120 }
108 } 121 }
109 return null; 122 return null;
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 out.write('('); 758 out.write('(');
746 out.write(mainArgument); 759 out.write(mainArgument);
747 var args = codeAttributeNames; 760 var args = codeAttributeNames;
748 out.write(", {"); 761 out.write(", {");
749 args.fold(out, 762 args.fold(out,
750 (buffer, arg) => buffer..write("'$arg': '${this[arg].toCode()}', ")); 763 (buffer, arg) => buffer..write("'$arg': '${this[arg].toCode()}', "));
751 out.write("})}"); 764 out.write("})}");
752 return out.toString(); 765 return out.toString();
753 } 766 }
754 } 767 }
OLDNEW
« no previous file with comments | « lib/intl.dart ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698