Index: utils/pub/validator/directory.dart |
diff --git a/utils/pub/validator/directory.dart b/utils/pub/validator/directory.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07ad933ce56b2ee4af3e2826ced8fa78854e094d |
--- /dev/null |
+++ b/utils/pub/validator/directory.dart |
@@ -0,0 +1,45 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library directory_validator; |
+ |
+import '../entrypoint.dart'; |
+import '../io.dart'; |
+import '../validator.dart'; |
+ |
+/// A validator that validates a package's top-level directories. |
+class DirectoryValidator extends Validator { |
+ DirectoryValidator(Entrypoint entrypoint) |
+ : super(entrypoint); |
+ |
+ static final _PLURAL_NAMES = ["tools", "tests", "docs", "examples"]; |
+ |
+ Future validate() { |
+ return listDir(entrypoint.root.dir).chain((dirs) { |
+ return Futures.wait(dirs.map((dir) { |
+ return dirExists(dir).transform((exists) { |
+ if (!exists) return; |
+ |
+ dir = basename(dir); |
+ if (_PLURAL_NAMES.contains(dir)) { |
+ // Cut off the "s" |
+ var singularName = dir.substring(0, dir.length - 1); |
+ warnings.add('Rename the top-level "$dir" directory to ' |
+ '"$singularName".\n' |
+ 'The Pub layout convention is to use singular directory ' |
+ 'names.\n' |
+ 'Plural names won\'t be correctly identified by Pub and other ' |
+ 'tools.'); |
Bob Nystrom
2013/01/03 23:18:54
How about:
''Rename the top-level "$dir" director
nweiz
2013/01/04 00:25:15
That doesn't really make sense for "doc", and I th
|
+ } |
+ |
+ if (dir.contains(new RegExp(r"^samples?$"))) { |
+ warnings.add('Rename the top-level "$dir" directory to "example".\n' |
+ 'This allows Pub to find your examples and create "packages" ' |
+ 'directories for them.\n'); |
+ } |
+ }); |
+ })); |
+ }); |
+ } |
+} |