From 8e325140405d2e2050c0da57fd9389b7ddd413b2 Mon Sep 17 00:00:00 2001 From: JC Franco Date: Fri, 13 Sep 2024 13:52:01 -0700 Subject: [PATCH 1/2] refactor(stylelint): change config to module format to enable more dynamic options --- packages/calcite-components/.stylelintrc.cjs | 81 +++++++++++++++++++ packages/calcite-components/.stylelintrc.json | 80 ------------------ .../calcite-components/tsconfig-base.json | 1 + packages/calcite-components/tsconfig.json | 2 +- 4 files changed, 83 insertions(+), 81 deletions(-) create mode 100644 packages/calcite-components/.stylelintrc.cjs delete mode 100644 packages/calcite-components/.stylelintrc.json diff --git a/packages/calcite-components/.stylelintrc.cjs b/packages/calcite-components/.stylelintrc.cjs new file mode 100644 index 00000000000..beb0fee57da --- /dev/null +++ b/packages/calcite-components/.stylelintrc.cjs @@ -0,0 +1,81 @@ +// @ts-check + +const scssPatternRules = [ + "scss/at-function-pattern", + "scss/dollar-variable-pattern", + "scss/at-mixin-pattern", + "scss/percent-placeholder-pattern", +]; + +/** @type {import('stylelint').Config["rules"]} */ +const rules = { + "length-zero-no-unit": true, + "liberty/use-logical-spec": [ + "always", + { + except: ["left", "right"], + }, + ], + "no-descending-specificity": [ + true, + { + ignore: ["selectors-within-list"], + }, + ], + "selector-disallowed-list": [ + ["/:host-context/"], + { + message: ":host-context is not supported in all browsers, so it should be avoided", + severity: "error", + }, + ], + "selector-max-specificity": [ + "0,5,5", + { + message: "selector is too complex, consider applying multiple classes dynamically during rendering", + }, + ], + "selector-pseudo-element-colon-notation": [ + "double", + { + message: "Use double colons for pseudo-elements", + }, + ], + "selector-type-no-unknown": [ + true, + { + ignoreTypes: ["/^calcite-/"], + }, + ], + "scss/function-no-unknown": [ + true, + { + ignoreFunctions: ["get-trailing-text-input-padding", "scale-duration", "theme", "var"], + severity: "error", + }, + ], +}; + +scssPatternRules.forEach((rule) => { + const kebabCasePattern = "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$"; + + rules[rule] = + /** @type {import('stylelint').Config["rules"][string]} */ + [ + kebabCasePattern, + { + message: "Name should be kebab-cased", + severity: "error", + }, + ]; +}); + +/** @type {import('stylelint').Config} */ +const config = { + defaultSeverity: "warning", + extends: "stylelint-config-recommended-scss", + plugins: ["stylelint-use-logical-spec"], + rules, +}; + +module.exports = config; diff --git a/packages/calcite-components/.stylelintrc.json b/packages/calcite-components/.stylelintrc.json deleted file mode 100644 index b5c35fd79ed..00000000000 --- a/packages/calcite-components/.stylelintrc.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "defaultSeverity": "warning", - "extends": "stylelint-config-recommended-scss", - "plugins": ["stylelint-use-logical-spec"], - "rules": { - "length-zero-no-unit": true, - "liberty/use-logical-spec": [ - "always", - { - "except": ["left", "right"] - } - ], - "no-descending-specificity": [ - true, - { - "ignore": ["selectors-within-list"] - } - ], - "selector-disallowed-list": [ - ["/:host-context/"], - { - "message": ":host-context is not supported in all browsers, so it should be avoided", - "severity": "error" - } - ], - "selector-max-specificity": [ - "0,5,5", - { - "message": "selector is too complex, consider applying multiple classes dynamically during rendering" - } - ], - "selector-pseudo-element-colon-notation": [ - "double", - { - "message": "Use double colons for pseudo-elements" - } - ], - "selector-type-no-unknown": [ - true, - { - "ignoreTypes": ["/^calcite-/"] - } - ], - "scss/at-function-pattern": [ - "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$", - { - "message": "Name should be kebab-cased.", - "severity": "error" - } - ], - "scss/dollar-variable-pattern": [ - "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$", - { - "message": "Name should be kebab-cased.", - "severity": "error" - } - ], - "scss/at-mixin-pattern": [ - "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$", - { - "message": "Name should be kebab-cased.", - "severity": "error" - } - ], - "scss/percent-placeholder-pattern": [ - "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$", - { - "message": "Name should be kebab-cased.", - "severity": "error" - } - ], - "scss/function-no-unknown": [ - true, - { - "ignoreFunctions": ["get-trailing-text-input-padding", "scale-duration", "theme", "var"], - "severity": "error" - } - ] - } -} diff --git a/packages/calcite-components/tsconfig-base.json b/packages/calcite-components/tsconfig-base.json index 943a8d4043b..80a161419ae 100755 --- a/packages/calcite-components/tsconfig-base.json +++ b/packages/calcite-components/tsconfig-base.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "allowJs": true, "allowSyntheticDefaultImports": true, "allowUnreachableCode": false, "declaration": false, diff --git a/packages/calcite-components/tsconfig.json b/packages/calcite-components/tsconfig.json index ac90cc3e7ee..7eb3a01cf6c 100755 --- a/packages/calcite-components/tsconfig.json +++ b/packages/calcite-components/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig-base", - "include": ["src"], + "include": ["src", "stylelintrc.cjs"], "exclude": ["src/demos/**/*", "src/tests/**/*", "src/**/shared-list-tests.ts", "src/**/*.stories.ts"] } From 832d9c6f6bef157d71be7caf4056d83487c8f7eb Mon Sep 17 00:00:00 2001 From: JC Franco Date: Fri, 13 Sep 2024 16:04:54 -0700 Subject: [PATCH 2/2] roll back allowJs changes --- packages/calcite-components/tsconfig-base.json | 1 - packages/calcite-components/tsconfig.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/calcite-components/tsconfig-base.json b/packages/calcite-components/tsconfig-base.json index 80a161419ae..943a8d4043b 100755 --- a/packages/calcite-components/tsconfig-base.json +++ b/packages/calcite-components/tsconfig-base.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "allowJs": true, "allowSyntheticDefaultImports": true, "allowUnreachableCode": false, "declaration": false, diff --git a/packages/calcite-components/tsconfig.json b/packages/calcite-components/tsconfig.json index 7eb3a01cf6c..ac90cc3e7ee 100755 --- a/packages/calcite-components/tsconfig.json +++ b/packages/calcite-components/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig-base", - "include": ["src", "stylelintrc.cjs"], + "include": ["src"], "exclude": ["src/demos/**/*", "src/tests/**/*", "src/**/shared-list-tests.ts", "src/**/*.stories.ts"] }