Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix no-irregular-whitespace reported ranges #8066

Conversation

romainmenke
Copy link
Member

@romainmenke romainmenke commented Oct 21, 2024

Which issue, if any, is this issue related to?

See #7904

Is there anything in the PR that needs further explanation?

No

Copy link

changeset-bot bot commented Oct 21, 2024

🦋 Changeset detected

Latest commit: fcf29c0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
stylelint Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment on lines 55 to 66
/**
* @param {string} str
* @returns {string | null}
* @returns {Array<{index: number, length: number}>}
*/
const findIrregularWhitespace = (str) => {
const result = IRREGULAR_WHITESPACES_PATTERN.exec(str);

return (result && result[1]) || null;
return Array.from(str.matchAll(IRREGULAR_WHITESPACES_PATTERN)).map((match) => {
return {
index: match.index,
length: match[0].length,
};
});
};
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The old implementation only reported a single irregular whitespace per AST field.
Instead of reporting each contiguous instance.

…-masked-palm-civet-aa54d96cf9' of https://github.com/stylelint/stylelint into fix-no-irregular-whitespace-reported-ranges--passionate-masked-palm-civet-aa54d96cf9
@Mouvedia Mouvedia mentioned this pull request Nov 11, 2024
11 tasks
Copy link
Member

@ybiquitous ybiquitous left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[suggestion] Can you extract a few pull requests from this one to make reviewing/reverting easier?

For example, one PR for the declaration utils is fine to me.


For the declaration utils, does it make sense to combine them to one function? I imagine the interface would be:

/**
 * @param {import('postcss').Declaration} decl
 * @param {'between' | 'value'} component
 * @returns {number}
 */
export function declarationComponentIndex(decl, component) {
  // ...
}

I'd like to reduce similar files/codes for maintainability even if they're internal.

@Mouvedia
Copy link
Member

I'd like to reduce similar files/codes for maintainability even if they're internal.

@ybiquitous see #8097.

@romainmenke
Copy link
Member Author

This should be ready for another look, thank you for the feedback

Copy link
Member

@Mouvedia Mouvedia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Iv left some additional comments; nothing important though.

lib/rules/no-irregular-whitespace/__tests__/index.mjs Outdated Show resolved Hide resolved
lib/rules/no-irregular-whitespace/__tests__/index.mjs Outdated Show resolved Hide resolved
lib/rules/no-irregular-whitespace/index.cjs Show resolved Hide resolved
Copy link
Member

@ybiquitous ybiquitous left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your effort. The code is now much cleaner while fixing the bug! LGTM 😄 👍🏼

@romainmenke romainmenke merged commit 18b0856 into main Nov 17, 2024
17 checks passed
@romainmenke romainmenke deleted the fix-no-irregular-whitespace-reported-ranges--passionate-masked-palm-civet-aa54d96cf9 branch November 17, 2024 08:38
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Nov 28, 2024
| datasource | package   | from    | to      |
| ---------- | --------- | ------- | ------- |
| npm        | stylelint | 16.10.0 | 16.11.0 |


## [v16.11.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16110)

-   Added: `--report-unscoped-disables` CLI flag and `reportUnscopedDisables` option to Node.js API and configuration object ([#8024](stylelint/stylelint#8024)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Added: `ignoreFunctions: []` to `media-query-no-invalid` ([#8060](stylelint/stylelint#8060)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Added: `name` configuration property under `overrides` ([#8095](stylelint/stylelint#8095)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `benchmark-rule` script to resolve `TypeError` ([#8090](stylelint/stylelint#8090)) ([@ybiquitous](https://github.com/ybiquitous)).
-   Fixed: `github` formatter deprecation warning link to `https://stylelint.io/awesome-stylelint#formatters` ([#8115](stylelint/stylelint#8115)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `function-calc-no-unspaced-operator` false negatives for `calc-size` ([#8026](stylelint/stylelint#8026)) ([@azat-io](https://github.com/azat-io)).
-   Fixed: `max-nesting-depth` false positives when the `&` selector is being ignored ([#8048](stylelint/stylelint#8048)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `media-feature-name-value-no-unknown` false positives for `display-mode: picture-in-picture` ([#8136](stylelint/stylelint#8136)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Fixed: `no-irregular-whitespace` reported ranges ([#8066](stylelint/stylelint#8066)) ([@romainmenke](https://github.com/romainmenke)).
-   Fixed: `selector-attribute-name-disallowed-list` reported ranges ([#8037](stylelint/stylelint#8037)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-attribute-operator-allowed-list` reported ranges ([#8038](stylelint/stylelint#8038)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-attribute-operator-disallowed-list` reported ranges ([#8039](stylelint/stylelint#8039)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-class-pattern` reported ranges ([#8042](stylelint/stylelint#8042)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-combinator-allowed-list` reported ranges ([#8046](stylelint/stylelint#8046)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-combinator-disallowed-list` reported ranges ([#8047](stylelint/stylelint#8047)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-disallowed-list` reported ranges ([#8067](stylelint/stylelint#8067)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-id-pattern` reported ranges ([#8045](stylelint/stylelint#8045)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-attribute` reported ranges ([#8052](stylelint/stylelint#8052)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-class` reported ranges ([#8053](stylelint/stylelint#8053)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-combinators` reported-ranges ([#8055](stylelint/stylelint#8055)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-compound-selectors` reported ranges ([#8056](stylelint/stylelint#8056)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-id` reported ranges ([#8054](stylelint/stylelint#8054)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-pseudo-class` reported ranges ([#8057](stylelint/stylelint#8057)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-specificity` reported ranges ([#8058](stylelint/stylelint#8058)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-universal` reported ranges ([#8059](stylelint/stylelint#8059)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-nested-pattern` reported ranges ([#8072](stylelint/stylelint#8072)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-no-vendor-prefix` reported ranges ([#8073](stylelint/stylelint#8073)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-not-notation` reported ranges ([#8074](stylelint/stylelint#8074)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-allowed-list` reported ranges ([#8061](stylelint/stylelint#8061)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-disallowed-list` reported ranges ([#8062](stylelint/stylelint#8062)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-no-unknown` reported ranges ([#8063](stylelint/stylelint#8063)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-allowed-list` reported ranges ([#8068](stylelint/stylelint#8068)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-colon-notation` reported ranges ([#8069](stylelint/stylelint#8069)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-disallowed-list` reported ranges ([#8070](stylelint/stylelint#8070)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-no-unknown` false positives for `::scroll-marker` and `::scroll-marker-group` ([#8110](stylelint/stylelint#8110)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Fixed: `selector-pseudo-element-no-unknown` reported ranges ([#8071](stylelint/stylelint#8071)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-type-no-unknown` reported ranges ([#8076](stylelint/stylelint#8076)) ([@ryo-manba](https://github.com/ryo-manba)).
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Nov 29, 2024
| datasource | package   | from    | to      |
| ---------- | --------- | ------- | ------- |
| npm        | stylelint | 16.10.0 | 16.11.0 |


## [v16.11.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16110)

-   Added: `--report-unscoped-disables` CLI flag and `reportUnscopedDisables` option to Node.js API and configuration object ([#8024](stylelint/stylelint#8024)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Added: `ignoreFunctions: []` to `media-query-no-invalid` ([#8060](stylelint/stylelint#8060)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Added: `name` configuration property under `overrides` ([#8095](stylelint/stylelint#8095)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `benchmark-rule` script to resolve `TypeError` ([#8090](stylelint/stylelint#8090)) ([@ybiquitous](https://github.com/ybiquitous)).
-   Fixed: `github` formatter deprecation warning link to `https://stylelint.io/awesome-stylelint#formatters` ([#8115](stylelint/stylelint#8115)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `function-calc-no-unspaced-operator` false negatives for `calc-size` ([#8026](stylelint/stylelint#8026)) ([@azat-io](https://github.com/azat-io)).
-   Fixed: `max-nesting-depth` false positives when the `&` selector is being ignored ([#8048](stylelint/stylelint#8048)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `media-feature-name-value-no-unknown` false positives for `display-mode: picture-in-picture` ([#8136](stylelint/stylelint#8136)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Fixed: `no-irregular-whitespace` reported ranges ([#8066](stylelint/stylelint#8066)) ([@romainmenke](https://github.com/romainmenke)).
-   Fixed: `selector-attribute-name-disallowed-list` reported ranges ([#8037](stylelint/stylelint#8037)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-attribute-operator-allowed-list` reported ranges ([#8038](stylelint/stylelint#8038)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-attribute-operator-disallowed-list` reported ranges ([#8039](stylelint/stylelint#8039)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-class-pattern` reported ranges ([#8042](stylelint/stylelint#8042)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-combinator-allowed-list` reported ranges ([#8046](stylelint/stylelint#8046)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-combinator-disallowed-list` reported ranges ([#8047](stylelint/stylelint#8047)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-disallowed-list` reported ranges ([#8067](stylelint/stylelint#8067)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-id-pattern` reported ranges ([#8045](stylelint/stylelint#8045)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-attribute` reported ranges ([#8052](stylelint/stylelint#8052)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-class` reported ranges ([#8053](stylelint/stylelint#8053)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-combinators` reported-ranges ([#8055](stylelint/stylelint#8055)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-compound-selectors` reported ranges ([#8056](stylelint/stylelint#8056)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-id` reported ranges ([#8054](stylelint/stylelint#8054)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-pseudo-class` reported ranges ([#8057](stylelint/stylelint#8057)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-specificity` reported ranges ([#8058](stylelint/stylelint#8058)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-max-universal` reported ranges ([#8059](stylelint/stylelint#8059)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-nested-pattern` reported ranges ([#8072](stylelint/stylelint#8072)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-no-vendor-prefix` reported ranges ([#8073](stylelint/stylelint#8073)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-not-notation` reported ranges ([#8074](stylelint/stylelint#8074)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-allowed-list` reported ranges ([#8061](stylelint/stylelint#8061)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-disallowed-list` reported ranges ([#8062](stylelint/stylelint#8062)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-class-no-unknown` reported ranges ([#8063](stylelint/stylelint#8063)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-allowed-list` reported ranges ([#8068](stylelint/stylelint#8068)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-colon-notation` reported ranges ([#8069](stylelint/stylelint#8069)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-disallowed-list` reported ranges ([#8070](stylelint/stylelint#8070)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-pseudo-element-no-unknown` false positives for `::scroll-marker` and `::scroll-marker-group` ([#8110](stylelint/stylelint#8110)) ([@Mouvedia](https://github.com/Mouvedia)).
-   Fixed: `selector-pseudo-element-no-unknown` reported ranges ([#8071](stylelint/stylelint#8071)) ([@ryo-manba](https://github.com/ryo-manba)).
-   Fixed: `selector-type-no-unknown` reported ranges ([#8076](stylelint/stylelint#8076)) ([@ryo-manba](https://github.com/ryo-manba)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants