Fixes #886 - better multi pseudo class / element merging.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Thu, 16 Feb 2017 15:44:02 +0000 (16:44 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Thu, 16 Feb 2017 19:25:31 +0000 (20:25 +0100)
commit0b4ea6bb6de933ee10876ba0fe8543c3e8bc60ce
treefba984dc62e0f3112fb6d64df17eeb679bb4c977
parenta5a666fd23ade1469c20120b975ec3ea315bf324
Fixes #886 - better multi pseudo class / element merging.

Why:

* 4.0 introduced a stricter mergeability rules, however in some
  cases merging is still possible but harder to determine;
* tests suggested all multi pseudo class / element rules can be
  merged unless those contain more than one of the following:
  `:after`, `::after`, `:before`, `::before`, `:first-letter`,
  `::first-letter`, `:first-line`, `::first-line`, or `:lang`;
* there's also a new compatibility switch,
  `{ compatibility: { selectors: { multiplePseudoMerging: false } } }`
  which, if set to false, disables merging for all rules with
  multiple pseudo classes / elements.
History.md
README.md
lib/optimizer/level-2/is-mergeable.js
lib/optimizer/level-2/merge-adjacent.js
lib/optimizer/level-2/merge-non-adjacent-by-body.js
lib/optimizer/level-2/reduce-non-adjacent.js
lib/optimizer/level-2/restructure.js
lib/options/compatibility.js
test/optimizer/level-2/is-mergeable-test.js
test/optimizer/level-2/merge-adjacent-test.js
test/options/compatibility-test.js