diff --git a/package.json b/package.json index b0d80c2b4..ab5c169c2 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "parse-srcset": "ikatyang/parse-srcset#54eb9c1cb21db5c62b4d0e275d7249516df6f0ee", "please-upgrade-node": "3.2.0", "postcss": "8.1.3", - "postcss-less": "3.1.4", + "postcss-less": "4.0.0", "postcss-media-query-parser": "0.2.3", "postcss-scss": "3.0.2", "postcss-selector-parser": "2.2.3", diff --git a/src/language-css/parser-postcss.js b/src/language-css/parser-postcss.js index e6644a8a8..fe852aa15 100644 --- a/src/language-css/parser-postcss.js +++ b/src/language-css/parser-postcss.js @@ -302,7 +302,6 @@ function parseNestedCSS(node, options) { // Custom properties looks like declarations if ( - (options.parser === "css" || options.parser === "scss") && node.type === "css-decl" && typeof node.prop === "string" && node.prop.startsWith("--") && @@ -325,7 +324,9 @@ function parseNestedCSS(node, options) { let parse; if (options.parser === "scss") { parse = parseScss; - } else if (options.parser === "css") { + } else if (options.parser === "less") { + parse = parseLess; + } else { parse = parseCss; } let ast; diff --git a/tests/less/comments/__snapshots__/jsfmt.spec.js.snap b/tests/less/comments/__snapshots__/jsfmt.spec.js.snap index 84365651f..883269135 100644 --- a/tests/less/comments/__snapshots__/jsfmt.spec.js.snap +++ b/tests/less/comments/__snapshots__/jsfmt.spec.js.snap @@ -386,11 +386,11 @@ printWidth: 80 /* custom properties set & @apply rule */ :root { /* comments 192 */ - --centered /* comments 193 */ : /* comments 194 */ { + --centered/* comments 193 */ : /* comments 194 */ { display: flex; align-items: center; justify-content: center; - } + }; } ================================================================================ diff --git a/tests/less/custom-properties/__snapshots__/jsfmt.spec.js.snap b/tests/less/custom-properties/__snapshots__/jsfmt.spec.js.snap index 8bf9acbfe..0060b9c67 100644 --- a/tests/less/custom-properties/__snapshots__/jsfmt.spec.js.snap +++ b/tests/less/custom-properties/__snapshots__/jsfmt.spec.js.snap @@ -23,6 +23,20 @@ printWidth: 80 --without-semi: {color:red;} } +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-prop: blue; +} + +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-one-like-a-apply-rule: { + color:red; + }; +} + =====================================output===================================== /* http://tabatkins.github.io/specs/css-apply-rule/#defining */ @@ -31,16 +45,30 @@ printWidth: 80 background-color: hsl(120, 70%, 95%); border-radius: 4px; border: 1px solid var(--theme-color late); - } + }; --toolbar-title-theme: { color: green; - } + }; } :root { --without-semi: { color: red; - } + }; +} + +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-prop: blue; +} + +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-one-like-a-apply-rule: { + color:red; + }; } ================================================================================ diff --git a/tests/less/custom-properties/apply-rule.less b/tests/less/custom-properties/apply-rule.less index 1ea189f62..56c04e2c2 100644 --- a/tests/less/custom-properties/apply-rule.less +++ b/tests/less/custom-properties/apply-rule.less @@ -14,3 +14,17 @@ :root { --without-semi: {color:red;} } + +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-prop: blue; +} + +:root { + --like-a-apply-rule: { + color:red;} /* no semi here*/ + --another-one-like-a-apply-rule: { + color:red; + }; +} diff --git a/tests/less/postcss-8-improment/__snapshots__/jsfmt.spec.js.snap b/tests/less/postcss-8-improment/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..075f3bd93 --- /dev/null +++ b/tests/less/postcss-8-improment/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,71 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`empty-props.less format 1`] = ` +====================================options===================================== +parsers: ["less"] +printWidth: 80 + | printWidth +=====================================input====================================== +:root { + --empty:; + --one-space: ; + --two-space: ; +--many-space: ; +} + +=====================================output===================================== +:root { + --empty:; + --one-space: ; + --two-space: ; + --many-space: ; +} + +================================================================================ +`; + +exports[`test.less format 1`] = ` +====================================options===================================== +parsers: ["less"] +printWidth: 80 + | printWidth +=====================================input====================================== +/* +This test is copied from \`postcss@8\` release note + +https://github.com/postcss/postcss/releases/tag/8.0.0 +*/ + +:root { + --empty: ; + --JSON: [1, "2", {"three": {"a":1}}, [4]]; + --javascript: function(rule) { console.log(rule) }; +} + +@supports (--element(".minwidth", { "minWidth": 300 })) { + [--self] { + background: greenyellow; + } +} + +=====================================output===================================== +/* +This test is copied from \`postcss@8\` release note + +https://github.com/postcss/postcss/releases/tag/8.0.0 +*/ + +:root { + --empty: ; + --JSON: [1, "2", {"three": {"a": 1}}, [4]]; + --javascript: function(rule) {console.log(rule)}; +} + +@supports (--element(".minwidth", {"minWidth": 300})) { + [--self] { + background: greenyellow; + } +} + +================================================================================ +`; diff --git a/tests/less/postcss-8-improment/empty-props.less b/tests/less/postcss-8-improment/empty-props.less new file mode 100644 index 000000000..172a41d5f --- /dev/null +++ b/tests/less/postcss-8-improment/empty-props.less @@ -0,0 +1,6 @@ +:root { + --empty:; + --one-space: ; + --two-space: ; +--many-space: ; +} diff --git a/tests/less/postcss-8-improment/jsfmt.spec.js b/tests/less/postcss-8-improment/jsfmt.spec.js new file mode 100644 index 000000000..73b809901 --- /dev/null +++ b/tests/less/postcss-8-improment/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["less"]); diff --git a/tests/misc/errors/less/postcss-8-improment.less b/tests/less/postcss-8-improment/test.less similarity index 100% rename from tests/misc/errors/less/postcss-8-improment.less rename to tests/less/postcss-8-improment/test.less diff --git a/tests/misc/errors/less/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/less/__snapshots__/jsfmt.spec.js.snap index 51a8241a9..ed13d724b 100644 --- a/tests/misc/errors/less/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/errors/less/__snapshots__/jsfmt.spec.js.snap @@ -29,17 +29,6 @@ exports[`open-sigle-quote.less error test 1`] = ` 4 | " `; -exports[`postcss-8-improment.less error test 1`] = ` -"CssSyntaxError: Missed semicolon (9:20) - 7 | :root { - 8 | --empty: ; -> 9 | --JSON: [1, \\"2\\", {\\"three\\": {\\"a\\":1}}, [4]]; - | ^ - 10 | --javascript: function(rule) { console.log(rule) }; - 11 | } - 12 | " -`; - exports[`scss-syntax.scss error test 1`] = ` "CssSyntaxError: Unknown word (1:15) > 1 | a {content: #{$foo}} diff --git a/yarn.lock b/yarn.lock index eb05b3f10..56f40e0b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2155,7 +2155,7 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5843,12 +5843,12 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-less@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== +postcss-less@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-4.0.0.tgz#88ad544041750023650f249a896930a741506390" + integrity sha512-wKT2JuR3dTBgtQ61HAyqx/uPlYgkf4OTlYcZaqLWjW/hMIIV58d79ab03oilkn7ob84lOd9W1oBB1Pu7bmzUYQ== dependencies: - postcss "^7.0.14" + postcss "^8.1.2" postcss-media-query-parser@0.2.3: version "0.2.3" @@ -5880,7 +5880,7 @@ postcss-values-parser@2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@8.1.3, postcss@^8.1.0: +postcss@8.1.3, postcss@^8.1.0, postcss@^8.1.2: version "8.1.3" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.3.tgz#b25138b872ca9f9512c218d9d57ebb59015a9c39" integrity sha512-AKsHGqd7HmXmL/EgyAjI4Gx719A5yQdt9HzyXrI8M/hzxfumecYS95kfvIt40UZqPVNoEt0Va1M3PG54XtNPbg== @@ -5890,15 +5890,6 @@ postcss@8.1.3, postcss@^8.1.0: nanoid "^3.1.15" source-map "^0.6.1" -postcss@^7.0.14: - version "7.0.34" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" - integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -6839,13 +6830,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"