From d12b3a2fe89de70cb9e536dfcf516f1536c4bf6b Mon Sep 17 00:00:00 2001 From: MonamAgarwal Date: Wed, 1 Jun 2016 15:49:47 +0100 Subject: [PATCH] Edit pruneCss flag to allow printing pruned css instead of overwriting. --- README.md | 2 +- example/angular1/pubspec.yaml | 2 +- example/angular2/pubspec.yaml | 2 +- lib/eager_transformer.dart | 7 ++++++- lib/src/css_pruning/css_pruning.dart | 17 ++++++++++------- lib/src/css_pruning/css_utils.dart | 3 +++ lib/src/css_pruning/settings.dart | 6 ++++-- lib/src/css_pruning/transformer.dart | 5 ++++- 8 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 lib/src/css_pruning/css_utils.dart diff --git a/README.md b/README.md index 105fd2a..3ba583d 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ Examples: see [example/angular1](https://github.com/google/dart-scissors/tree/ma ``` Valid settings: -- `pruneCss` (boolean): by default, `true` in `release` only +- `pruneCss` (`skip` or `print` or `overwrite`): by default, `overwrite` in `release` only - `imageInlining`: default is `linkInlinedImages` in `debug`, `inlineInlinedImages` in `release` - `inlineAllUrls`: treats `url` as `inline-image` - `inlineInlinedImages`: simply honours `inline-image` diff --git a/example/angular1/pubspec.yaml b/example/angular1/pubspec.yaml index d60a253..b0755dd 100644 --- a/example/angular1/pubspec.yaml +++ b/example/angular1/pubspec.yaml @@ -15,7 +15,7 @@ transformers: cssJanusPath: ${PWD}/../../.dependencies/cssjanus/cssjanus.py release: imageInlining: inlineAllUrls - # pruneCss: false + # pruningScheme: skip # optimizeSvg: false # optimizePng: false compiledCssExtension: replace diff --git a/example/angular2/pubspec.yaml b/example/angular2/pubspec.yaml index 678dedc..3f45460 100644 --- a/example/angular2/pubspec.yaml +++ b/example/angular2/pubspec.yaml @@ -11,7 +11,7 @@ transformers: # - scissors/eager_transformer - scissors: verbose: true - # pruneCss: false + # pruningScheme: skip # optimizeSvg: false # optimizePng: false - angular2/transform/codegen diff --git a/lib/eager_transformer.dart b/lib/eager_transformer.dart index caf8f90..3c8567a 100644 --- a/lib/eager_transformer.dart +++ b/lib/eager_transformer.dart @@ -16,6 +16,7 @@ library scissors.scissors_transformer; import 'package:barback/barback.dart'; import 'src/css_mirroring/transformer.dart'; +import 'src/css_pruning/css_utils.dart' show PruningScheme; import 'src/css_pruning/transformer.dart'; import 'src/image_inlining/transformer.dart'; import 'src/png_optimization/transformer.dart'; @@ -46,7 +47,11 @@ List> _createPhases(_ScissorsSettings settings) { : null, settings.compileSass.value ? new SassCTransformer(settings) : null ], - [settings.pruneCss.value ? new CssPruningTransformer(settings) : null], + [ + settings.pruningScheme.value != PruningScheme.skip + ? new CssPruningTransformer(settings) + : null + ], [ settings.imageInlining.value != ImageInliningMode.disablePass ? new ImageInliningTransformer(settings) diff --git a/lib/src/css_pruning/css_pruning.dart b/lib/src/css_pruning/css_pruning.dart index d4265e6..0e5ca57 100644 --- a/lib/src/css_pruning/css_pruning.dart +++ b/lib/src/css_pruning/css_pruning.dart @@ -32,6 +32,7 @@ import 'rule_set_index.dart'; import 'template_extractor.dart' show extractTemplates; import 'usage_collector.dart'; import 'transformer.dart' show CssPruningSettings; +import 'css_utils.dart' show PruningScheme; Future findHtmlTemplate(Transform transform, AssetId cssAssetId) async { try { @@ -69,7 +70,6 @@ dropUnusedCssRules( SourceFile cssSourceFile, String htmlTemplate) { hacks.useCssLib(); - final StyleSheet cssTree = new css_parser.Parser(cssSourceFile, transaction.original).parse(); final List htmlTrees = @@ -89,15 +89,18 @@ dropUnusedCssRules( final fileLength = transaction.file.length; topLevelsToDropWithIndex.forEach((TreeNode topLevel, int i) { - if (settings.verbose.value) { + if (settings.verbose.value || + settings.pruningScheme.value == PruningScheme.print) { transform.logger.info("Dropping unused CSS rule: " "${_printCss(new StyleSheet([topLevel], null))}"); } - final start = topLevel.span.start.offset; - final end = i == topLevels.length - 1 - ? fileLength - : topLevels[i + 1].span.start.offset; - transaction.edit(start, end, ''); + if (settings.pruningScheme.value == PruningScheme.overwrite) { + final start = topLevel.span.start.offset; + final end = i == topLevels.length - 1 + ? fileLength + : topLevels[i + 1].span.start.offset; + transaction.edit(start, end, ''); + } }); } diff --git a/lib/src/css_pruning/css_utils.dart b/lib/src/css_pruning/css_utils.dart new file mode 100644 index 0000000..04857f0 --- /dev/null +++ b/lib/src/css_pruning/css_utils.dart @@ -0,0 +1,3 @@ +library scissors.src.css_pruning.css_utils; + +enum PruningScheme { skip, print, overwrite } diff --git a/lib/src/css_pruning/settings.dart b/lib/src/css_pruning/settings.dart index 7bd858d..02eb6ec 100644 --- a/lib/src/css_pruning/settings.dart +++ b/lib/src/css_pruning/settings.dart @@ -16,8 +16,10 @@ part of scissors.src.css_pruning.transformer; abstract class CssPruningSettings { Setting get verbose; - final pruneCss = - new Setting('pruneCss', debugDefault: false, releaseDefault: true); + final pruningScheme = new Setting('pruningScheme', + debugDefault: PruningScheme.skip, + releaseDefault: PruningScheme.overwrite, + parser: new EnumParser(PruningScheme.values).parse); // final bidiCss = new Setting('bidiCss', // comment: diff --git a/lib/src/css_pruning/transformer.dart b/lib/src/css_pruning/transformer.dart index a8f51d0..0bd948c 100644 --- a/lib/src/css_pruning/transformer.dart +++ b/lib/src/css_pruning/transformer.dart @@ -19,11 +19,13 @@ import 'package:barback/barback.dart'; import 'package:source_maps/refactor.dart'; import 'package:source_span/source_span.dart'; +import '../utils/enum_parser.dart'; import '../utils/path_utils.dart'; import '../utils/settings_base.dart'; import '../utils/file_skipping.dart'; import '../utils/delta_format.dart'; import 'css_pruning.dart'; +import 'css_utils.dart'; part 'settings.dart'; @@ -39,7 +41,8 @@ class CssPruningTransformer extends Transformer final String allowedExtensions = ".css .css.map"; @override - bool isPrimary(AssetId id) => _settings.pruneCss.value && super.isPrimary(id); + bool isPrimary(AssetId id) => + _settings.pruningScheme != PruningScheme.skip && super.isPrimary(id); @override declareOutputs(DeclaringTransform transform) {