diff --git a/package.json b/package.json index d3aef39f..0f5496d2 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@webref/css": "^8.5.6", "c8": "^11.0.0", "dedent": "^1.5.3", - "eslint": "^10.0.0", + "eslint": "^10.4.0", "eslint-config-eslint": "^14.0.0", "eslint-plugin-eslint-plugin": "^7.3.2", "globals": "^17.0.0", diff --git a/src/index.js b/src/index.js index c07a63e3..11978cec 100644 --- a/src/index.js +++ b/src/index.js @@ -19,6 +19,7 @@ import rules from "./build/rules.js"; const plugin = { meta: { name: "@eslint/css", + namespace: "css", version: "1.2.0", // x-release-please-version }, languages: { diff --git a/src/rules/font-family-fallbacks.js b/src/rules/font-family-fallbacks.js index 3a36a722..33999959 100644 --- a/src/rules/font-family-fallbacks.js +++ b/src/rules/font-family-fallbacks.js @@ -117,10 +117,12 @@ function reportFontWithoutFallbacksInFontProperty( export default { meta: { type: "suggestion", + languages: ["css/css"], docs: { description: "Enforce use of fallback fonts and a generic font last", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/font-family-fallbacks.md", }, diff --git a/src/rules/no-duplicate-imports.js b/src/rules/no-duplicate-imports.js index 0e1749a1..1ec9899d 100644 --- a/src/rules/no-duplicate-imports.js +++ b/src/rules/no-duplicate-imports.js @@ -23,11 +23,13 @@ export default { meta: { type: "problem", + languages: ["css/css"], fixable: "code", docs: { description: "Disallow duplicate @import rules", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-duplicate-imports.md", }, diff --git a/src/rules/no-duplicate-keyframe-selectors.js b/src/rules/no-duplicate-keyframe-selectors.js index b0fa46f5..3fcf7535 100644 --- a/src/rules/no-duplicate-keyframe-selectors.js +++ b/src/rules/no-duplicate-keyframe-selectors.js @@ -21,9 +21,11 @@ export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow duplicate selectors within keyframe blocks", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-duplicate-keyframe-selectors.md", }, diff --git a/src/rules/no-empty-blocks.js b/src/rules/no-empty-blocks.js index 2836dd8c..53828fd5 100644 --- a/src/rules/no-empty-blocks.js +++ b/src/rules/no-empty-blocks.js @@ -21,9 +21,11 @@ export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow empty blocks", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-empty-blocks.md", }, diff --git a/src/rules/no-important.js b/src/rules/no-important.js index 07e04356..4ea99d12 100644 --- a/src/rules/no-important.js +++ b/src/rules/no-important.js @@ -30,11 +30,13 @@ const trailingWhitespacePattern = /\s*$/u; export default { meta: { type: "problem", + languages: ["css/css"], hasSuggestions: true, docs: { description: "Disallow !important flags", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-important.md", }, diff --git a/src/rules/no-invalid-at-rule-placement.js b/src/rules/no-invalid-at-rule-placement.js index 2c1ea426..f2177b1f 100644 --- a/src/rules/no-invalid-at-rule-placement.js +++ b/src/rules/no-invalid-at-rule-placement.js @@ -21,9 +21,11 @@ export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow invalid placement of at-rules", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-invalid-at-rule-placement.md", }, diff --git a/src/rules/no-invalid-at-rules.js b/src/rules/no-invalid-at-rules.js index 26e97028..d50d6d01 100644 --- a/src/rules/no-invalid-at-rules.js +++ b/src/rules/no-invalid-at-rules.js @@ -78,11 +78,13 @@ function extractMetaDataFromError(error) { export default { meta: { type: "problem", + languages: ["css/css"], fixable: "code", docs: { description: "Disallow invalid at-rules", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-invalid-at-rules.md", }, diff --git a/src/rules/no-invalid-named-grid-areas.js b/src/rules/no-invalid-named-grid-areas.js index 4bc4afa4..f4cfc049 100644 --- a/src/rules/no-invalid-named-grid-areas.js +++ b/src/rules/no-invalid-named-grid-areas.js @@ -83,9 +83,11 @@ const validProps = new Set(["grid-template-areas", "grid-template", "grid"]); export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow invalid named grid areas", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-invalid-named-grid-areas.md", }, diff --git a/src/rules/no-invalid-properties.js b/src/rules/no-invalid-properties.js index 8a6bd638..890806b6 100644 --- a/src/rules/no-invalid-properties.js +++ b/src/rules/no-invalid-properties.js @@ -90,9 +90,11 @@ function getVarFallbackList(value) { export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow invalid properties", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-invalid-properties.md", }, diff --git a/src/rules/no-unmatchable-selectors.js b/src/rules/no-unmatchable-selectors.js index 482e3780..3d5b5bc4 100644 --- a/src/rules/no-unmatchable-selectors.js +++ b/src/rules/no-unmatchable-selectors.js @@ -21,9 +21,11 @@ export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow unmatchable selectors", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/no-unmatchable-selectors.md", }, diff --git a/src/rules/prefer-logical-properties.js b/src/rules/prefer-logical-properties.js index 729a3621..082e393c 100644 --- a/src/rules/prefer-logical-properties.js +++ b/src/rules/prefer-logical-properties.js @@ -137,11 +137,13 @@ const unitReplacements = new Map([ export default { meta: { type: "problem", + languages: ["css/css"], fixable: "code", docs: { description: "Enforce the use of logical properties", + dialects: ["CSS"], url: "https://github.com/eslint/css/blob/main/docs/rules/prefer-logical-properties.md", }, diff --git a/src/rules/relative-font-units.js b/src/rules/relative-font-units.js index 59d4d585..e17382b6 100644 --- a/src/rules/relative-font-units.js +++ b/src/rules/relative-font-units.js @@ -54,9 +54,11 @@ const disallowedFontSizeKeywords = new Set([ export default { meta: { type: "suggestion", + languages: ["css/css"], docs: { description: "Enforce the use of relative font units", + dialects: ["CSS"], recommended: false, url: "https://github.com/eslint/css/blob/main/docs/rules/relative-font-units.md", }, diff --git a/src/rules/selector-complexity.js b/src/rules/selector-complexity.js index 4f569bd5..01e80602 100644 --- a/src/rules/selector-complexity.js +++ b/src/rules/selector-complexity.js @@ -156,9 +156,11 @@ function getDisallowedCombinatorsLocation( export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Disallow and limit CSS selectors", + dialects: ["CSS"], recommended: false, url: "https://github.com/eslint/css/blob/main/docs/rules/selector-complexity.md", }, diff --git a/src/rules/use-baseline.js b/src/rules/use-baseline.js index 10caf837..66be0a2d 100644 --- a/src/rules/use-baseline.js +++ b/src/rules/use-baseline.js @@ -487,9 +487,11 @@ class BaselineAvailability { export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Enforce the use of baseline features", + dialects: ["CSS"], recommended: true, url: "https://github.com/eslint/css/blob/main/docs/rules/use-baseline.md", }, diff --git a/src/rules/use-layers.js b/src/rules/use-layers.js index 49f320de..c652f269 100644 --- a/src/rules/use-layers.js +++ b/src/rules/use-layers.js @@ -26,9 +26,11 @@ export default { meta: { type: "problem", + languages: ["css/css"], docs: { description: "Require use of layers", + dialects: ["CSS"], url: "https://github.com/eslint/css/blob/main/docs/rules/use-layers.md", }, diff --git a/tests/plugin/eslint.test.js b/tests/plugin/eslint.test.js index 30b3b166..8c60fec0 100644 --- a/tests/plugin/eslint.test.js +++ b/tests/plugin/eslint.test.js @@ -43,6 +43,34 @@ describe("Plugin", () => { .map(([name]) => `css/${name}`); assert.deepStrictEqual(actualRuleIds, expectedRuleIds); }); + + it("rules should work when the plugin is registered under a custom namespace", async () => { + const eslint = new ESLint({ + overrideConfigFile: true, + overrideConfig: { + files: ["**/*.css"], + plugins: { + eslintcss: css, + }, + language: "eslintcss/css", + rules: { + "eslintcss/no-empty-blocks": "error", + }, + }, + }); + + const results = await eslint.lintText("a {}", { + filePath: "test.css", + }); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual( + results[0].messages[0].ruleId, + "eslintcss/no-empty-blocks", + ); + assert.strictEqual(results[0].messages[0].messageId, "emptyBlock"); + }); }); describe("languageOptions", () => { diff --git a/tests/types/types.test.ts b/tests/types/types.test.ts index 1acd1587..24ff42b3 100644 --- a/tests/types/types.test.ts +++ b/tests/types/types.test.ts @@ -60,6 +60,7 @@ import type { css satisfies Plugin; css.meta.name satisfies string; +css.meta.namespace satisfies string; css.meta.version satisfies string; // Check that these languages are defined: