Index: pkg/polymer/lib/transformer.dart |
diff --git a/pkg/polymer/lib/transformer.dart b/pkg/polymer/lib/transformer.dart |
index cdc13b9193dd7425881ef661acaaf87030830ee1..6bcfbbeba569ce143ddcddedb4a14fc12b1368f8 100644 |
--- a/pkg/polymer/lib/transformer.dart |
+++ b/pkg/polymer/lib/transformer.dart |
@@ -42,30 +42,61 @@ TransformOptions _parseSettings(BarbackSettings settings) { |
bool releaseMode = settings.mode == BarbackMode.RELEASE; |
bool jsOption = args['js']; |
bool csp = args['csp'] == true; // defaults to false |
- bool lint = args['lint'] != false; // defaults to true |
bool injectBuildLogs = |
!releaseMode && args['inject_build_logs_in_output'] != false; |
bool injectPlatformJs = args['inject_platform_js'] != false; |
return new TransformOptions( |
- entryPoints: readEntrypoints(args['entry_points']), |
+ entryPoints: readFileList(args['entry_points']), |
inlineStylesheets: _readInlineStylesheets(args['inline_stylesheets']), |
directlyIncludeJS: jsOption == null ? releaseMode : jsOption, |
contentSecurityPolicy: csp, |
releaseMode: releaseMode, |
- lint: lint, |
+ lint: _parseLintOption(args['lint']), |
injectBuildLogsInOutput: injectBuildLogs, |
injectPlatformJs: injectPlatformJs); |
} |
-readEntrypoints(value) { |
+// Lint option can be empty (all files), false, true, or a map indicating |
+// include/exclude files. |
+_parseLintOption(value) { |
+ var lint = null; |
+ if (value == null || value == true) return new LintOptions(); |
+ if (value == false) return new LintOptions.disabled(); |
+ if (value is Map && value.length == 1) { |
+ var key = value.keys.single; |
+ var files = readFileList(value[key]); |
+ if (key == 'include') { |
+ return new LintOptions.include(files); |
+ } else if (key == 'exclude') { |
+ return new LintOptions.exclude(files); |
+ } |
+ } |
+ |
+ // Any other case it is an error: |
+ print('Invalid value for "lint" in the polymer transformer. ' |
+ 'Expected one of the following: \n' |
+ ' lint: true # or\n' |
+ ' lint: false # or\n' |
+ ' lint: \n' |
+ ' include: \n' |
+ ' - file1 \n' |
+ ' - file2 # or \n' |
+ ' lint: \n' |
+ ' exclude: \n' |
+ ' - file1 \n' |
+ ' - file2 \n'); |
+ return new LintOptions(); |
+} |
+ |
+readFileList(value) { |
if (value == null) return null; |
- var entryPoints = []; |
+ var files = []; |
bool error; |
if (value is List) { |
- entryPoints = value; |
+ files = value; |
error = value.any((e) => e is! String); |
} else if (value is String) { |
- entryPoints = [value]; |
+ files = [value]; |
error = false; |
} else { |
error = true; |
@@ -73,7 +104,7 @@ readEntrypoints(value) { |
if (error) { |
print('Invalid value for "entry_points" in the polymer transformer.'); |
} |
- return entryPoints; |
+ return files; |
} |
Map<String, bool> _readInlineStylesheets(settingValue) { |
@@ -120,7 +151,7 @@ List<List<Transformer>> createDeployPhases( |
// TODO(sigmund): this should be done differently. We should lint everything |
// that is reachable and have the option to lint the rest (similar to how |
// dart2js can analyze reachable code or entire libraries). |
- var phases = options.lint ? [[new Linter(options)]] : []; |
+ var phases = options.lint.enabled ? [[new Linter(options)]] : []; |
phases.addAll([ |
[new ImportInliner(options)], |
[new ObservableTransformer()], |