From bbaed3f3eed53f278a43c5550b2c0f35bca23cdd Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Wed, 18 Jan 2017 18:02:16 +0100 Subject: [PATCH] Adds `overrideProperties` level 2 optimizations flag. Why: * Previously property overriding was controlled via `mergeIntoShorthands` flag which was confusing. --- README.md | 2 ++ bin/cleancss | 1 + lib/optimizer/level-2/properties/optimize.js | 2 +- lib/options/optimization-level.js | 1 + test/binary-test.js | 2 +- .../level-2/properties/longhand-overriding-test.js | 5 +++-- .../level-2/properties/merge-into-shorthands-test.js | 3 ++- test/optimizer/level-2/properties/optimize-test.js | 1 + .../level-2/properties/override-properties-test.js | 3 ++- test/optimizer/level-2/reduce-non-adjacent-test.js | 2 +- test/options/optimization-level-test.js | 8 ++++++++ 11 files changed, 23 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 25e8a812..3d21d434 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,7 @@ cleancss -O2 all:off;removeDuplicateRules:on one.css # `mergeMedia` controls `@media` merging; defaults to `on` # `mergeNonAdjacentRules` controls non-adjacent rule merging; defaults to `on` # `mergeSemantically` controls semantic merging; defaults to `off` +# `overrideProperties` controls property overriding based on understandability; defaults to `on` # `reduceNonAdjacentRules` controls non-adjacent rule reducing; defaults to `on` # `removeDuplicateFontRules` controls duplicate `@font-face` removing; defaults to `on` # `removeDuplicateMediaBlocks` controls duplicate `@media` removing; defaults to `on` @@ -308,6 +309,7 @@ new CleanCSS({ mergeMedia: true, // controls `@media` merging; defaults to true mergeNonAdjacentRules: true, // controls non-adjacent rule merging; defaults to true mergeSemantically: false, // controls semantic merging; defaults to false + overrideProperties: true, // controls property overriding based on understandability; defaults to true reduceNonAdjacentRules: true, // controls non-adjacent rule reducing; defaults to true removeDuplicateFontRules: true, // controls duplicate `@font-face` removing; defaults to true removeDuplicateMediaBlocks: true, // controls duplicate `@media` removing; defaults to true diff --git a/bin/cleancss b/bin/cleancss index 2d174c92..a2b2cc99 100755 --- a/bin/cleancss +++ b/bin/cleancss @@ -91,6 +91,7 @@ commands.on('--help', function () { console.log(' %> # `mergeMedia` controls `@media` merging; defaults to `on`'); console.log(' %> # `mergeNonAdjacentRules` controls non-adjacent rule merging; defaults to `on`'); console.log(' %> # `mergeSemantically` controls semantic merging; defaults to `off`'); + console.log(' %> # `overrideProperties` controls property overriding based on understandability; defaults to `on`'); console.log(' %> # `reduceNonAdjacentRules` controls non-adjacent rule reducing; defaults to `on`'); console.log(' %> # `removeDuplicateFontRules` controls duplicate `@font-face` removing; defaults to `on`'); console.log(' %> # `removeDuplicateMediaBlocks` controls duplicate `@media` removing; defaults to `on`'); diff --git a/lib/optimizer/level-2/properties/optimize.js b/lib/optimizer/level-2/properties/optimize.js index 4f790b2f..250b05fc 100644 --- a/lib/optimizer/level-2/properties/optimize.js +++ b/lib/optimizer/level-2/properties/optimize.js @@ -24,7 +24,7 @@ function optimizeProperties(properties, withOverriding, withMerging, context) { } } - if (withOverriding && context.options.level[OptimizationLevel.Two].mergeIntoShorthands) { + if (withOverriding && context.options.level[OptimizationLevel.Two].overrideProperties) { overrideProperties(_properties, withMerging, context.options.compatibility, context.validator); } diff --git a/lib/options/optimization-level.js b/lib/options/optimization-level.js index c634e95f..33948bb1 100644 --- a/lib/options/optimization-level.js +++ b/lib/options/optimization-level.js @@ -38,6 +38,7 @@ DEFAULTS[OptimizationLevel.Two] = { mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, + overrideProperties: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, diff --git a/test/binary-test.js b/test/binary-test.js index 90b05d99..c312b2eb 100644 --- a/test/binary-test.js +++ b/test/binary-test.js @@ -468,7 +468,7 @@ vows.describe('./bin/cleancss') }) .addBatch({ 'shorthand merging': { - 'of (yet) unmergeable properties': pipedContext('a{background:url(image.png);background-color:red}', '-O2 mergeIntoShorthands:off', { + 'of mergeable properties with overriding off': pipedContext('a{background:url(image.png);background-color:red}', '-O2 overrideProperties:off', { 'gets right result': function (error, stdout) { assert.equal(stdout, 'a{background:url(image.png);background-color:red}'); } diff --git a/test/optimizer/level-2/properties/longhand-overriding-test.js b/test/optimizer/level-2/properties/longhand-overriding-test.js index 7e696e51..65714210 100644 --- a/test/optimizer/level-2/properties/longhand-overriding-test.js +++ b/test/optimizer/level-2/properties/longhand-overriding-test.js @@ -20,10 +20,11 @@ function _optimize(source) { compatibility: compat, level: { 2: { + mergeIntoShorthands: true, mergeMedia: true, - restructureRules: true, mergeSemantically: false, - mergeIntoShorthands: true + overrideProperties: true, + restructureRules: true } } }; diff --git a/test/optimizer/level-2/properties/merge-into-shorthands-test.js b/test/optimizer/level-2/properties/merge-into-shorthands-test.js index 2d7954fb..30642bb2 100644 --- a/test/optimizer/level-2/properties/merge-into-shorthands-test.js +++ b/test/optimizer/level-2/properties/merge-into-shorthands-test.js @@ -20,7 +20,8 @@ function _optimize(source) { compatibility: compat, level: { 2: { - mergeIntoShorthands: true + mergeIntoShorthands: true, + overrideProperties: true } } }; diff --git a/test/optimizer/level-2/properties/optimize-test.js b/test/optimizer/level-2/properties/optimize-test.js index 8dca079b..c3cd879c 100644 --- a/test/optimizer/level-2/properties/optimize-test.js +++ b/test/optimizer/level-2/properties/optimize-test.js @@ -17,6 +17,7 @@ function _optimize(source, compatibilityOptions) { mergeIntoShorthands: true, mergeMedia: false, mergeSemantically: false, + overrideProperties: true, restructureRules: false } } diff --git a/test/optimizer/level-2/properties/override-properties-test.js b/test/optimizer/level-2/properties/override-properties-test.js index f06c5420..a4858248 100644 --- a/test/optimizer/level-2/properties/override-properties-test.js +++ b/test/optimizer/level-2/properties/override-properties-test.js @@ -20,7 +20,8 @@ function _optimize(source, compat) { compatibility: compat, level: { 2: { - mergeIntoShorthands: true + mergeIntoShorthands: true, + overrideProperties: true } } }; diff --git a/test/optimizer/level-2/reduce-non-adjacent-test.js b/test/optimizer/level-2/reduce-non-adjacent-test.js index ecaeeade..41b88cd4 100644 --- a/test/optimizer/level-2/reduce-non-adjacent-test.js +++ b/test/optimizer/level-2/reduce-non-adjacent-test.js @@ -132,7 +132,7 @@ vows.describe('remove duplicates') 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}', 'a{margin:0}.one{color:red}a,p{color:red;padding:0}' ] - }, { level: { 2: { all: false, reduceNonAdjacentRules: true, mergeIntoShorthands: true } } }) + }, { level: { 2: { all: false, reduceNonAdjacentRules: true, mergeIntoShorthands: true, overrideProperties: true } } }) ) .addBatch( optimizerContext('level 2 off', { diff --git a/test/options/optimization-level-test.js b/test/options/optimization-level-test.js index a4564ada..09072566 100644 --- a/test/options/optimization-level-test.js +++ b/test/options/optimization-level-test.js @@ -129,6 +129,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, + overrideProperties: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, @@ -189,6 +190,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, + overrideProperties: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, @@ -308,6 +310,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: false, + overrideProperties: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, @@ -357,6 +360,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: false, + overrideProperties: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, @@ -441,6 +445,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: false, mergeNonAdjacentRules: true, mergeSemantically: true, + overrideProperties: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, @@ -490,6 +495,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: false, mergeNonAdjacentRules: true, mergeSemantically: true, + overrideProperties: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, @@ -539,6 +545,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: true, + overrideProperties: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, @@ -588,6 +595,7 @@ vows.describe(optimizationLevelFrom) mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: true, + overrideProperties: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, -- 2.34.1