From cb98871a805fb8ebb9838020c803b3c68127d957 Mon Sep 17 00:00:00 2001 From: "Mr.Z" Date: Thu, 7 Dec 2023 16:44:54 +0800 Subject: [PATCH] feat(stylelint): deprecated stylistic rules stylelint/stylelint#6342 stylelint/stylelint#6409 --- packages/stylelint/__tests__/index.spec.ts | 67 ++++++++++++++++++++-- packages/stylelint/index.js | 7 +-- packages/stylelint/package.json | 2 +- pnpm-lock.yaml | 63 +++++++++++++++++++- 4 files changed, 124 insertions(+), 15 deletions(-) diff --git a/packages/stylelint/__tests__/index.spec.ts b/packages/stylelint/__tests__/index.spec.ts index 044a30c..fd3153b 100644 --- a/packages/stylelint/__tests__/index.spec.ts +++ b/packages/stylelint/__tests__/index.spec.ts @@ -9,20 +9,77 @@ const lint = async (text: string) => { return resultObject; }; -describe('index.ts', () => { +describe('index.js', () => { it('success', async () => { expect.hasAssertions(); try { - const data = await lint(`a { color: red; }\n`); + const data = await lint(`a { color: inherit; }\n`); expect(data.errored).toBe(false); } catch (e) { console.log(e); } }); - it('declaration-block-trailing-semicolon', async () => { + it('single line comments', async () => { expect.hasAssertions(); - const data = await lint(`a { color: red }`); - expect(data.output).toMatch('declaration-block-trailing-semicolon'); + const data = await lint(`// allow`); + expect(data.errored).toBe(false); + }); + + it('stylelint-config-standard-scss', async () => { + expect.hasAssertions(); + const data = await lint(` + @use 'sass:meta'; + + @function color($value) { + @return if(meta.type-of($value) == 'string', $value, 'inherit'); + } + + a { color: color(1); } + `); + expect(data.errored).toBe(false); + }); + + it('unit-no-unknown, rpx', async () => { + expect.hasAssertions(); + const data = await lint(`a { font-size: 12rpx; }`); + expect(data.errored).toBe(false); + }); + + it('unit-no-unknown, xxx disallow', async () => { + expect.hasAssertions(); + const data = await lint(`a { font-size: 12xxx; }`); + expect(data.errored).toBe(true); + }); + + it('stylelint-order', async () => { + expect.hasAssertions(); + const data = await lint(`a { bottom: 2px; top: 1px; }`); + expect(data.output).toMatch('Expected \\"top\\" to come before \\"bottom\\" (order/properties-order)'); + }); +}); + +/** + * https://stylelint.io/migration-guide/to-15 + * 代码风格的提示已经移除, 现在都不会校正了; + * 包含 + * 1. 结尾需要分号 + * 2. 缩进 + * 3. .... + */ +describe('deprecated', () => { + it('semicolon', async () => { + expect.hasAssertions(); + const data = await lint(`a { color: inherit }`); + expect(data.errored).toBe(false); + }); + + it('indentation', async () => { + expect.hasAssertions(); + const data = await lint(`a {\n color: inherit \n}`); + expect(data.errored).toBe(false); }); }); + + + diff --git a/packages/stylelint/index.js b/packages/stylelint/index.js index e62621b..1d4f6a2 100644 --- a/packages/stylelint/index.js +++ b/packages/stylelint/index.js @@ -1,9 +1,8 @@ module.exports = { root: true, plugins: ['stylelint-order'], - extends: ['stylelint-config-standard'], + extends: ['stylelint-config-standard-scss'], rules: { - "indentation": "tab", 'selector-pseudo-class-no-unknown': [ true, { @@ -32,12 +31,8 @@ module.exports = { ], 'no-empty-source': null, 'named-grid-areas-no-invalid': null, - 'unicode-bom': 'never', 'no-descending-specificity': null, 'font-family-no-missing-generic-family-keyword': null, - 'declaration-colon-space-after': 'always-single-line', - 'declaration-colon-space-before': 'never', - 'declaration-block-trailing-semicolon': 'always', 'rule-empty-line-before': [ 'always', { diff --git a/packages/stylelint/package.json b/packages/stylelint/package.json index bb42108..c351743 100644 --- a/packages/stylelint/package.json +++ b/packages/stylelint/package.json @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "stylelint-config-standard": "^34.0.0", + "stylelint-config-standard-scss": "^11.1.0", "stylelint-order": "^6.0.3" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 492e53a..39499b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -293,9 +293,9 @@ importers: packages/stylelint: dependencies: - stylelint-config-standard: - specifier: ^34.0.0 - version: 34.0.0(stylelint@15.11.0) + stylelint-config-standard-scss: + specifier: ^11.1.0 + version: 11.1.0(postcss@8.4.32)(stylelint@15.11.0) stylelint-order: specifier: ^6.0.3 version: 6.0.3(stylelint@15.11.0) @@ -5541,6 +5541,10 @@ packages: resolve: 1.22.8 dev: false + /postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + dev: false + /postcss-merge-longhand@6.0.0(postcss@8.4.32): resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==} engines: {node: ^14 || ^16 || >=18.0} @@ -5742,6 +5746,15 @@ packages: dependencies: postcss: 8.4.32 + /postcss-scss@4.0.9(postcss@8.4.32): + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + dependencies: + postcss: 8.4.32 + dev: false + /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} @@ -6463,6 +6476,22 @@ packages: postcss-selector-parser: 6.0.13 dev: false + /stylelint-config-recommended-scss@13.1.0(postcss@8.4.32)(stylelint@15.11.0): + resolution: {integrity: sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.10.0 + peerDependenciesMeta: + postcss: + optional: true + dependencies: + postcss: 8.4.32 + postcss-scss: 4.0.9(postcss@8.4.32) + stylelint: 15.11.0(typescript@5.3.2) + stylelint-config-recommended: 13.0.0(stylelint@15.11.0) + stylelint-scss: 5.3.1(stylelint@15.11.0) + dev: false + /stylelint-config-recommended@13.0.0(stylelint@15.11.0): resolution: {integrity: sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -6472,6 +6501,21 @@ packages: stylelint: 15.11.0(typescript@5.3.2) dev: false + /stylelint-config-standard-scss@11.1.0(postcss@8.4.32)(stylelint@15.11.0): + resolution: {integrity: sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.10.0 + peerDependenciesMeta: + postcss: + optional: true + dependencies: + postcss: 8.4.32 + stylelint: 15.11.0(typescript@5.3.2) + stylelint-config-recommended-scss: 13.1.0(postcss@8.4.32)(stylelint@15.11.0) + stylelint-config-standard: 34.0.0(stylelint@15.11.0) + dev: false + /stylelint-config-standard@34.0.0(stylelint@15.11.0): resolution: {integrity: sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -6492,6 +6536,19 @@ packages: stylelint: 15.11.0(typescript@5.3.2) dev: false + /stylelint-scss@5.3.1(stylelint@15.11.0): + resolution: {integrity: sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + dependencies: + known-css-properties: 0.29.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.1 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + stylelint: 15.11.0(typescript@5.3.2) + dev: false + /stylelint@15.11.0(typescript@5.3.2): resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} engines: {node: ^14.13.1 || >=16.0.0}