linter-bundle 5.1.0 → 6.1.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 +2 -0
- package/CHANGELOG.md +83 -9
- package/README.md +5 -3
- package/TODO.md +5 -0
- package/eslint/index.cjs +10 -4
- package/eslint/overrides-javascript.cjs +7 -1
- package/eslint/overrides-jest.cjs +1 -0
- package/eslint/overrides-jsdoc.cjs +1 -0
- package/eslint/rules/no-global-undefined-check.js +5 -3
- package/eslint/rules/no-unnecessary-typeof.js +26 -24
- package/eslint/rules/restricted-filenames.js +3 -1
- package/helper/ensure-type.cjs +2 -2
- package/helper/get-git-files.js +1 -1
- package/helper/get-outdated-dependencies.js +1 -1
- package/helper/get-outdated-overrides.js +1 -1
- package/helper/get-stylelint-path.js +1 -1
- package/helper/is-npm-or-yarn.js +1 -1
- package/helper/linter-bundle-config.js +22 -7
- package/helper/run-process.js +3 -3
- package/lint.js +31 -35
- package/package.json +27 -26
- package/stylelint/index.cjs +90 -5
- package/stylelint/plugins/stylelint-15.11.0-stylistic/LICENSE +20 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/html-tags/LICENSE +9 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/html-tags/index.cjs +122 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/reference/selectors.cjs +327 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-name-case/README.md +110 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-name-case/index.cjs +66 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-name-space-after/README.md +117 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-name-space-after/index.cjs +55 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-semicolon-newline-after/README.md +63 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-semicolon-newline-after/index.cjs +87 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-semicolon-space-before/README.md +50 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/at-rule-semicolon-space-before/index.cjs +70 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/atRuleNameSpaceChecker.cjs +56 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-empty-line-before/README.md +238 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-empty-line-before/index.cjs +130 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-newline-after/README.md +196 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-newline-after/index.cjs +154 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-newline-before/README.md +93 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-newline-before/index.cjs +133 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-space-before/README.md +174 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-closing-brace-space-before/index.cjs +111 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-newline-after/README.md +138 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-newline-after/index.cjs +184 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-space-after/README.md +191 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-space-after/index.cjs +118 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-space-before/README.md +218 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/block-opening-brace-space-before/index.cjs +141 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/color-hex-case/README.md +58 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/color-hex-case/index.cjs +95 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-bang-space-after/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-bang-space-after/index.cjs +95 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-bang-space-before/README.md +67 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-bang-space-before/index.cjs +96 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-newline-after/README.md +141 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-newline-after/index.cjs +109 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-newline-before/README.md +120 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-newline-before/index.cjs +75 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-space-after/README.md +147 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-space-after/index.cjs +97 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-space-before/README.md +130 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-semicolon-space-before/index.cjs +106 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-trailing-semicolon/README.md +108 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-block-trailing-semicolon/index.cjs +147 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-newline-after/README.md +78 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-newline-after/index.cjs +99 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-space-after/README.md +111 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-space-after/index.cjs +75 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-space-before/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declaration-colon-space-before/index.cjs +74 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declarationBangSpaceChecker.cjs +63 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/declarationColonSpaceChecker.cjs +58 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/findMediaOperator.cjs +32 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-newline-after/README.md +113 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-newline-after/index.cjs +61 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-newline-before/README.md +129 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-newline-before/index.cjs +61 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-space-after/README.md +144 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-space-after/index.cjs +62 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-space-before/README.md +144 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-comma-space-before/index.cjs +62 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-max-empty-lines/README.md +78 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-max-empty-lines/index.cjs +115 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-parentheses-newline-inside/README.md +144 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-parentheses-newline-inside/index.cjs +282 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-parentheses-space-inside/README.md +140 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-parentheses-space-inside/index.cjs +182 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-whitespace-after/README.md +80 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/function-whitespace-after/index.cjs +198 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/functionCommaSpaceChecker.cjs +125 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/functionCommaSpaceFix.cjs +51 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/indentation/README.md +339 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/indentation/index.cjs +743 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/linebreaks/README.md +21 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/linebreaks/index.cjs +132 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/max-empty-lines/README.md +116 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/max-empty-lines/index.cjs +225 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/max-line-length/README.md +151 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/max-line-length/index.cjs +200 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-colon-space-after/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-colon-space-after/index.cjs +91 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-colon-space-before/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-colon-space-before/index.cjs +91 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-name-case/README.md +108 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-name-case/index.cjs +93 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-parentheses-space-inside/README.md +62 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-parentheses-space-inside/index.cjs +112 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-range-operator-space-after/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-range-operator-space-after/index.cjs +109 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-range-operator-space-before/README.md +72 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-feature-range-operator-space-before/index.cjs +109 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-newline-after/README.md +113 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-newline-after/index.cjs +97 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-newline-before/README.md +111 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-newline-before/index.cjs +49 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-space-after/README.md +136 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-space-after/index.cjs +93 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-space-before/README.md +136 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/media-query-list-comma-space-before/index.cjs +93 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/mediaFeatureColonSpaceChecker.cjs +54 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/mediaQueryListCommaWhitespaceChecker.cjs +73 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-empty-first-line/README.md +34 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-empty-first-line/index.cjs +63 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-eol-whitespace/README.md +79 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-eol-whitespace/index.cjs +302 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-extra-semicolons/README.md +78 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-extra-semicolons/index.cjs +246 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-missing-end-of-source-newline/README.md +34 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/no-missing-end-of-source-newline/index.cjs +62 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/number-leading-zero/README.md +74 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/number-leading-zero/index.cjs +197 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/number-no-trailing-zeros/README.md +40 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/number-no-trailing-zeros/index.cjs +139 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/property-case/README.md +192 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/property-case/index.cjs +95 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-brackets-space-inside/README.md +112 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-brackets-space-inside/index.cjs +214 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-operator-space-after/README.md +162 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-operator-space-after/index.cjs +109 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-operator-space-before/README.md +162 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-operator-space-before/index.cjs +88 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-after/README.md +78 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-after/index.cjs +67 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-before/README.md +78 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-before/index.cjs +67 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-descendant-combinator-no-non-space/README.md +40 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-descendant-combinator-no-non-space/index.cjs +95 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-newline-after/README.md +120 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-newline-after/index.cjs +126 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-newline-before/README.md +112 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-newline-before/index.cjs +101 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-space-after/README.md +110 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-space-after/index.cjs +92 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-space-before/README.md +110 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-list-comma-space-before/index.cjs +92 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-max-empty-lines/README.md +103 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-max-empty-lines/index.cjs +74 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-class-case/README.md +108 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-class-case/index.cjs +104 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-class-parentheses-space-inside/README.md +62 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-class-parentheses-space-inside/index.cjs +162 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-element-case/README.md +128 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-pseudo-element-case/index.cjs +90 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selectorAttributeOperatorSpaceChecker.cjs +95 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selectorCombinatorSpaceChecker.cjs +113 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selectorListCommaWhitespaceChecker.cjs +64 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/string-quotes/README.md +130 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/string-quotes/index.cjs +256 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/unicode-bom/README.md +41 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/unicode-bom/index.cjs +67 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/unit-case/README.md +126 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/unit-case/index.cjs +133 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-newline-after/README.md +102 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-newline-after/index.cjs +107 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-newline-before/README.md +100 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-newline-before/index.cjs +49 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-space-after/README.md +136 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-space-after/index.cjs +94 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-space-before/README.md +136 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-comma-space-before/index.cjs +94 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-max-empty-lines/README.md +121 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/value-list-max-empty-lines/index.cjs +68 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/rules/valueListCommaWhitespaceChecker.cjs +74 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/style-search/LICENSE +13 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/style-search/index.cjs +216 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/utils/addEmptyLineAfter.cjs +30 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/utils/hasEmptyBlock.cjs +14 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/utils/nextNonCommentNode.cjs +21 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/utils/removeEmptyLinesAfter.cjs +16 -0
- package/stylelint/plugins/stylelint-15.11.0-stylistic/utils/whitespaceChecker.cjs +361 -0
- package/stylelint/plugins/stylelint-selector-no-empty.js +8 -8
- package/stylelint/plugins/stylelint-selector-tag-no-without-class.js +4 -4
- package/stylelint/plugins/stylelint-high-performance-animation.js +0 -276
- package/stylelint/plugins/stylelint-stylistic.js +0 -188
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# selector-attribute-operator-space-before
|
|
2
|
+
|
|
3
|
+
Require a single space or disallow whitespace before operators within attribute selectors.
|
|
4
|
+
|
|
5
|
+
<!-- prettier-ignore -->
|
|
6
|
+
```css
|
|
7
|
+
[target =_blank]
|
|
8
|
+
/** ↑
|
|
9
|
+
* The space before operator */
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The [`fix` option](https://stylelint.io/user-guide/options/#fix) can automatically fix all of the problems reported by this rule.
|
|
13
|
+
|
|
14
|
+
## Options
|
|
15
|
+
|
|
16
|
+
`string`: `"always"|"never"`
|
|
17
|
+
|
|
18
|
+
### `"always"`
|
|
19
|
+
|
|
20
|
+
There _must always_ be a single space before the operator.
|
|
21
|
+
|
|
22
|
+
The following patterns are considered problems:
|
|
23
|
+
|
|
24
|
+
<!-- prettier-ignore -->
|
|
25
|
+
```css
|
|
26
|
+
[target=_blank] {}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
<!-- prettier-ignore -->
|
|
30
|
+
```css
|
|
31
|
+
[target= _blank] {}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
<!-- prettier-ignore -->
|
|
35
|
+
```css
|
|
36
|
+
[target='_blank'] {}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<!-- prettier-ignore -->
|
|
40
|
+
```css
|
|
41
|
+
[target="_blank"] {}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
<!-- prettier-ignore -->
|
|
45
|
+
```css
|
|
46
|
+
[target= '_blank'] {}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
<!-- prettier-ignore -->
|
|
50
|
+
```css
|
|
51
|
+
[target= "_blank"] {}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The following patterns are _not_ considered problems:
|
|
55
|
+
|
|
56
|
+
<!-- prettier-ignore -->
|
|
57
|
+
```css
|
|
58
|
+
[target] {}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
<!-- prettier-ignore -->
|
|
62
|
+
```css
|
|
63
|
+
[target =_blank] {}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
<!-- prettier-ignore -->
|
|
67
|
+
```css
|
|
68
|
+
[target ='_blank'] {}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
<!-- prettier-ignore -->
|
|
72
|
+
```css
|
|
73
|
+
[target ="_blank"] {}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
<!-- prettier-ignore -->
|
|
77
|
+
```css
|
|
78
|
+
[target = _blank] {}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
<!-- prettier-ignore -->
|
|
82
|
+
```css
|
|
83
|
+
[target = '_blank'] {}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
<!-- prettier-ignore -->
|
|
87
|
+
```css
|
|
88
|
+
[target = "_blank"] {}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### `"never"`
|
|
92
|
+
|
|
93
|
+
There _must never_ be a single space before the operator.
|
|
94
|
+
|
|
95
|
+
The following patterns are considered problems:
|
|
96
|
+
|
|
97
|
+
<!-- prettier-ignore -->
|
|
98
|
+
```css
|
|
99
|
+
[target =_blank] {}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
<!-- prettier-ignore -->
|
|
103
|
+
```css
|
|
104
|
+
[target = _blank] {}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
<!-- prettier-ignore -->
|
|
108
|
+
```css
|
|
109
|
+
[target ='_blank'] {}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
<!-- prettier-ignore -->
|
|
113
|
+
```css
|
|
114
|
+
[target ="_blank"] {}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
<!-- prettier-ignore -->
|
|
118
|
+
```css
|
|
119
|
+
[target = '_blank'] {}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
<!-- prettier-ignore -->
|
|
123
|
+
```css
|
|
124
|
+
[target = "_blank"] {}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The following patterns are _not_ considered problems:
|
|
128
|
+
|
|
129
|
+
<!-- prettier-ignore -->
|
|
130
|
+
```css
|
|
131
|
+
[target] {}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
<!-- prettier-ignore -->
|
|
135
|
+
```css
|
|
136
|
+
[target=_blank] {}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
<!-- prettier-ignore -->
|
|
140
|
+
```css
|
|
141
|
+
[target='_blank'] {}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
<!-- prettier-ignore -->
|
|
145
|
+
```css
|
|
146
|
+
[target="_blank"] {}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
<!-- prettier-ignore -->
|
|
150
|
+
```css
|
|
151
|
+
[target= _blank] {}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
<!-- prettier-ignore -->
|
|
155
|
+
```css
|
|
156
|
+
[target= '_blank'] {}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
<!-- prettier-ignore -->
|
|
160
|
+
```css
|
|
161
|
+
[target= "_blank"] {}
|
|
162
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* eslint-disable -- We want to keep as much of the original code as possible */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
const stylelint = require('stylelint');
|
|
5
|
+
const ruleMessages = require('stylelint/lib/utils/ruleMessages.cjs');
|
|
6
|
+
const validateOptions = require('stylelint/lib/utils/validateOptions.cjs');
|
|
7
|
+
|
|
8
|
+
const whitespaceChecker = require('../../utils/whitespaceChecker.cjs');
|
|
9
|
+
const selectorAttributeOperatorSpaceChecker = require('../selectorAttributeOperatorSpaceChecker.cjs');
|
|
10
|
+
|
|
11
|
+
const ruleName = 'plugin/selector-attribute-operator-space-before';
|
|
12
|
+
|
|
13
|
+
const messages = ruleMessages(ruleName, {
|
|
14
|
+
expectedBefore: (operator) => `Expected single space before "${operator}"`,
|
|
15
|
+
rejectedBefore: (operator) => `Unexpected whitespace before "${operator}"`
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const meta = {
|
|
19
|
+
url: 'https://github.com/jens-duttke/linter-bundle/blob/main/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-attribute-operator-space-before/README.md',
|
|
20
|
+
fixable: true
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** @type {import('stylelint').Rule} */
|
|
24
|
+
const rule = (primary, _secondaryOptions, context) => {
|
|
25
|
+
const checker = whitespaceChecker('space', primary, messages);
|
|
26
|
+
|
|
27
|
+
return (root, result) => {
|
|
28
|
+
const validOptions = validateOptions(result, ruleName, {
|
|
29
|
+
actual: primary,
|
|
30
|
+
possible: ['always', 'never']
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (!validOptions) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
selectorAttributeOperatorSpaceChecker({
|
|
38
|
+
root,
|
|
39
|
+
result,
|
|
40
|
+
locationChecker: checker.before,
|
|
41
|
+
checkedRuleName: ruleName,
|
|
42
|
+
checkBeforeOperator: true,
|
|
43
|
+
fix: context.fix ?
|
|
44
|
+
(attributeNode) => {
|
|
45
|
+
const rawAttribute = attributeNode.raws.spaces?.attribute;
|
|
46
|
+
const rawAttributeAfter = rawAttribute?.after;
|
|
47
|
+
|
|
48
|
+
/** @type {{ attrAfter: string, setAttrAfter: (fixed: string) => void }} */
|
|
49
|
+
const { attrAfter, setAttrAfter } = rawAttributeAfter ?
|
|
50
|
+
{
|
|
51
|
+
attrAfter: rawAttributeAfter,
|
|
52
|
+
setAttrAfter (fixed) {
|
|
53
|
+
rawAttribute.after = fixed;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
: {
|
|
57
|
+
attrAfter:
|
|
58
|
+
(attributeNode.spaces.attribute?.after) || '',
|
|
59
|
+
setAttrAfter (fixed) {
|
|
60
|
+
if (!attributeNode.spaces.attribute) { attributeNode.spaces.attribute = {}; }
|
|
61
|
+
|
|
62
|
+
attributeNode.spaces.attribute.after = fixed;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
if (primary === 'always') {
|
|
67
|
+
setAttrAfter(attrAfter.replace(/\s*$/, ' '));
|
|
68
|
+
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (primary === 'never') {
|
|
73
|
+
setAttrAfter(attrAfter.replace(/\s*$/, ''));
|
|
74
|
+
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
: null
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
rule.ruleName = ruleName;
|
|
86
|
+
rule.messages = messages;
|
|
87
|
+
rule.meta = meta;
|
|
88
|
+
module.exports = stylelint.createPlugin(ruleName, rule);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# selector-combinator-space-after
|
|
2
|
+
|
|
3
|
+
Require a single space or disallow whitespace after the combinators of selectors.
|
|
4
|
+
|
|
5
|
+
<!-- prettier-ignore -->
|
|
6
|
+
```css
|
|
7
|
+
a > b + c ~ d e >>> f { color: pink; }
|
|
8
|
+
/** ↑ ↑ ↑ ↑ ↑
|
|
9
|
+
* These are combinators */
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Combinators are used to combine several different selectors into new and more specific ones. There are several types of combinators, including: child (`>`), adjacent sibling (`+`), general sibling (`~`), and descendant (which is represented by a blank space between two selectors).
|
|
13
|
+
|
|
14
|
+
The descendant combinator is _not_ checked by this rule.
|
|
15
|
+
|
|
16
|
+
Also, `+` and `-` signs within `:nth-*()` arguments are not checked (e.g. `a:nth-child(2n+1)`).
|
|
17
|
+
|
|
18
|
+
The [`fix` option](https://stylelint.io/user-guide/options/#fix) can automatically fix all of the problems reported by this rule.
|
|
19
|
+
|
|
20
|
+
## Options
|
|
21
|
+
|
|
22
|
+
`string`: `"always"|"never"`
|
|
23
|
+
|
|
24
|
+
### `"always"`
|
|
25
|
+
|
|
26
|
+
There _must always_ be a single space after the combinators.
|
|
27
|
+
|
|
28
|
+
The following patterns are considered problems:
|
|
29
|
+
|
|
30
|
+
<!-- prettier-ignore -->
|
|
31
|
+
```css
|
|
32
|
+
a +b { color: pink; }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
<!-- prettier-ignore -->
|
|
36
|
+
```css
|
|
37
|
+
a>b { color: pink; }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The following patterns are _not_ considered problems:
|
|
41
|
+
|
|
42
|
+
<!-- prettier-ignore -->
|
|
43
|
+
```css
|
|
44
|
+
a + b { color: pink; }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
<!-- prettier-ignore -->
|
|
48
|
+
```css
|
|
49
|
+
a> b { color: pink; }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `"never"`
|
|
53
|
+
|
|
54
|
+
There _must never_ be whitespace after the combinators.
|
|
55
|
+
|
|
56
|
+
The following patterns are considered problems:
|
|
57
|
+
|
|
58
|
+
<!-- prettier-ignore -->
|
|
59
|
+
```css
|
|
60
|
+
a + b { color: pink; }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
<!-- prettier-ignore -->
|
|
64
|
+
```css
|
|
65
|
+
a> b { color: pink; }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The following patterns are _not_ considered problems:
|
|
69
|
+
|
|
70
|
+
<!-- prettier-ignore -->
|
|
71
|
+
```css
|
|
72
|
+
a +b { color: pink; }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<!-- prettier-ignore -->
|
|
76
|
+
```css
|
|
77
|
+
a>b { color: pink; }
|
|
78
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* eslint-disable -- We want to keep as much of the original code as possible */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
const stylelint = require('stylelint');
|
|
5
|
+
const ruleMessages = require('stylelint/lib/utils/ruleMessages.cjs');
|
|
6
|
+
const validateOptions = require('stylelint/lib/utils/validateOptions.cjs');
|
|
7
|
+
|
|
8
|
+
const whitespaceChecker = require('../../utils/whitespaceChecker.cjs');
|
|
9
|
+
const selectorCombinatorSpaceChecker = require('../selectorCombinatorSpaceChecker.cjs');
|
|
10
|
+
|
|
11
|
+
const ruleName = 'plugin/selector-combinator-space-after';
|
|
12
|
+
|
|
13
|
+
const messages = ruleMessages(ruleName, {
|
|
14
|
+
expectedAfter: (combinator) => `Expected single space after "${combinator}"`,
|
|
15
|
+
rejectedAfter: (combinator) => `Unexpected whitespace after "${combinator}"`
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const meta = {
|
|
19
|
+
url: 'https://github.com/jens-duttke/linter-bundle/blob/main/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-after/README.md',
|
|
20
|
+
fixable: true
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** @type {import('stylelint').Rule} */
|
|
24
|
+
const rule = (primary, _secondaryOptions, context) => {
|
|
25
|
+
const checker = whitespaceChecker('space', primary, messages);
|
|
26
|
+
|
|
27
|
+
return (root, result) => {
|
|
28
|
+
const validOptions = validateOptions(result, ruleName, {
|
|
29
|
+
actual: primary,
|
|
30
|
+
possible: ['always', 'never']
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (!validOptions) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
selectorCombinatorSpaceChecker({
|
|
38
|
+
root,
|
|
39
|
+
result,
|
|
40
|
+
locationChecker: checker.after,
|
|
41
|
+
locationType: 'after',
|
|
42
|
+
checkedRuleName: ruleName,
|
|
43
|
+
fix: context.fix ?
|
|
44
|
+
(combinator) => {
|
|
45
|
+
if (primary === 'always') {
|
|
46
|
+
combinator.spaces.after = ' ';
|
|
47
|
+
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (primary === 'never') {
|
|
52
|
+
combinator.spaces.after = '';
|
|
53
|
+
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
: null
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
rule.ruleName = ruleName;
|
|
65
|
+
rule.messages = messages;
|
|
66
|
+
rule.meta = meta;
|
|
67
|
+
module.exports = stylelint.createPlugin(ruleName, rule);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# selector-combinator-space-before
|
|
2
|
+
|
|
3
|
+
Require a single space or disallow whitespace before the combinators of selectors.
|
|
4
|
+
|
|
5
|
+
<!-- prettier-ignore -->
|
|
6
|
+
```css
|
|
7
|
+
a > b + c ~ d e >>> f { color: pink; }
|
|
8
|
+
/** ↑ ↑ ↑ ↑ ↑
|
|
9
|
+
* These are combinators */
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Combinators are used to combine several different selectors into new and more specific ones. There are several types of combinators, including: child (`>`), adjacent sibling (`+`), general sibling (`~`), and descendant (which is represented by a blank space between two selectors).
|
|
13
|
+
|
|
14
|
+
The descendant combinator is _not_ checked by this rule.
|
|
15
|
+
|
|
16
|
+
Also, `+` and `-` signs within `:nth-*()` arguments are not checked (e.g. `a:nth-child(2n+1)`).
|
|
17
|
+
|
|
18
|
+
The [`fix` option](https://stylelint.io/user-guide/options/#fix) can automatically fix all of the problems reported by this rule.
|
|
19
|
+
|
|
20
|
+
## Options
|
|
21
|
+
|
|
22
|
+
`string`: `"always"|"never"`
|
|
23
|
+
|
|
24
|
+
### `"always"`
|
|
25
|
+
|
|
26
|
+
There _must always_ be a single space before the combinators.
|
|
27
|
+
|
|
28
|
+
The following patterns are considered problems:
|
|
29
|
+
|
|
30
|
+
<!-- prettier-ignore -->
|
|
31
|
+
```css
|
|
32
|
+
a+ b { color: pink; }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
<!-- prettier-ignore -->
|
|
36
|
+
```css
|
|
37
|
+
a>b { color: pink; }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The following patterns are _not_ considered problems:
|
|
41
|
+
|
|
42
|
+
<!-- prettier-ignore -->
|
|
43
|
+
```css
|
|
44
|
+
a + b { color: pink; }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
<!-- prettier-ignore -->
|
|
48
|
+
```css
|
|
49
|
+
a >b { color: pink; }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `"never"`
|
|
53
|
+
|
|
54
|
+
There _must never_ be whitespace before the combinators.
|
|
55
|
+
|
|
56
|
+
The following patterns are considered problems:
|
|
57
|
+
|
|
58
|
+
<!-- prettier-ignore -->
|
|
59
|
+
```css
|
|
60
|
+
a + b { color: pink; }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
<!-- prettier-ignore -->
|
|
64
|
+
```css
|
|
65
|
+
a >b { color: pink; }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The following patterns are _not_ considered problems:
|
|
69
|
+
|
|
70
|
+
<!-- prettier-ignore -->
|
|
71
|
+
```css
|
|
72
|
+
a+ b { color: pink; }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<!-- prettier-ignore -->
|
|
76
|
+
```css
|
|
77
|
+
a>b { color: pink; }
|
|
78
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* eslint-disable -- We want to keep as much of the original code as possible */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
const stylelint = require('stylelint');
|
|
5
|
+
const ruleMessages = require('stylelint/lib/utils/ruleMessages.cjs');
|
|
6
|
+
const validateOptions = require('stylelint/lib/utils/validateOptions.cjs');
|
|
7
|
+
|
|
8
|
+
const whitespaceChecker = require('../../utils/whitespaceChecker.cjs');
|
|
9
|
+
const selectorCombinatorSpaceChecker = require('../selectorCombinatorSpaceChecker.cjs');
|
|
10
|
+
|
|
11
|
+
const ruleName = 'plugin/selector-combinator-space-before';
|
|
12
|
+
|
|
13
|
+
const messages = ruleMessages(ruleName, {
|
|
14
|
+
expectedBefore: (combinator) => `Expected single space before "${combinator}"`,
|
|
15
|
+
rejectedBefore: (combinator) => `Unexpected whitespace before "${combinator}"`
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const meta = {
|
|
19
|
+
url: 'https://github.com/jens-duttke/linter-bundle/blob/main/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-combinator-space-before/README.md',
|
|
20
|
+
fixable: true
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** @type {import('stylelint').Rule} */
|
|
24
|
+
const rule = (primary, _secondaryOptions, context) => {
|
|
25
|
+
const checker = whitespaceChecker('space', primary, messages);
|
|
26
|
+
|
|
27
|
+
return (root, result) => {
|
|
28
|
+
const validOptions = validateOptions(result, ruleName, {
|
|
29
|
+
actual: primary,
|
|
30
|
+
possible: ['always', 'never']
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (!validOptions) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
selectorCombinatorSpaceChecker({
|
|
38
|
+
root,
|
|
39
|
+
result,
|
|
40
|
+
locationChecker: checker.before,
|
|
41
|
+
locationType: 'before',
|
|
42
|
+
checkedRuleName: ruleName,
|
|
43
|
+
fix: context.fix ?
|
|
44
|
+
(combinator) => {
|
|
45
|
+
if (primary === 'always') {
|
|
46
|
+
combinator.spaces.before = ' ';
|
|
47
|
+
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (primary === 'never') {
|
|
52
|
+
combinator.spaces.before = '';
|
|
53
|
+
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
: null
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
rule.ruleName = ruleName;
|
|
65
|
+
rule.messages = messages;
|
|
66
|
+
rule.meta = meta;
|
|
67
|
+
module.exports = stylelint.createPlugin(ruleName, rule);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# selector-descendant-combinator-no-non-space
|
|
2
|
+
|
|
3
|
+
Disallow non-space characters for descendant combinators of selectors.
|
|
4
|
+
|
|
5
|
+
<!-- prettier-ignore -->
|
|
6
|
+
```css
|
|
7
|
+
.foo .bar .baz {}
|
|
8
|
+
/** ↑ ↑
|
|
9
|
+
* These descendant combinators */
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
This rule ensures that only a single space is used and ensures no tabs, newlines, nor multiple spaces are used for descendant combinators of selectors.
|
|
13
|
+
|
|
14
|
+
The [`fix` option](https://stylelint.io/user-guide/options/#fix) can automatically fix most of the problems reported by this rule.
|
|
15
|
+
|
|
16
|
+
This rule currently ignores selectors containing comments.
|
|
17
|
+
|
|
18
|
+
## Options
|
|
19
|
+
|
|
20
|
+
### `true`
|
|
21
|
+
|
|
22
|
+
The following patterns are considered problems:
|
|
23
|
+
|
|
24
|
+
<!-- prettier-ignore -->
|
|
25
|
+
```css
|
|
26
|
+
.foo .bar {}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
<!-- prettier-ignore -->
|
|
30
|
+
```css
|
|
31
|
+
.foo
|
|
32
|
+
.bar {}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The following patterns are _not_ considered problems:
|
|
36
|
+
|
|
37
|
+
<!-- prettier-ignore -->
|
|
38
|
+
```css
|
|
39
|
+
.foo .bar {}
|
|
40
|
+
```
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* eslint-disable -- We want to keep as much of the original code as possible */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
const stylelint = require('stylelint');
|
|
5
|
+
const isStandardSyntaxRule = require('stylelint/lib/utils/isStandardSyntaxRule.cjs');
|
|
6
|
+
const parseSelector = require('stylelint/lib/utils/parseSelector.cjs');
|
|
7
|
+
const report = require('stylelint/lib/utils/report.cjs');
|
|
8
|
+
const ruleMessages = require('stylelint/lib/utils/ruleMessages.cjs');
|
|
9
|
+
const validateOptions = require('stylelint/lib/utils/validateOptions.cjs');
|
|
10
|
+
|
|
11
|
+
const ruleName = 'plugin/selector-descendant-combinator-no-non-space';
|
|
12
|
+
|
|
13
|
+
const messages = ruleMessages(ruleName, {
|
|
14
|
+
rejected: (nonSpaceCharacter) => `Unexpected "${nonSpaceCharacter}"`
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const meta = {
|
|
18
|
+
url: 'https://github.com/jens-duttke/linter-bundle/blob/main/stylelint/plugins/stylelint-15.11.0-stylistic/rules/selector-descendant-combinator-no-non-space/README.md',
|
|
19
|
+
fixable: true
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/** @type {import('stylelint').Rule} */
|
|
23
|
+
const rule = (primary, _secondaryOptions, context) => (root, result) => {
|
|
24
|
+
const validOptions = validateOptions(result, ruleName, {
|
|
25
|
+
actual: primary
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (!validOptions) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
root.walkRules((ruleNode) => {
|
|
33
|
+
if (!isStandardSyntaxRule(ruleNode)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let hasFixed = false;
|
|
38
|
+
const selector = ruleNode.raws.selector ? ruleNode.raws.selector.raw : ruleNode.selector;
|
|
39
|
+
|
|
40
|
+
// Return early for selectors containing comments
|
|
41
|
+
// TODO: re-enable when parser and stylelint are compatible
|
|
42
|
+
if (selector.includes('/*')) { return; }
|
|
43
|
+
|
|
44
|
+
const fixedSelector = parseSelector(selector, result, ruleNode, (fullSelector) => {
|
|
45
|
+
fullSelector.walkCombinators((combinatorNode) => {
|
|
46
|
+
if (combinatorNode.value !== ' ') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const value = combinatorNode.toString();
|
|
51
|
+
|
|
52
|
+
if (
|
|
53
|
+
value.includes(' ') ||
|
|
54
|
+
value.includes('\t') ||
|
|
55
|
+
value.includes('\n') ||
|
|
56
|
+
value.includes('\r')
|
|
57
|
+
) {
|
|
58
|
+
if (context.fix && (/^\s+$/).test(value)) {
|
|
59
|
+
hasFixed = true;
|
|
60
|
+
|
|
61
|
+
if (!combinatorNode.raws) { combinatorNode.raws = {}; }
|
|
62
|
+
|
|
63
|
+
combinatorNode.raws.value = ' ';
|
|
64
|
+
combinatorNode.rawSpaceBefore = combinatorNode.rawSpaceBefore.replace(/^\s+/, '');
|
|
65
|
+
combinatorNode.rawSpaceAfter = combinatorNode.rawSpaceAfter.replace(/\s+$/, '');
|
|
66
|
+
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
report({
|
|
71
|
+
result,
|
|
72
|
+
ruleName,
|
|
73
|
+
message: messages.rejected(value),
|
|
74
|
+
node: ruleNode,
|
|
75
|
+
index: combinatorNode.sourceIndex
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
if (hasFixed && fixedSelector) {
|
|
82
|
+
if (!ruleNode.raws.selector) {
|
|
83
|
+
ruleNode.selector = fixedSelector;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
ruleNode.raws.selector.raw = fixedSelector;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
rule.ruleName = ruleName;
|
|
93
|
+
rule.messages = messages;
|
|
94
|
+
rule.meta = meta;
|
|
95
|
+
module.exports = stylelint.createPlugin(ruleName, rule);
|