diff --git a/package.json b/package.json index ca563d3a..89285ac4 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "workspaces": [ "packages/eslint-plugin-slds", "packages/stylelint-plugin-slds", - "packages/cli" + "packages/cli", + "packages/shared-utils" ], "packageManager": "yarn@1.22.22", "engines": { diff --git a/packages/eslint-plugin-slds/src/rules/enforce-bem-usage.ts b/packages/eslint-plugin-slds/src/rules/enforce-bem-usage.ts index fe9886c2..834a074e 100644 --- a/packages/eslint-plugin-slds/src/rules/enforce-bem-usage.ts +++ b/packages/eslint-plugin-slds/src/rules/enforce-bem-usage.ts @@ -1,5 +1,6 @@ import { findAttr, isAttributesEmpty } from "./utils/node"; import metadata from '@salesforce-ux/sds-metadata'; +import { formatMessageWithSuggestions } from '../../../shared-utils/src'; const bemMapping = metadata.bemNaming; const deprecatedClasses = metadata.deprecatedClasses; @@ -72,7 +73,10 @@ export = { actual: className, newValue }, - message: JSON.stringify({message: "{{actual}} has been retired. Update it to the new name {{newValue}}.", suggestions:[newValue]}), + message: formatMessageWithSuggestions( + "{{actual}} has been retired. Update it to the new name {{newValue}}.", + [newValue] + ), fix(fixer) { if (newValue) { const newClassValue = classAttr.value.value.replace( diff --git a/packages/eslint-plugin-slds/src/rules/modal-close-button-issue.ts b/packages/eslint-plugin-slds/src/rules/modal-close-button-issue.ts index e719b326..f175dd84 100644 --- a/packages/eslint-plugin-slds/src/rules/modal-close-button-issue.ts +++ b/packages/eslint-plugin-slds/src/rules/modal-close-button-issue.ts @@ -1,5 +1,6 @@ import { findAttr, isAttributesEmpty } from "./utils/node"; import { messages } from "./utils/rule"; +import { formatMessageWithSuggestions } from '../../../shared-utils/src/message-formatter'; // This rule specific to CVS, find more details here https://issues.salesforce.com/issue/a028c00000zh1iqAAA/modal-close-button-is-not-visible-with-the-new-white-background-after-winter-25-release export = { @@ -43,7 +44,7 @@ export = { context.report({ node, loc: classAttr.loc, - message: JSON.stringify({message: messages["removeClass"], suggestions: [`class="${newClassList}"`]}), + message: formatMessageWithSuggestions(messages["removeClass"], [`class="${newClassList}"`]), fix(fixer) { return fixer.replaceText(classAttr, // Replace the full attribute `class="${newClassList}"` // Updated class list @@ -85,7 +86,7 @@ export = { context.report({ node, loc: attribute.loc, - message: JSON.stringify({message:messages["removeClass"],suggestions:[`${attrName}="${newClassList}"`]}), + message: formatMessageWithSuggestions(messages["removeClass"], [`${attrName}="${newClassList}"`]), fix(fixer) { return fixer.replaceText(attribute, // Replace the full attribute `${attrName}="${newClassList}"` // Correctly modifies the respective attribute @@ -111,7 +112,7 @@ export = { context.report({ node: attribute, loc: attribute.value.loc, - message: JSON.stringify({message:messages["ensureButtonClasses"],suggestions:[newClassList]}), + message: formatMessageWithSuggestions(messages["ensureButtonClasses"], [newClassList]), fix(fixer) { return fixer.replaceText(attribute.value, `${newClassList}`); }, @@ -121,7 +122,7 @@ export = { if (variantAttr && variantAttr.value && variantAttr.value.value === "bare-inverse") { context.report({ node: variantAttr, - message: JSON.stringify({message:messages["changeVariant"],suggestions:["bare"]}), + message: formatMessageWithSuggestions(messages["changeVariant"], ["bare"]), loc: variantAttr.value.loc, fix(fixer) { return fixer.replaceText(variantAttr.value, `bare`); @@ -166,7 +167,7 @@ export = { if (variantAttr && variantAttr.value && variantAttr.value.value === "bare-inverse") { context.report({ node: variantAttr, - message: JSON.stringify({message:messages["changeVariant"], suggestions:["bare"]}), + message: formatMessageWithSuggestions(messages["changeVariant"], ["bare"]), loc: variantAttr.value.loc, fix(fixer) { return fixer.replaceText(variantAttr.value, `bare`); diff --git a/packages/eslint-plugin-slds/src/rules/no-deprecated-classes-slds2.ts b/packages/eslint-plugin-slds/src/rules/no-deprecated-classes-slds2.ts index 20b2669c..6c00aa22 100644 --- a/packages/eslint-plugin-slds/src/rules/no-deprecated-classes-slds2.ts +++ b/packages/eslint-plugin-slds/src/rules/no-deprecated-classes-slds2.ts @@ -1,5 +1,6 @@ import { findAttr, isAttributesEmpty } from "./utils/node"; import metadata from '@salesforce-ux/sds-metadata'; +import { formatMessageWithSuggestions } from '../../../shared-utils/src/message-formatter'; const deprecatedClasses = metadata.deprecatedClasses; export = { @@ -47,7 +48,10 @@ export = { data: { className, }, - message: JSON.stringify({message:"The class {{className}} isn't available in SLDS 2. Update it to a class supported in SLDS 2. See lightningdesignsystem.com for more information.", suggestions:[]}), + message: formatMessageWithSuggestions( + "The class {{className}} isn't available in SLDS 2. Update it to a class supported in SLDS 2. See lightningdesignsystem.com for more information.", + [] + ), }); } }); diff --git a/packages/eslint-plugin-slds/test/rules/enforce-bem-usage.test.js b/packages/eslint-plugin-slds/test/rules/enforce-bem-usage.test.js index e3cf6933..78a645d9 100644 --- a/packages/eslint-plugin-slds/test/rules/enforce-bem-usage.test.js +++ b/packages/eslint-plugin-slds/test/rules/enforce-bem-usage.test.js @@ -40,7 +40,8 @@ ruleTester.run("enforce-bem-usage", rule, { code: `
`, // Invalid: underscore instead of double underscore errors: [ { - message: "{\"message\":\"slds-container--medium has been retired. Update it to the new name slds-container_medium.\",\"suggestions\":[\"slds-container_medium\"]}", + // message: "{\"message\":\"slds-container--medium has been retired. Update it to the new name slds-container_medium.\",\"suggestions\":[\"slds-container_medium\"]}", + message:"slds-container--medium has been retired. Update it to the new name slds-container_medium.", line: 1, column: 13, }, @@ -51,7 +52,8 @@ ruleTester.run("enforce-bem-usage", rule, { code: `
`, // Invalid: `block_element` not in BEM errors: [ { - message: "{\"message\":\"slds-border--left has been retired. Update it to the new name slds-border_left.\",\"suggestions\":[\"slds-border_left\"]}", + // message: "{\"message\":\"slds-border--left has been retired. Update it to the new name slds-border_left.\",\"suggestions\":[\"slds-border_left\"]}", + message:"slds-border--left has been retired. Update it to the new name slds-border_left.", line: 1, column: 33, } @@ -62,7 +64,8 @@ ruleTester.run("enforce-bem-usage", rule, { code: `
`, // Invalid: Missing block name errors: [ { - message: "{\"message\":\"slds-p-right--xxx-small has been retired. Update it to the new name slds-p-right_xxx-small.\",\"suggestions\":[\"slds-p-right_xxx-small\"]}", + // message: "{\"message\":\"slds-p-right--xxx-small has been retired. Update it to the new name slds-p-right_xxx-small.\",\"suggestions\":[\"slds-p-right_xxx-small\"]}", + message:"slds-p-right--xxx-small has been retired. Update it to the new name slds-p-right_xxx-small.", line: 1, column: 13, }, diff --git a/packages/eslint-plugin-slds/test/rules/modal-close-button-issue.test.js b/packages/eslint-plugin-slds/test/rules/modal-close-button-issue.test.js index d6812ced..baed2d4b 100644 --- a/packages/eslint-plugin-slds/test/rules/modal-close-button-issue.test.js +++ b/packages/eslint-plugin-slds/test/rules/modal-close-button-issue.test.js @@ -50,14 +50,14 @@ ruleTester.run("slds-modal-button-issue", rule, { // ❌ Scenario 1: Remove slds-button_icon-inverse from a modal close button { code: ``, - errors: [{ message: JSON.stringify({message: messages["removeClass"], suggestions: [`class="slds-button slds-button_icon slds-modal__close"`]}), type: "Tag" }], + errors: [{ message: messages["removeClass"], type: "Tag" }], output: ``, }, // ❌ Scenario 2: Fix variant="bare-inverse" and ensure size="large" in lightning-button-icon { code: ``, - errors: [{ message: JSON.stringify({message:messages["changeVariant"],suggestions:["bare"]}) }], + errors: [{ message: messages["changeVariant"] }], output: ``, }, @@ -66,14 +66,14 @@ ruleTester.run("slds-modal-button-issue", rule, { code: ``, errors: [ //{ messageId: "ensureSizeAttribute", type: "Tag" }, - { message: JSON.stringify({message:messages["changeVariant"],suggestions:["bare"]}) } + { message: messages["changeVariant"] } ], output: ``, }, { code: ``, errors: [ - { message: JSON.stringify({message:messages["changeVariant"],suggestions:["bare"]}) } + { message: messages["changeVariant"] } ], output: ``, }, @@ -91,8 +91,8 @@ ruleTester.run("slds-modal-button-issue", rule, { {cancelButtonLabel} `, errors: [ - { message: JSON.stringify({message: messages["removeClass"], suggestions: [`class="slds-button slds-button_icon slds-modal__close"`]})}, - { message: JSON.stringify({message:messages["changeVariant"],suggestions:["bare"]}), } + { message: messages["removeClass"]}, + { message: messages["changeVariant"] } ], output: `