-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Add constraints to stylelint-polaris/coverage
disable comments
#7589
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks great! LGTM
for (const disabledRange of result.stylelint.disabledRanges.all) { | ||
if ( | ||
!isDisabledCoverageRule(disabledCoverageLines, disabledRange) || | ||
disabledRange.description?.startsWith('polaris:') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Love this. I do want to make sure we are aligned with the polaris:
prefix for disabling Polaris rules. It could be p-ignore
p-skip
p-context
lots of different things. The main thing is that it is searchable and the value we want for the long term.
Not against polaris
but might be worthwhile discussing before shipping.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great points. We could change it if needed in a future major and have overlap of multiply supported prefixes. So maybe we start with polaris:
for simplicity then can introduce a convention for others later on.
Just some alternatives prefixes:
yo:
give-me-the-context:
but-why:
promise-i-need-this:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, great callout! My main focus in this iteration was ensuring we can capture disabled coverage rules and validate some form of context was provided for tracking. I landed on polaris:
to avoid redundancy as the alternatives (stylelint-polaris:
, p-ignore
, p-skip
, etc.) are already communicated by the stylelint-disable
comment. That said, I'm happy to make any changes to the required prefix 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎩 'd and works brilliantly 👏 very nice strategy and implementation
|
||
// Ensure all stylelint-polaris/coverage disable comments | ||
// have a description prefixed with "polaris:" | ||
for (const disabledRange of result.stylelint.disabledRanges.all) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought only targeting the disabledRanges.all
would be an issue if a specific rule name was used; however, because of how we are creating the rules dynamically, Stylelint won't let you target it since it isn't present as a static rule in the config 🤯 brilliant
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, leveraging stylelint-polaris/coverage
worked out well! Because we categorize rules with custom names and check them manually, I was able to easily filter out disabled coverage rules from disabledRanges.all
:
Notice the above result.stylelint.disabledWarnings
includes the category that was disabled e.g. /motion
. This can be leveraged in future iterations to require authors define each disabled category e.g.
/* stylelint-disable -- p-colors, p-motion: context */
Note: I started to explore this behavior, but felt the logic was becoming too complex for the initial implementation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Just had a comment about more generic error messaging to guide the user to fix the error more easily.
Also we should probably start considering how this will affect the roll out strategy, if we are adding a bunch of disable comments with generic context comments to start with, we don't want developers to copy and paste the generic context. Its unfortunately happened a lot in Shopify/web 😬
} | ||
|
||
stylelint.utils.report({ | ||
message: `Missing "polaris:" prefix in disable comment description`, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we could generalize this message to educate the user when they don't add any comment at all like in this test case and have an example of what they should be doing, i.e.
message: `Missing "polaris:" prefix in disable comment description`, | |
message: `Incorrect disable comment for stylelint-polaris. The correct format is: "/* ${disableComment} -- polaris: {Context on why the rule is disabled} */"`, |
Hopefully you could get the disableComment
from the disabledRange
object to print out either stylelint-disable-next-line
or stylelint-disable
.
Hopefully this makes sense!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sophschneider and I sync'd offline and landed on the follow error message:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just a thought, but I think even a small rewording would make it more actionable:
- Expected /* stylelint-disable -- polaris: Context comment for disable */
+ Expected /* stylelint-disable -- polaris: Reason for disabling */
or
- Expected /* stylelint-disable -- polaris: Context comment for disable */
+ Expected /* stylelint-disable -- polaris: Add a reason for disabling */
or
- Expected /* stylelint-disable -- polaris: Context comment for disable */
+ Expected /* stylelint-disable -- polaris: Provide a reason for context */
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the feedback! We wen't with option 1: 3b97ef0
* main: Add flex properties to Inline, use logical property instead of alignY (#7633) [polaris.shopify.com] Replace typography with Text component (#7634) Add constraints to `stylelint-polaris/coverage` disable comments (#7589) Check for target component in Text migrations before modifying file (#7632) Replace typography component in stories with Text (#7572) Inline remove wrap children in div (#7625) Replace typography components with Text (#7530) [Layout foundations] Update `AlphaCard` component docs and guidance (#7568)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @shopify/polaris-icons@6.5.0 ### Minor Changes - [#7548](#7548) [`432bdd5fe`](432bdd5) Thanks [@anthonymenecola](https://github.com/anthonymenecola)! - add cancel major icon - [#7620](#7620) [`35be8a003`](35be8a0) Thanks [@rdott](https://github.com/rdott)! - Added inactive location minor and major icons ## @shopify/polaris-migrator@0.8.0 ### Minor Changes - [#7403](#7403) [`8859f5db5`](8859f5d) Thanks [@jesstelford](https://github.com/jesstelford)! - Introduce `migrate-motion` migration for migrating `transition`, `transition-duration`, and `transition-delay` usages of duration values. - [#7606](#7606) [`cf7badbd1`](cf7badb) Thanks [@samrose3](https://github.com/samrose3)! - Renamed and split migrations based on scope and type (react, scss, and styles) - [#7543](#7543) [`8c1989618`](8c19896) Thanks [@jesstelford](https://github.com/jesstelford)! - Expose utilities for SASS Migrations to leverage the Suggestion-on-partial-fix pattern - [#7529](#7529) [`3652eb901`](3652eb9) Thanks [@samrose3](https://github.com/samrose3)! - Add relative option for replace-text-component migration - [#7532](#7532) [`ba576498d`](ba57649) Thanks [@jesstelford](https://github.com/jesstelford)! - Expose the .report() method to SASS migrations for easier aggregation of discovered issues during a migration run. ### Patch Changes - [#7606](#7606) [`cf7badbd1`](cf7badb) Thanks [@samrose3](https://github.com/samrose3)! - Update `createInlineComment` to format text with RegExp - [#7606](#7606) [`cf7badbd1`](cf7badb) Thanks [@samrose3](https://github.com/samrose3)! - Add support to replace Identifiers along with JSXIdentifiers for Text migration - [#7632](#7632) [`1f2ec8bfe`](1f2ec8b) Thanks [@samrose3](https://github.com/samrose3)! - Check for targeted component import before modifying in Text component migration - Updated dependencies \[[`6e9edd3b5`](6e9edd3)]: - @shopify/polaris-tokens@6.3.0 ## @shopify/polaris@10.11.0 ### Minor Changes - [#7572](#7572) [`20c8cad81`](20c8cad) Thanks [@laurkim](https://github.com/laurkim)! - Replaced usage of text components in component stories with `Text` component - [#7621](#7621) [`6e9edd3b5`](6e9edd3) Thanks [@aveline](https://github.com/aveline)! - - Added border width prop to `Box` - Exported color token subset alias types from tokens package and remove from `Box` - [#7068](#7068) [`ccdcea22e`](ccdcea2) Thanks [@laurkim](https://github.com/laurkim)! - Deprecated `DisplayText`, `Heading`, `Subheading`, `Caption`, `TextStyle`, and `VisuallyHidden` components ### Patch Changes - [#7644](#7644) [`b3e73ee04`](b3e73ee) Thanks [@kyledurand](https://github.com/kyledurand)! - Added horizontal spacing defaults to `Bleed` - [#7530](#7530) [`79d92a820`](79d92a8) Thanks [@samrose3](https://github.com/samrose3)! - Replaced all typography components with the new `Text` component. Added support for `text-inverse` color type on `Text`. Removed references to the following mixins to use the new `Text` or tokens directly in classes: `text-style-body`, `text-style-heading`, `text-style-subheading`, `text-style-caption`, `text-style-button`, `text-style-button-large`, `text-emphasis-subdued`, `text-emphasis-strong`, `nav-item-text-attributes`. - [#7577](#7577) [`db951f855`](db951f8) Thanks [@RickyMarou](https://github.com/RickyMarou)! - Page component: display subtitle even when it's the only header prop set - [#7633](#7633) [`1364be7f1`](1364be7) Thanks [@kyledurand](https://github.com/kyledurand)! - Renamed `alignY` prop to `alignBlock` on `Inline` Added more flex properties to `align` on `Inline` - [#7443](#7443) [`7a6fb7c1c`](7a6fb7c) Thanks [@iAmNathanJ](https://github.com/iAmNathanJ)! - Improve performance of the Scrollable component with React 18 - [#7625](#7625) [`9f8b651dd`](9f8b651) Thanks [@kyledurand](https://github.com/kyledurand)! - Removed wrap children with div from Inline component - [#7593](#7593) [`addd6bcdd`](addd6bc) Thanks [@kyledurand](https://github.com/kyledurand)! - Improved comments across layout components, changed default spacing of Inline component to match AlphaStack - [#7600](#7600) [`f006509be`](f006509) Thanks [@billycai](https://github.com/billycai)! - Add spacing between title and metadata for Page component - [#7563](#7563) [`a9051d678`](a9051d6) Thanks [@chazdean](https://github.com/chazdean)! - Updated `Inline` component docs and default prop values - [#7635](#7635) [`3cb5377a6`](3cb5377) Thanks [@iAmNathanJ](https://github.com/iAmNathanJ)! - Fixed Scrollable component to match existing onScrolledToBottom logic - Updated dependencies \[[`432bdd5fe`](432bdd5), [`6e9edd3b5`](6e9edd3), [`35be8a003`](35be8a0)]: - @shopify/polaris-icons@6.5.0 - @shopify/polaris-tokens@6.3.0 ## @shopify/polaris-tokens@6.3.0 ### Minor Changes - [#7621](#7621) [`6e9edd3b5`](6e9edd3) Thanks [@aveline](https://github.com/aveline)! - - Added border width prop to `Box` - Exported color token subset alias types from tokens package and remove from `Box` ## @shopify/stylelint-polaris@4.4.0 ### Minor Changes - [#7551](#7551) [`d7dc4436f`](d7dc443) Thanks [@aaronccasanova](https://github.com/aaronccasanova)! - Add `stylelint-polaris/coverage` rule ### Patch Changes - [#7589](#7589) [`b7b0ef5a9`](b7b0ef5) Thanks [@aaronccasanova](https://github.com/aaronccasanova)! - Add constraints to `stylelint-polaris/coverage` disable comments - Updated dependencies \[[`6e9edd3b5`](6e9edd3)]: - @shopify/polaris-tokens@6.3.0 ## @shopify/plugin-polaris@0.0.16 ### Patch Changes - Updated dependencies \[[`8859f5db5`](8859f5d), [`cf7badbd1`](cf7badb), [`cf7badbd1`](cf7badb), [`cf7badbd1`](cf7badb), [`8c1989618`](8c19896), [`3652eb901`](3652eb9), [`1f2ec8bfe`](1f2ec8b), [`ba576498d`](ba57649)]: - @shopify/polaris-migrator@0.8.0 ## polaris.shopify.com@0.24.0 ### Minor Changes - [#7068](#7068) [`ccdcea22e`](ccdcea2) Thanks [@laurkim](https://github.com/laurkim)! - Deprecated `DisplayText`, `Heading`, `Subheading`, `Caption`, `TextStyle`, and `VisuallyHidden` pages and removed examples - [#7609](#7609) [`343865159`](3438651) Thanks [@sarahill](https://github.com/sarahill)! - Added new type style guidance and info to typography docs ### Patch Changes - [#7634](#7634) [`4db441756`](4db4417) Thanks [@laurkim](https://github.com/laurkim)! - Replaced usage of typography components (`DisplayText`, `Heading`, `Subheading`, `Caption`, `VisuallyHidden`, `TextStyle`) with the new `Text` component - [#7604](#7604) [`aa82c82ff`](aa82c82) Thanks [@chazdean](https://github.com/chazdean)! - Updated `Inline` component doc vertical alignment example - [#7568](#7568) [`ab0cf251f`](ab0cf25) Thanks [@chazdean](https://github.com/chazdean)! - Updated `AlphaCard` component guidance and examples - [#7633](#7633) [`1364be7f1`](1364be7) Thanks [@kyledurand](https://github.com/kyledurand)! - Renamed `alignY` prop to `alignBlock` on `Inline` Added more flex properties to `align` on `Inline` - [#7527](#7527) [`924e9e5cd`](924e9e5) Thanks [@chazdean](https://github.com/chazdean)! - Update `Columns` component docs - [#7596](#7596) [`749ee31ee`](749ee31) Thanks [@kyledurand](https://github.com/kyledurand)! - Fixed home promo image layout - [#7563](#7563) [`a9051d678`](a9051d6) Thanks [@chazdean](https://github.com/chazdean)! - Updated `Inline` component docs and default prop values - [#7566](#7566) [`567822218`](5678222) Thanks [@kyledurand](https://github.com/kyledurand)! - Bumped nextjs - [#7602](#7602) [`9931ce0b4`](9931ce0) Thanks [@kyledurand](https://github.com/kyledurand)! - Bumped nextjs to 13.0.1 - [#7571](#7571) [`4c5ccc8fa`](4c5ccc8) Thanks [@chazdean](https://github.com/chazdean)! - Updated `Bleed` component guidance and examples - Updated dependencies \[[`b3e73ee04`](b3e73ee), [`20c8cad81`](20c8cad), [`79d92a820`](79d92a8), [`db951f855`](db951f8), [`432bdd5fe`](432bdd5), [`6e9edd3b5`](6e9edd3), [`ccdcea22e`](ccdcea2), [`1364be7f1`](1364be7), [`7a6fb7c1c`](7a6fb7c), [`9f8b651dd`](9f8b651), [`addd6bcdd`](addd6bc), [`f006509be`](f006509), [`a9051d678`](a9051d6), [`3cb5377a6`](3cb5377), [`35be8a003`](35be8a0)]: - @shopify/polaris@10.11.0 - @shopify/polaris-icons@6.5.0 - @shopify/polaris-tokens@6.3.0 Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Part of #7531
WHAT is this pull request doing?
This PR introduces the ability to capture
stylelint-disable
comments applied to our coverage rules and validate authors have provided context why they are opting out of the system.Linting
stylelint-disable
comments, targeting coverage rules, was accomplished by extending the stylelint-polaris/coverage plugin to post process failures against Stylelint disabled ranges and ensuring comment descriptions are both present and prefixed withpolaris:
. By leveragingstylelint-polaris/coverage
for linting comments, we have the ability to further extend the behavior to enhance our coverage insights (for example: requiring categories in description prefixespolaris-colors:
, ability to disable failing coveragepolaris-skip:
, etc.)Examples
If a
stylelint-disable
comment targeting a coverage rule is NOT prefixed withpolaris:
an error is reported:How to 🎩
🖥 Local development instructions
🗒 General tophatting guidelines
📄 Changelog guidelines
Copy-paste this code in
playground/Playground.tsx
:🎩 checklist
README.md
with documentation changes