linter-bundle 7.10.0 → 7.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.linter-bundle.js CHANGED
@@ -16,7 +16,7 @@ export default {
16
16
  basePath: '.',
17
17
  allowed: [
18
18
  '.git/**',
19
- '.github/FUNDING.yml',
19
+ '.github/**',
20
20
  '.vscode/settings.json',
21
21
  `eslint/rules/${snippets.kebabCase}.{js,mjs,md}`,
22
22
  `eslint/rules/helper/${snippets.kebabCase}.{js,mjs,md}`,
package/CHANGELOG.md CHANGED
@@ -6,7 +6,60 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- [Show all code changes](https://github.com/jens-duttke/linter-bundle/compare/v7.10.0...HEAD)
9
+ [Show all code changes](https://github.com/jens-duttke/linter-bundle/compare/v7.12.0...HEAD)
10
+
11
+ ## [7.12.0] - 2026-02-20
12
+
13
+ ### Breaking changes
14
+
15
+ - [general] Drop support for Node.js versions less than 20.19.0, 22.0.0-22.12.x as some of the dependencies are not supporting them anymore
16
+ - [stylelint] Replaced `stylelint-use-logical-spec` with [`stylelint-use-logical`](https://github.com/csstools/stylelint-use-logical). The rule name changed from `liberty/use-logical-spec` to `csstools/use-logical`.
17
+
18
+ ### Changed
19
+
20
+ - [eslint] Updated `@stylistic/eslint-plugin` from `5.6.1` to `5.9.0`
21
+ - [eslint] Updated `eslint` from `9.39.1` to `9.39.3`
22
+ - [eslint] Updated `eslint-plugin-jest` from `29.1.0` to `29.15.0`
23
+ - [eslint] Updated `eslint-plugin-jsdoc` from `61.3.0` to `62.7.0`
24
+ - [eslint] Updated `eslint-plugin-n` from `17.23.1` to `17.24.0`
25
+ - [eslint] Updated `eslint-plugin-unicorn` from `62.0.0` to `63.0.0`
26
+ - [eslint] Updated `globals` from `16.5.0` to `17.3.0`
27
+ - [eslint] Updated `typescript-eslint` from `8.47.0` to `8.56.0`
28
+ - [stylelint] Updated `stylelint` from `16.25.0` to `17.3.0`
29
+ - [stylelint] Updated `stylelint-declaration-block-no-ignored-properties` from `2.8.0` to `3.0.0`
30
+ - [stylelint] Updated `stylelint-high-performance-animation` from `1.11.0` to `2.0.0`
31
+ - [stylelint] Updated `stylelint-order` from `7.0.0` to `7.0.1`
32
+ - [stylelint] Updated `stylelint-scss` from `6.12.1` to `7.0.0`
33
+ - [markdown] Updated `markdownlint-cli` from `0.46.0` to `0.47.0`
34
+ - [eslint] Make use of new [`jsdoc/require-rejects`](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-rejects.md) rule
35
+ - [eslint] Make use of new [`unicorn/isolated-functions`](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/isolated-functions.md) rule
36
+ - [eslint] Make use of new [`@typescript-eslint/no-unused-private-class-members`](https://typescript-eslint.io/rules/no-unused-private-class-members/) rule
37
+ - [eslint] Make use of new [`@typescript-eslint/no-useless-default-assignment`](https://typescript-eslint.io/rules/no-useless-default-assignment/) rule
38
+ - [eslint] Make use of new [`jest/no-error-equal`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/no-error-equal.md) rule
39
+ - [eslint] Make use of new [`jest/no-unneeded-async-expect-function`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/no-unneeded-async-expect-function.md) rule
40
+ - [eslint] Make use of new [`jest/no-unnecessary-assertion`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/no-unnecessary-assertion.md) rule
41
+ - [eslint] Make use of new [`jest/prefer-mock-return-shorthand`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/prefer-mock-return-shorthand.md) rule
42
+ - [eslint] Make use of new [`jest/prefer-to-have-been-called`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/prefer-to-have-been-called.md) rule
43
+ - [eslint] Make use of new [`jest/prefer-to-have-been-called-times`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/prefer-to-have-been-called-times.md) rule
44
+ - [eslint] Make use of new [`jest/valid-expect-with-promise`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/valid-expect-with-promise.md) rule
45
+ - [eslint] Make use of new [`jest/valid-mock-module-path`](https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/valid-mock-module-path.md) rule
46
+ - [eslint] Make use of new [`n/prefer-global/crypto`](https://github.com/eslint-community/eslint-plugin-n/blob/master/docs/rules/prefer-global/crypto.md) rule
47
+ - [eslint] Make use of new [`n/prefer-global/timers`](https://github.com/eslint-community/eslint-plugin-n/blob/master/docs/rules/prefer-global/timers.md) rule
48
+ - [eslint] Make use of new [`@typescript-eslint/strict-void-return`](https://typescript-eslint.io/rules/strict-void-return/) rule
49
+ - [eslint] Added but disabled [`@stylistic/jsx-props-style`](https://eslint.style/rules/jsx-props-style) rule, as it is an experimental feature
50
+ - [stylelint] Added but disabled [`display-notation`](https://stylelint.io/user-guide/rules/display-notation/) rule
51
+ - [stylelint] Added but disabled [`scss/selector-class-pattern`](https://github.com/stylelint-scss/stylelint-scss/tree/master/src/rules/selector-class-pattern) rule
52
+ - [stylelint] Updated forked `plugin/selector-tag-no-without-class` for stylelint 17 compatibility (adapted `parseSelector` API change)
53
+
54
+ [Show all code changes](https://github.com/jens-duttke/linter-bundle/compare/v7.11.0...v7.12.0)
55
+
56
+ ## [7.11.0] - 2025-11-19
57
+
58
+ - [eslint] Update `eslint-plugin-jsdoc`from `61.2.1` to `61.3.0`
59
+ - [eslint/jest] Report Jest version detection output only once (instead of once per thread)
60
+ - [stylelint] Added "transform-box", "transition-behavior" and "interpolate-size" to `order/properties-order` rule, and moved "content-visibility" behind "display", and "box-sizing" behind "all"
61
+
62
+ [Show all code changes](https://github.com/jens-duttke/linter-bundle/compare/v7.10.0...v7.11.0)
10
63
 
11
64
  ## [7.10.0] - 2025-11-19
12
65
 
package/README.md CHANGED
@@ -56,7 +56,7 @@ Beside that, the following additional rules are part of this bundle:
56
56
  - [stylelint-scss](https://www.npmjs.com/package/stylelint-scss)
57
57
  - [stylelint-selector-no-empty](https://www.npmjs.com/package/stylelint-selector-no-empty) (Forked version)
58
58
  - [stylelint-selector-tag-no-without-class](https://www.npmjs.com/package/stylelint-selector-tag-no-without-class) (Forked version)
59
- - [stylelint-use-logical-spec](https://www.npmjs.com/package/stylelint-use-logical-spec)
59
+ - [stylelint-use-logical](https://www.npmjs.com/package/stylelint-use-logical)
60
60
 
61
61
  Beside that [72 stylistic rules](https://github.com/jens-duttke/linter-bundle/tree/main/stylelint/plugins/stylelint-15.11.0-stylistic/rules) has been forked from `stylelint@15.11.0`, which have been removed in `stylelint@16.0.0`, are part of this bundle.
62
62
 
@@ -113,8 +113,8 @@ export default [
113
113
  ...reactConfig,
114
114
  ...storybookConfig,
115
115
  ...typeDeclarationsConfig,
116
- ...workerConfig
117
- ...jestConfig,
116
+ ...workerConfig,
117
+ ...jestConfig
118
118
  ]
119
119
  ```
120
120
 
@@ -668,7 +668,7 @@ To ensure the stylelint plugins are correctly loaded, you need to adjust the set
668
668
  ```json
669
669
  {
670
670
  "stylelint.enable": true,
671
- "stylelint.validate": [,
671
+ "stylelint.validate": [
672
672
  "css",
673
673
  "scss"
674
674
  ],
@@ -685,8 +685,8 @@ In order to fix the code according to the ESLint/stylelint rules when saving, th
685
685
  ```json
686
686
  {
687
687
  "editor.codeActionsOnSave": {
688
- "source.fixAll.eslint": true,
689
- "source.fixAll.stylelint": true
688
+ "source.fixAll.eslint": "explicit",
689
+ "source.fixAll.stylelint": "explicit"
690
690
  }
691
691
  }
692
692
  ```
package/eslint/index.mjs CHANGED
@@ -465,6 +465,7 @@ export default [
465
465
  ignoredNodes: ['ConditionalExpression']
466
466
  }
467
467
  ],
468
+ '@stylistic/jsx-props-style': 'off', // Experimental feature
468
469
  '@stylistic/key-spacing': 'error',
469
470
  '@stylistic/member-delimiter-style': ['error', { multiline: { delimiter: 'semi', requireLast: true }, singleline: { delimiter: 'semi', requireLast: true } }],
470
471
  '@stylistic/no-extra-semi': 'error',
@@ -795,6 +796,7 @@ export default [
795
796
  '@typescript-eslint/no-unsafe-unary-minus': 'error',
796
797
  '@typescript-eslint/no-unused-expressions': 'error',
797
798
  '@typescript-eslint/no-unsafe-type-assertion': 'error',
799
+ '@typescript-eslint/no-unused-private-class-members': 'error',
798
800
  '@typescript-eslint/no-unused-vars': ['error', {
799
801
  args: 'all',
800
802
  argsIgnorePattern: '^_',
@@ -806,6 +808,7 @@ export default [
806
808
  }],
807
809
  '@typescript-eslint/no-use-before-define': ['error', { functions: false }],
808
810
  '@typescript-eslint/no-useless-constructor': 'error',
811
+ '@typescript-eslint/no-useless-default-assignment': 'error',
809
812
  '@typescript-eslint/no-useless-empty-export': 'error',
810
813
  '@typescript-eslint/no-var-requires': 'error',
811
814
  '@typescript-eslint/non-nullable-type-assertion-style': 'off', // Conflicts with `no-non-null-assertion`, which we prefer
@@ -841,6 +844,7 @@ export default [
841
844
  '@typescript-eslint/sort-type-constituents': 'off', // Types should be sorted and grouped by priority and their meaning, not alphabetically
842
845
  '@typescript-eslint/sort-type-union-intersection-members': 'off', // Types should be sorted and grouped by priority and their meaning, not alphabetically
843
846
  '@typescript-eslint/strict-boolean-expressions': ['off', { allowNullable: true, allowSafe: true, ignoreRhs: true }], // @todo Doesn't work for specific code, check later after all linter warnings are fixed, maybe at some positions we can use '??'
847
+ '@typescript-eslint/strict-void-return': 'error',
844
848
  '@typescript-eslint/switch-exhaustiveness-check': ['error', { considerDefaultExhaustiveForUnions: true }],
845
849
  '@typescript-eslint/triple-slash-reference': 'error',
846
850
  '@typescript-eslint/typedef': 'off', // We are using "noImplicitAny" in tsconfig.json instead
@@ -958,6 +962,7 @@ export default [
958
962
 
959
963
  /**
960
964
  * eslint-plugin-eslint-comments
965
+ *
961
966
  * @see https://mysticatea.github.io/eslint-plugin-eslint-comments/
962
967
  */
963
968
  'eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }],
@@ -1047,6 +1052,7 @@ export default [
1047
1052
  }
1048
1053
  }
1049
1054
  }],
1055
+ 'unicorn/isolated-functions': 'error',
1050
1056
  'unicorn/new-for-builtins': 'error',
1051
1057
  'unicorn/no-abusive-eslint-disable': 'error',
1052
1058
  'unicorn/no-accessor-recursion': 'error',
@@ -86,9 +86,11 @@ export default [
86
86
  'n/no-top-level-await': 'off', // Conflicts with unicorn/prefer-await
87
87
  'n/prefer-global/buffer': 'error',
88
88
  'n/prefer-global/console': 'error',
89
+ 'n/prefer-global/crypto': 'error',
89
90
  'n/prefer-global/process': 'error',
90
91
  'n/prefer-global/text-decoder': 'error',
91
92
  'n/prefer-global/text-encoder': 'error',
93
+ 'n/prefer-global/timers': 'error',
92
94
  'n/prefer-global/url-search-params': 'error',
93
95
  'n/prefer-global/url': 'error',
94
96
  'n/prefer-promises/dns': 'error',
package/eslint/jest.mjs CHANGED
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import { createRequire } from 'node:module';
6
+ import { isMainThread } from 'node:worker_threads';
6
7
 
7
8
  import jestPlugin from 'eslint-plugin-jest';
8
9
  import globals from 'globals';
@@ -70,6 +71,7 @@ export default [
70
71
  'jest/no-disabled-tests': 'error',
71
72
  'jest/no-done-callback': 'error',
72
73
  'jest/no-duplicate-hooks': 'error',
74
+ 'jest/no-error-equal': 'error',
73
75
  'jest/no-export': 'error',
74
76
  'jest/no-focused-tests': 'error',
75
77
  'jest/no-hooks': ['error', { allow: ['beforeEach', 'afterEach', 'afterAll'] }],
@@ -89,6 +91,8 @@ export default [
89
91
  'jest/no-standalone-expect': 'error',
90
92
  'jest/no-test-prefixes': 'error',
91
93
  'jest/no-test-return-statement': 'error',
94
+ 'jest/no-unneeded-async-expect-function': 'error',
95
+ 'jest/no-unnecessary-assertion': 'error',
92
96
  'jest/prefer-called-with': 'error',
93
97
  'jest/prefer-expect-assertions': ['error', { onlyFunctionsWithAsyncKeyword: true }],
94
98
  'jest/prefer-expect-resolves': 'off', // We prefer `expect(await promise)` enforced by 'jest/no-restricted-matchers'
@@ -101,11 +105,14 @@ export default [
101
105
  'jest/prefer-importing-jest-globals': 'error',
102
106
  'jest/prefer-jest-mocked': 'error',
103
107
  'jest/prefer-mock-promise-shorthand': 'error',
108
+ 'jest/prefer-mock-return-shorthand': 'error',
104
109
  'jest/prefer-snapshot-hint': 'error',
105
110
  'jest/prefer-spy-on': 'error',
106
111
  'jest/prefer-strict-equal': 'error',
107
112
  'jest/prefer-to-be': 'error',
108
113
  'jest/prefer-to-contain': 'error',
114
+ 'jest/prefer-to-have-been-called': 'error',
115
+ 'jest/prefer-to-have-been-called-times': 'error',
109
116
  'jest/prefer-to-have-length': 'error',
110
117
  'jest/prefer-todo': 'error',
111
118
  'jest/require-hook': 'error',
@@ -115,6 +122,8 @@ export default [
115
122
  'jest/valid-describe-callback': 'error',
116
123
  'jest/valid-expect-in-promise': 'error',
117
124
  'jest/valid-expect': 'error',
125
+ 'jest/valid-expect-with-promise': 'error',
126
+ 'jest/valid-mock-module-path': 'error',
118
127
  'jest/valid-title': 'error'
119
128
  }
120
129
  },
@@ -165,12 +174,16 @@ async function getJestVersion () {
165
174
  const jest = ('default' in jestModule ? jestModule.default : jestModule);
166
175
  const version = jest.getVersion().split('.')[0];
167
176
 
168
- process.stdout.write(`Detected Jest version: ${version}\n\n`);
177
+ if (isMainThread) {
178
+ process.stdout.write(`Detected Jest version: ${version}\n\n`);
179
+ }
169
180
 
170
181
  return version;
171
182
  }
172
183
  catch {
173
- process.stderr.write('No Jest version detected\n\n');
184
+ if (isMainThread) {
185
+ process.stderr.write('No Jest version detected\n\n');
186
+ }
174
187
 
175
188
  return 'detect';
176
189
  }
package/eslint/jsdoc.mjs CHANGED
@@ -77,6 +77,7 @@ export default [
77
77
  'jsdoc/require-returns-description': 'error',
78
78
  'jsdoc/require-returns-type': 'error',
79
79
  'jsdoc/require-returns': ['error', { forceReturnsWithAsync: true }],
80
+ 'jsdoc/require-rejects': 'error',
80
81
  'jsdoc/require-template-description': 'off',
81
82
  'jsdoc/require-template': 'error',
82
83
  'jsdoc/require-throws-description': 'error',
@@ -12,7 +12,6 @@ export default {
12
12
  type: 'problem',
13
13
  docs: {
14
14
  description: 'Add parentheses around logical operations if not already present',
15
- category: 'Best Practices',
16
15
  recommended: true
17
16
  },
18
17
  fixable: 'code'
@@ -13,7 +13,6 @@ export default {
13
13
  fixable: 'code',
14
14
  docs: {
15
15
  description: 'Requires ternary expressions to be wrapped in parentheses.',
16
- category: 'Styling',
17
16
  recommended: true
18
17
  }
19
18
  },
@@ -10,7 +10,6 @@ export default {
10
10
  type: 'suggestion',
11
11
  docs: {
12
12
  description: 'Disallow ternary expressions as return values for better readability',
13
- category: 'Stylistic Issues',
14
13
  recommended: true
15
14
  },
16
15
  fixable: 'code',
@@ -34,12 +34,12 @@ export async function getGitFiles () {
34
34
  };
35
35
 
36
36
  if (!gitFiles) {
37
- const deletedFiles = gitProcessResult.deleted.stdout.trim().split('\0');
37
+ const deletedFiles = new Set(gitProcessResult.deleted.stdout.trim().split('\0'));
38
38
 
39
39
  gitFiles = [
40
40
  ...gitProcessResult.diff.stdout.trim().split('\0'),
41
41
  ...gitProcessResult.modified.stdout.trim().split('\0')
42
- ].filter((file, index, self) => (!deletedFiles.includes(file) && self.indexOf(file) === index));
42
+ ].filter((file, index, self) => (!deletedFiles.has(file) && self.indexOf(file) === index));
43
43
  }
44
44
 
45
45
  return gitFiles;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linter-bundle",
3
- "version": "7.10.0",
3
+ "version": "7.12.0",
4
4
  "type": "module",
5
5
  "description": "Ready-to use bundle of linting tools, containing configurations for ESLint, stylelint and markdownlint.",
6
6
  "keywords": [
@@ -24,7 +24,7 @@
24
24
  "lint": "lint.js"
25
25
  },
26
26
  "engines": {
27
- "node": "^20.12.0 || ^22.0.0 || >=24.0.0"
27
+ "node": "^20.19.0 || ^22.13.0 || >=24.0.0"
28
28
  },
29
29
  "repository": {
30
30
  "type": "git",
@@ -35,40 +35,40 @@
35
35
  "publish:minor": "npm version minor",
36
36
  "publish:patch": "npm version patch",
37
37
  "lint": "npm run _test-stylelint && npm run _stylelint-find-rules && node ./lint files tsc ts md audit --min-severity=critical",
38
- "preversion": "npm run check-outdated && npm run lint",
38
+ "preversion": "npm whoami && npm run check-outdated && npm run lint",
39
39
  "postversion": "git push && git push --tags && npm publish",
40
- "check-outdated": "npx --yes -- check-outdated --ignore-pre-releases",
40
+ "check-outdated": "npx --yes -- check-outdated --ignore-pre-releases --min-age 30 --min-age-patch 1",
41
41
  "_stylelint-find-rules": "stylelint-find-new-rules ./stylelint/index.mjs",
42
42
  "_test-stylelint": "node ./test-stylelint.js"
43
43
  },
44
44
  "dependencies": {
45
- "@stylistic/eslint-plugin": "5.6.1",
46
- "eslint": "9.39.1",
45
+ "@stylistic/eslint-plugin": "5.9.0",
46
+ "eslint": "9.39.3",
47
47
  "eslint-formatter-unix": "9.0.1",
48
48
  "eslint-import-resolver-typescript": "4.4.4",
49
49
  "eslint-import-resolver-webpack": "0.13.10",
50
50
  "eslint-plugin-eslint-comments": "3.2.0",
51
51
  "eslint-plugin-functional": "9.0.2",
52
52
  "eslint-plugin-import": "2.32.0",
53
- "eslint-plugin-jest": "29.1.0",
54
- "eslint-plugin-jsdoc": "61.2.1",
53
+ "eslint-plugin-jest": "29.15.0",
54
+ "eslint-plugin-jsdoc": "62.7.0",
55
55
  "eslint-plugin-jsx-a11y": "6.10.2",
56
- "eslint-plugin-n": "17.23.1",
56
+ "eslint-plugin-n": "17.24.0",
57
57
  "eslint-plugin-promise": "7.2.1",
58
58
  "eslint-plugin-react": "7.37.5",
59
59
  "eslint-plugin-react-hooks": "7.0.1",
60
- "eslint-plugin-unicorn": "62.0.0",
61
- "globals": "16.5.0",
62
- "markdownlint-cli": "0.46.0",
60
+ "eslint-plugin-unicorn": "63.0.0",
61
+ "globals": "17.3.0",
62
+ "markdownlint-cli": "0.47.0",
63
63
  "micromatch": "4.0.8",
64
64
  "postcss-scss": "4.0.9",
65
- "stylelint": "16.25.0",
66
- "stylelint-declaration-block-no-ignored-properties": "2.8.0",
67
- "stylelint-high-performance-animation": "1.11.0",
68
- "stylelint-order": "7.0.0",
69
- "stylelint-scss": "6.12.1",
70
- "stylelint-use-logical-spec": "5.0.1",
71
- "typescript-eslint": "8.47.0"
65
+ "stylelint": "17.3.0",
66
+ "stylelint-declaration-block-no-ignored-properties": "3.0.0",
67
+ "stylelint-high-performance-animation": "2.0.0",
68
+ "stylelint-order": "7.0.1",
69
+ "stylelint-scss": "7.0.0",
70
+ "stylelint-use-logical": "2.1.3",
71
+ "typescript-eslint": "8.56.0"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "@typescript-eslint/utils": "*",
@@ -78,8 +78,8 @@
78
78
  "devDependencies": {
79
79
  "@types/eslint": "9.6.1",
80
80
  "@types/micromatch": "4.0.10",
81
- "@types/node": "24.10.1",
82
- "stylelint-find-new-rules": "5.0.0",
81
+ "@types/node": "25.3.0",
82
+ "stylelint-find-new-rules": "6.0.0",
83
83
  "typescript": "5.9.3"
84
84
  }
85
85
  }
@@ -16,7 +16,7 @@ export default {
16
16
  'stylelint-declaration-block-no-ignored-properties',
17
17
  'stylelint-order',
18
18
  'stylelint-scss',
19
- 'stylelint-use-logical-spec',
19
+ 'stylelint-use-logical',
20
20
  'stylelint-high-performance-animation',
21
21
  await import('./plugins/stylelint-selector-no-empty.js'),
22
22
  await import('./plugins/stylelint-selector-tag-no-without-class.js'),
@@ -329,6 +329,7 @@ export default {
329
329
  'declaration-property-value-disallowed-list': null,
330
330
  'declaration-property-value-keyword-no-deprecated': true,
331
331
  'declaration-property-value-no-unknown': true,
332
+ 'display-notation': null, // Not yet enforcing short vs. long display notation (e.g. "block flow" vs. "block")
332
333
  'font-family-name-quotes': 'always-where-recommended',
333
334
  'font-family-no-duplicate-names': true,
334
335
  'font-family-no-missing-generic-family-keyword': true,
@@ -577,14 +578,15 @@ export default {
577
578
  'order/properties-order': [
578
579
  [
579
580
  {
580
- groupName: 'Reset',
581
+ groupName: 'Reset & Defaults',
581
582
  emptyLineBefore: 'always',
582
583
  noEmptyLineBetween: true,
583
584
  properties: [
584
- 'all'
585
+ 'all',
586
+ 'box-sizing',
587
+ 'interpolate-size'
585
588
  ]
586
589
  },
587
-
588
590
  {
589
591
  groupName: 'Performance Optimizations',
590
592
  emptyLineBefore: 'always',
@@ -611,6 +613,7 @@ export default {
611
613
  noEmptyLineBetween: true,
612
614
  properties: [
613
615
  'display',
616
+ 'content-visibility',
614
617
  'visibility',
615
618
 
616
619
  'appearance',
@@ -635,9 +638,7 @@ export default {
635
638
  'inset-block-end',
636
639
  'inset-inline',
637
640
  'inset-inline-start',
638
- 'inset-inline-end',
639
-
640
- 'box-sizing'
641
+ 'inset-inline-end'
641
642
  ]
642
643
  },
643
644
  {
@@ -829,6 +830,7 @@ export default {
829
830
  properties: [
830
831
  'transform',
831
832
  'transform-origin',
833
+ 'transform-box',
832
834
  'transform-style',
833
835
  'backface-visibility',
834
836
  'perspective',
@@ -844,7 +846,8 @@ export default {
844
846
  'transition-property',
845
847
  'transition-duration',
846
848
  'transition-timing-function',
847
- 'transition-delay'
849
+ 'transition-delay',
850
+ 'transition-behavior'
848
851
  ]
849
852
  },
850
853
  {
@@ -1137,6 +1140,7 @@ export default {
1137
1140
  'scss/partial-no-import': null,
1138
1141
  'scss/percent-placeholder-pattern': null,
1139
1142
  'scss/property-no-unknown': [true, { ignoreProperties: ['composes'] }],
1143
+ 'scss/selector-class-pattern': null, // Already handled by core selector-class-pattern rule
1140
1144
  'scss/selector-nest-combinators': null, // Sometimes nesting does not make sense
1141
1145
  'scss/selector-no-redundant-nesting-selector': true,
1142
1146
  'scss/selector-no-union-class-name': null,
@@ -1156,11 +1160,11 @@ export default {
1156
1160
  'plugin/selector-tag-no-without-class': null,
1157
1161
 
1158
1162
  /**
1159
- * stylelint-use-logical-spec
1163
+ * stylelint-use-logical
1160
1164
  *
1161
- * @see https://github.com/Jordan-Hall/stylelint-use-logical-spec
1165
+ * @see https://github.com/csstools/stylelint-use-logical
1162
1166
  */
1163
- 'liberty/use-logical-spec': ['always', { except: [
1167
+ 'csstools/use-logical': ['always', { except: [
1164
1168
  'float',
1165
1169
 
1166
1170
  'inset',
@@ -39,7 +39,7 @@ const rule = (primary, _secondaryOptions) => {
39
39
  /** @type {number[]} */
40
40
  const fixOperatorIndices = [];
41
41
  findMediaOperator(atRule, (match, parameters, node) => {
42
- checkBeforeOperator(match, parameters, node, (index) => fixOperatorIndices.push(index));
42
+ checkBeforeOperator(match, parameters, node, (index) => { fixOperatorIndices.push(index); });
43
43
  });
44
44
 
45
45
  if (fixOperatorIndices.length > 0) {
@@ -188,10 +188,11 @@ function rule (primaryOption, secondaryOptions = {}) {
188
188
  }
189
189
 
190
190
  for (const selector of ruleNode.selectors) {
191
- // @ts-expect-error -- Parameter 'container' implicitly has an 'any' type.
192
- parseSelector(selector, result, ruleNode, (container) => {
191
+ const container = parseSelector(selector, result, ruleNode);
192
+
193
+ if (container) {
193
194
  checkSelectorRoot(container, ruleNode);
194
- });
195
+ }
195
196
  }
196
197
  });
197
198
  };