@html-eslint/eslint-plugin 0.40.3 → 0.41.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/lib/configs/recommended.js +4 -1
  2. package/lib/exports.ts +1 -1
  3. package/lib/index.js +17 -20
  4. package/lib/languages/html-language.js +13 -8
  5. package/lib/rules/attrs-newline.js +2 -0
  6. package/lib/rules/element-newline.js +3 -0
  7. package/lib/rules/id-naming-convention.js +2 -0
  8. package/lib/rules/indent/indent.js +4 -4
  9. package/lib/rules/index.js +6 -1
  10. package/lib/rules/lowercase.js +2 -0
  11. package/lib/rules/max-element-depth.js +2 -0
  12. package/lib/rules/no-abstract-roles.js +2 -0
  13. package/lib/rules/no-accesskey-attrs.js +2 -0
  14. package/lib/rules/no-aria-hidden-body.js +2 -0
  15. package/lib/rules/no-duplicate-attrs.js +2 -0
  16. package/lib/rules/no-duplicate-class.js +4 -2
  17. package/lib/rules/no-duplicate-id.js +2 -0
  18. package/lib/rules/no-extra-spacing-attrs.js +2 -0
  19. package/lib/rules/no-extra-spacing-text.js +2 -0
  20. package/lib/rules/no-heading-inside-button.js +3 -0
  21. package/lib/rules/no-inline-styles.js +3 -0
  22. package/lib/rules/no-invalid-role.js +5 -2
  23. package/lib/rules/no-multiple-empty-lines.js +3 -1
  24. package/lib/rules/no-multiple-h1.js +2 -0
  25. package/lib/rules/no-nested-interactive.js +2 -0
  26. package/lib/rules/no-non-scalable-viewport.js +2 -0
  27. package/lib/rules/no-obsolete-tags.js +2 -0
  28. package/lib/rules/no-positive-tabindex.js +2 -0
  29. package/lib/rules/no-restricted-attr-values.js +2 -0
  30. package/lib/rules/no-restricted-attrs.js +2 -0
  31. package/lib/rules/no-script-style-type.js +2 -0
  32. package/lib/rules/no-skip-heading-levels.js +2 -0
  33. package/lib/rules/no-target-blank.js +2 -0
  34. package/lib/rules/no-trailing-spaces.js +2 -0
  35. package/lib/rules/prefer-https.js +2 -0
  36. package/lib/rules/quotes.js +4 -2
  37. package/lib/rules/require-attrs.js +2 -0
  38. package/lib/rules/require-button-type.js +2 -0
  39. package/lib/rules/require-closing-tags.js +2 -0
  40. package/lib/rules/require-doctype.js +2 -0
  41. package/lib/rules/require-explicit-size.js +2 -0
  42. package/lib/rules/require-form-method.js +4 -2
  43. package/lib/rules/require-frame-title.js +2 -0
  44. package/lib/rules/require-img-alt.js +2 -0
  45. package/lib/rules/require-input-label.js +2 -0
  46. package/lib/rules/require-lang.js +2 -0
  47. package/lib/rules/require-li-container.js +2 -0
  48. package/lib/rules/require-meta-charset.js +2 -0
  49. package/lib/rules/require-meta-description.js +2 -0
  50. package/lib/rules/require-meta-viewport.js +2 -0
  51. package/lib/rules/require-open-graph-protocol.js +4 -1
  52. package/lib/rules/require-title.js +2 -0
  53. package/lib/rules/sort-attrs.js +2 -0
  54. package/lib/rules/use-baseline.js +2 -0
  55. package/lib/rules/utils/node.js +5 -6
  56. package/lib/rules/utils/rule.js +11 -0
  57. package/package.json +19 -13
  58. package/types/configs/recommended.d.ts +17 -17
  59. package/types/exports.d.ts +1 -1
  60. package/types/exports.d.ts.map +1 -1
  61. package/types/index.d.ts +64 -102
  62. package/types/index.d.ts.map +1 -1
  63. package/types/languages/html-language.d.ts +22 -21
  64. package/types/languages/html-language.d.ts.map +1 -1
  65. package/types/languages/html-source-code.d.ts +3 -1
  66. package/types/languages/html-source-code.d.ts.map +1 -1
  67. package/types/rules/attrs-newline.d.ts.map +1 -1
  68. package/types/rules/element-newline.d.ts.map +1 -1
  69. package/types/rules/id-naming-convention.d.ts.map +1 -1
  70. package/types/rules/index.d.ts +1 -69
  71. package/types/rules/lowercase.d.ts.map +1 -1
  72. package/types/rules/max-element-depth.d.ts.map +1 -1
  73. package/types/rules/no-abstract-roles.d.ts.map +1 -1
  74. package/types/rules/no-accesskey-attrs.d.ts.map +1 -1
  75. package/types/rules/no-aria-hidden-body.d.ts.map +1 -1
  76. package/types/rules/no-duplicate-attrs.d.ts.map +1 -1
  77. package/types/rules/no-duplicate-class.d.ts.map +1 -1
  78. package/types/rules/no-duplicate-id.d.ts.map +1 -1
  79. package/types/rules/no-extra-spacing-attrs.d.ts.map +1 -1
  80. package/types/rules/no-extra-spacing-text.d.ts.map +1 -1
  81. package/types/rules/no-heading-inside-button.d.ts.map +1 -1
  82. package/types/rules/no-inline-styles.d.ts.map +1 -1
  83. package/types/rules/no-invalid-role.d.ts.map +1 -1
  84. package/types/rules/no-multiple-empty-lines.d.ts +1 -1
  85. package/types/rules/no-multiple-empty-lines.d.ts.map +1 -1
  86. package/types/rules/no-multiple-h1.d.ts.map +1 -1
  87. package/types/rules/no-nested-interactive.d.ts.map +1 -1
  88. package/types/rules/no-non-scalable-viewport.d.ts.map +1 -1
  89. package/types/rules/no-obsolete-tags.d.ts.map +1 -1
  90. package/types/rules/no-positive-tabindex.d.ts.map +1 -1
  91. package/types/rules/no-restricted-attr-values.d.ts.map +1 -1
  92. package/types/rules/no-restricted-attrs.d.ts.map +1 -1
  93. package/types/rules/no-script-style-type.d.ts.map +1 -1
  94. package/types/rules/no-skip-heading-levels.d.ts.map +1 -1
  95. package/types/rules/no-target-blank.d.ts.map +1 -1
  96. package/types/rules/no-trailing-spaces.d.ts.map +1 -1
  97. package/types/rules/prefer-https.d.ts.map +1 -1
  98. package/types/rules/quotes.d.ts.map +1 -1
  99. package/types/rules/require-attrs.d.ts.map +1 -1
  100. package/types/rules/require-button-type.d.ts.map +1 -1
  101. package/types/rules/require-closing-tags.d.ts.map +1 -1
  102. package/types/rules/require-doctype.d.ts.map +1 -1
  103. package/types/rules/require-explicit-size.d.ts.map +1 -1
  104. package/types/rules/require-form-method.d.ts.map +1 -1
  105. package/types/rules/require-frame-title.d.ts.map +1 -1
  106. package/types/rules/require-img-alt.d.ts.map +1 -1
  107. package/types/rules/require-input-label.d.ts.map +1 -1
  108. package/types/rules/require-lang.d.ts.map +1 -1
  109. package/types/rules/require-li-container.d.ts.map +1 -1
  110. package/types/rules/require-meta-charset.d.ts.map +1 -1
  111. package/types/rules/require-meta-description.d.ts.map +1 -1
  112. package/types/rules/require-meta-viewport.d.ts.map +1 -1
  113. package/types/rules/require-open-graph-protocol.d.ts.map +1 -1
  114. package/types/rules/require-title.d.ts.map +1 -1
  115. package/types/rules/sort-attrs.d.ts.map +1 -1
  116. package/types/rules/use-baseline.d.ts.map +1 -1
  117. package/types/rules/utils/node.d.ts +1 -1
  118. package/types/rules/utils/node.d.ts.map +1 -1
  119. package/types/rules/utils/rule.d.ts +6 -0
  120. package/types/rules/utils/rule.d.ts.map +1 -0
  121. package/types/rules/utils/source-code.d.ts +1 -6
  122. package/types/rules/utils/source-code.d.ts.map +1 -1
@@ -5,6 +5,7 @@
5
5
  const { RULE_CATEGORY } = require("../constants");
6
6
  const { findAttr } = require("./utils/node");
7
7
  const { createVisitors } = require("./utils/visitors");
8
+ const { getRuleUrl } = require("./utils/rule");
8
9
 
9
10
  const MESSAGE_IDS = {
10
11
  MISSING: "missing",
@@ -21,6 +22,7 @@ module.exports = {
21
22
  description: "Disallow usage of unsafe `target='_blank'`",
22
23
  category: RULE_CATEGORY.BEST_PRACTICE,
23
24
  recommended: false,
25
+ url: getRuleUrl("no-target-blank"),
24
26
  },
25
27
 
26
28
  fixable: null,
@@ -16,6 +16,7 @@ const {
16
16
  shouldCheckTemplateLiteral,
17
17
  } = require("./utils/settings");
18
18
  const { getSourceCode } = require("./utils/source-code");
19
+ const { getRuleUrl } = require("./utils/rule");
19
20
 
20
21
  const MESSAGE_IDS = {
21
22
  TRAILING_SPACE: "trailingSpace",
@@ -31,6 +32,7 @@ module.exports = {
31
32
  description: "Disallow trailing whitespace at the end of lines",
32
33
  recommended: false,
33
34
  category: RULE_CATEGORY.STYLE,
35
+ url: getRuleUrl("no-trailing-spaces"),
34
36
  },
35
37
  fixable: true,
36
38
  schema: [],
@@ -9,6 +9,7 @@
9
9
  const { RULE_CATEGORY } = require("../constants");
10
10
  const { findAttr, isScript } = require("./utils/node");
11
11
  const { createVisitors } = require("./utils/visitors");
12
+ const { getRuleUrl } = require("./utils/rule");
12
13
 
13
14
  const MESSAGE_IDS = {
14
15
  UNEXPECTED: "unexpected",
@@ -74,6 +75,7 @@ module.exports = {
74
75
  description: "Prefer to use HTTPS for embedded resources",
75
76
  recommended: false,
76
77
  category: RULE_CATEGORY.BEST_PRACTICE,
78
+ url: getRuleUrl("prefer-https"),
77
79
  },
78
80
  fixable: false,
79
81
  schema: [],
@@ -9,10 +9,11 @@
9
9
  * @typedef { import("../types").RuleModule<[Option]> } RuleModule
10
10
  */
11
11
 
12
- const { NodeTypes } = require("es-html-parser");
12
+ const { NODE_TYPES } = require("@html-eslint/parser");
13
13
  const { RULE_CATEGORY } = require("../constants");
14
14
  const { getSourceCode } = require("./utils/source-code");
15
15
  const { createVisitors } = require("./utils/visitors");
16
+ const { getRuleUrl } = require("./utils/rule");
16
17
 
17
18
  const MESSAGE_IDS = {
18
19
  UNEXPECTED: "unexpected",
@@ -38,6 +39,7 @@ module.exports = {
38
39
  "Enforce consistent quoting attributes with double(\") or single(')",
39
40
  category: RULE_CATEGORY.STYLE,
40
41
  recommended: true,
42
+ url: getRuleUrl("quotes"),
41
43
  },
42
44
  fixable: true,
43
45
  schema: [
@@ -92,7 +94,7 @@ module.exports = {
92
94
  * Allow template expression.
93
95
  * ex: html`<div foo=${foo}></div>`
94
96
  */
95
- if (attr.value.parts.some((part) => part.type === NodeTypes.Template)) {
97
+ if (attr.value.parts.some((part) => part.type === NODE_TYPES.Template)) {
96
98
  return;
97
99
  }
98
100
 
@@ -17,6 +17,7 @@
17
17
  const { NODE_TYPES } = require("@html-eslint/parser");
18
18
  const { RULE_CATEGORY } = require("../constants");
19
19
  const { createVisitors } = require("./utils/visitors");
20
+ const { getRuleUrl } = require("./utils/rule");
20
21
 
21
22
  const MESSAGE_IDS = {
22
23
  MISSING: "missing",
@@ -34,6 +35,7 @@ module.exports = {
34
35
  description: "Require specified attributes",
35
36
  category: RULE_CATEGORY.BEST_PRACTICE,
36
37
  recommended: false,
38
+ url: getRuleUrl("require-attrs"),
37
39
  },
38
40
  fixable: "code",
39
41
  schema: {
@@ -7,6 +7,7 @@
7
7
  const { RULE_CATEGORY } = require("../constants");
8
8
  const { findAttr } = require("./utils/node");
9
9
  const { createVisitors } = require("./utils/visitors");
10
+ const { getRuleUrl } = require("./utils/rule");
10
11
 
11
12
  const MESSAGE_IDS = {
12
13
  MISSING: "missing",
@@ -29,6 +30,7 @@ module.exports = {
29
30
  description: "Require use of button element with a valid type attribute.",
30
31
  category: RULE_CATEGORY.BEST_PRACTICE,
31
32
  recommended: false,
33
+ url: getRuleUrl("require-button-type"),
32
34
  },
33
35
 
34
36
  fixable: true,
@@ -9,6 +9,7 @@
9
9
 
10
10
  const { RULE_CATEGORY, VOID_ELEMENTS } = require("../constants");
11
11
  const { createVisitors } = require("./utils/visitors");
12
+ const { getRuleUrl } = require("./utils/rule");
12
13
 
13
14
  const VOID_ELEMENTS_SET = new Set(VOID_ELEMENTS);
14
15
 
@@ -29,6 +30,7 @@ module.exports = {
29
30
  description: "Require closing tags.",
30
31
  category: RULE_CATEGORY.BEST_PRACTICE,
31
32
  recommended: true,
33
+ url: getRuleUrl("require-closing-tags"),
32
34
  },
33
35
 
34
36
  fixable: true,
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  const { RULE_CATEGORY } = require("../constants");
6
+ const { getRuleUrl } = require("./utils/rule");
6
7
 
7
8
  const MESSAGE_IDS = {
8
9
  MISSING: "missing",
@@ -19,6 +20,7 @@ module.exports = {
19
20
  description: "Require `<!DOCTYPE HTML>` in html,",
20
21
  category: RULE_CATEGORY.BEST_PRACTICE,
21
22
  recommended: true,
23
+ url: getRuleUrl("require-doctype"),
22
24
  },
23
25
 
24
26
  fixable: true,
@@ -12,6 +12,7 @@
12
12
  const { RULE_CATEGORY } = require("../constants");
13
13
  const { findAttr } = require("./utils/node");
14
14
  const { createVisitors } = require("./utils/visitors");
15
+ const { getRuleUrl } = require("./utils/rule");
15
16
 
16
17
  const MESSAGE_IDS = {
17
18
  MISSING_HEIGHT: "missingHeight",
@@ -32,6 +33,7 @@ module.exports = {
32
33
  "Enforces that some elements (img, iframe) have explicitly defined width and height attributes.",
33
34
  category: RULE_CATEGORY.BEST_PRACTICE,
34
35
  recommended: false,
36
+ url: getRuleUrl("require-explicit-size"),
35
37
  },
36
38
 
37
39
  fixable: null,
@@ -2,10 +2,11 @@
2
2
  * @typedef { import("../types").RuleModule<[]> } RuleModule
3
3
  */
4
4
 
5
- const { NodeTypes } = require("es-html-parser");
5
+ const { NODE_TYPES } = require("@html-eslint/parser");
6
6
  const { RULE_CATEGORY } = require("../constants");
7
7
  const { findAttr } = require("./utils/node");
8
8
  const { createVisitors } = require("./utils/visitors");
9
+ const { getRuleUrl } = require("./utils/rule");
9
10
 
10
11
  const MESSAGE_IDS = {
11
12
  MISSING: "missing",
@@ -26,6 +27,7 @@ module.exports = {
26
27
  description: "Require `method` attribute in `<form>`",
27
28
  category: RULE_CATEGORY.ACCESSIBILITY,
28
29
  recommended: false,
30
+ url: getRuleUrl("require-form-method"),
29
31
  },
30
32
 
31
33
  fixable: false,
@@ -65,7 +67,7 @@ module.exports = {
65
67
 
66
68
  if (
67
69
  method.value.parts &&
68
- method.value.parts.some((part) => part.type !== NodeTypes.Part)
70
+ method.value.parts.some((part) => part.type !== NODE_TYPES.Part)
69
71
  ) {
70
72
  return;
71
73
  }
@@ -5,6 +5,7 @@
5
5
  const { RULE_CATEGORY } = require("../constants");
6
6
  const { findAttr } = require("./utils/node");
7
7
  const { createVisitors } = require("./utils/visitors");
8
+ const { getRuleUrl } = require("./utils/rule");
8
9
 
9
10
  const MESSAGE_IDS = {
10
11
  MISSING: "missing",
@@ -22,6 +23,7 @@ module.exports = {
22
23
  description: "Require `title` in `<frame>`, `<iframe>`",
23
24
  category: RULE_CATEGORY.ACCESSIBILITY,
24
25
  recommended: false,
26
+ url: getRuleUrl("require-frame-title"),
25
27
  },
26
28
 
27
29
  fixable: false,
@@ -9,6 +9,7 @@
9
9
 
10
10
  const { RULE_CATEGORY } = require("../constants");
11
11
  const { createVisitors } = require("./utils/visitors");
12
+ const { getRuleUrl } = require("./utils/rule");
12
13
 
13
14
  const MESSAGE_IDS = {
14
15
  MISSING_ALT: "missingAlt",
@@ -25,6 +26,7 @@ module.exports = {
25
26
  description: "Require `alt` attribute at `<img>` tag",
26
27
  category: RULE_CATEGORY.ACCESSIBILITY,
27
28
  recommended: true,
29
+ url: getRuleUrl("require-img-alt"),
28
30
  },
29
31
 
30
32
  fixable: null,
@@ -6,6 +6,7 @@
6
6
  const { RULE_CATEGORY } = require("../constants");
7
7
  const { createVisitors } = require("./utils/visitors");
8
8
  const { findParent, isTag } = require("./utils/node");
9
+ const { getRuleUrl } = require("./utils/rule");
9
10
 
10
11
  const MESSAGE_IDS = {
11
12
  MISSING: "missingLabel",
@@ -27,6 +28,7 @@ module.exports = {
27
28
  "Enforces use of label for form elements(`input`, `textarea`, `select`)",
28
29
  category: RULE_CATEGORY.ACCESSIBILITY,
29
30
  recommended: false,
31
+ url: getRuleUrl("require-input-label"),
30
32
  },
31
33
  fixable: null,
32
34
  schema: [],
@@ -5,6 +5,7 @@
5
5
  const { RULE_CATEGORY } = require("../constants");
6
6
  const { findAttr } = require("./utils/node");
7
7
  const { createVisitors } = require("./utils/visitors");
8
+ const { getRuleUrl } = require("./utils/rule");
8
9
 
9
10
  const MESSAGE_IDS = {
10
11
  MISSING: "missing",
@@ -22,6 +23,7 @@ module.exports = {
22
23
  description: "Require `lang` attribute at `<html>` tag",
23
24
  category: RULE_CATEGORY.SEO,
24
25
  recommended: true,
26
+ url: getRuleUrl("require-lang"),
25
27
  },
26
28
 
27
29
  fixable: null,
@@ -4,6 +4,7 @@
4
4
 
5
5
  const { NODE_TYPES } = require("@html-eslint/parser");
6
6
  const { RULE_CATEGORY } = require("../constants");
7
+ const { getRuleUrl } = require("./utils/rule");
7
8
 
8
9
  const MESSAGE_IDS = {
9
10
  INVALID: "invalid",
@@ -22,6 +23,7 @@ module.exports = {
22
23
  description: "Enforce `<li>` to be in `<ul>`, `<ol>` or `<menu>`.",
23
24
  category: RULE_CATEGORY.BEST_PRACTICE,
24
25
  recommended: true,
26
+ url: getRuleUrl("require-li-container"),
25
27
  },
26
28
 
27
29
  fixable: null,
@@ -7,6 +7,7 @@
7
7
  const { RULE_CATEGORY } = require("../constants");
8
8
  const { find } = require("./utils/array");
9
9
  const { findAttr, isTag } = require("./utils/node");
10
+ const { getRuleUrl } = require("./utils/rule");
10
11
 
11
12
  const MESSAGE_IDS = {
12
13
  MISSING: "missing",
@@ -32,6 +33,7 @@ module.exports = {
32
33
  description: 'Enforce to use `<meta charset="...">` in `<head>`',
33
34
  category: RULE_CATEGORY.BEST_PRACTICE,
34
35
  recommended: false,
36
+ url: getRuleUrl("require-meta-charset"),
35
37
  },
36
38
 
37
39
  fixable: null,
@@ -6,6 +6,7 @@
6
6
  const { RULE_CATEGORY } = require("../constants");
7
7
  const { filter } = require("./utils/array");
8
8
  const { findAttr, isTag } = require("./utils/node");
9
+ const { getRuleUrl } = require("./utils/rule");
9
10
 
10
11
  const MESSAGE_IDS = {
11
12
  MISSING: "missing",
@@ -31,6 +32,7 @@ module.exports = {
31
32
  description: 'Require use of `<meta name="description">` in `<head>`',
32
33
  category: RULE_CATEGORY.SEO,
33
34
  recommended: false,
35
+ url: getRuleUrl("require-meta-description"),
34
36
  },
35
37
 
36
38
  fixable: null,
@@ -7,6 +7,7 @@
7
7
  const { RULE_CATEGORY } = require("../constants");
8
8
  const { find } = require("./utils/array");
9
9
  const { findAttr, isTag } = require("./utils/node");
10
+ const { getRuleUrl } = require("./utils/rule");
10
11
 
11
12
  const MESSAGE_IDS = {
12
13
  MISSING: "missing",
@@ -40,6 +41,7 @@ module.exports = {
40
41
  description: 'Enforce to use `<meta name="viewport">` in `<head>`',
41
42
  category: RULE_CATEGORY.ACCESSIBILITY,
42
43
  recommended: false,
44
+ url: getRuleUrl("require-meta-viewport"),
43
45
  },
44
46
 
45
47
  fixable: null,
@@ -10,6 +10,7 @@
10
10
  const { RULE_CATEGORY } = require("../constants");
11
11
  const { filter } = require("./utils/array");
12
12
  const { findAttr, isTag } = require("./utils/node");
13
+ const { getRuleUrl } = require("./utils/rule");
13
14
 
14
15
  const MESSAGE_IDS = {
15
16
  MISSING: "missing",
@@ -42,9 +43,11 @@ module.exports = {
42
43
  type: "code",
43
44
 
44
45
  docs: {
45
- description: 'Enforce to use `<meta name="viewport">` in `<head>`',
46
+ description:
47
+ "Enforce to use specified meta tags for open graph protocol.",
46
48
  category: RULE_CATEGORY.SEO,
47
49
  recommended: false,
50
+ url: getRuleUrl("require-open-graph-protocol"),
48
51
  },
49
52
 
50
53
  fixable: null,
@@ -8,6 +8,7 @@
8
8
  const { RULE_CATEGORY } = require("../constants");
9
9
  const { find } = require("./utils/array");
10
10
  const { isText, isTag } = require("./utils/node");
11
+ const { getRuleUrl } = require("./utils/rule");
11
12
 
12
13
  const MESSAGE_IDS = {
13
14
  MISSING_TITLE: "missing",
@@ -41,6 +42,7 @@ module.exports = {
41
42
  description: "Require `<title><title/>` in the `<head><head/>`",
42
43
  category: RULE_CATEGORY.SEO,
43
44
  recommended: true,
45
+ url: getRuleUrl("require-title"),
44
46
  },
45
47
 
46
48
  fixable: null,
@@ -12,6 +12,7 @@ const { hasTemplate } = require("./utils/node");
12
12
  const { RULE_CATEGORY } = require("../constants");
13
13
  const { getSourceCode } = require("./utils/source-code");
14
14
  const { createVisitors } = require("./utils/visitors");
15
+ const { getRuleUrl } = require("./utils/rule");
15
16
 
16
17
  const MESSAGE_IDS = {
17
18
  UNSORTED: "unsorted",
@@ -28,6 +29,7 @@ module.exports = {
28
29
  description: "Enforce attributes alphabetical sorting",
29
30
  category: RULE_CATEGORY.STYLE,
30
31
  recommended: false,
32
+ url: getRuleUrl("sort-attrs"),
31
33
  },
32
34
  fixable: "code",
33
35
  schema: [
@@ -16,6 +16,7 @@ const {
16
16
  BASELINE_LOW,
17
17
  } = require("./utils/baseline");
18
18
  const { createVisitors } = require("./utils/visitors");
19
+ const { getRuleUrl } = require("./utils/rule");
19
20
 
20
21
  const MESSAGE_IDS = {
21
22
  NOT_BASELINE_ELEMENT: "notBaselineElement",
@@ -33,6 +34,7 @@ module.exports = {
33
34
  description: "Enforce the use of baseline features.",
34
35
  recommended: true,
35
36
  category: RULE_CATEGORY.BEST_PRACTICE,
37
+ url: getRuleUrl("use-baseline"),
36
38
  },
37
39
  fixable: null,
38
40
  schema: [
@@ -16,11 +16,10 @@
16
16
  * @typedef { import("@html-eslint/types").CloseTemplate } CloseTemplate
17
17
  * @typedef { import("eslint").AST.Range } Range
18
18
  * @typedef { import("eslint").AST.SourceLocation } SourceLocation
19
- * @typedef { import("es-html-parser").AnyToken } AnyToken
19
+ * @typedef { import("@html-eslint/types").AnyToken } AnyToken
20
20
  */
21
21
 
22
22
  const { NODE_TYPES } = require("@html-eslint/parser");
23
- const { NodeTypes, TokenTypes } = require("es-html-parser");
24
23
 
25
24
  /**
26
25
  * @param {Tag | ScriptTag | StyleTag} node
@@ -68,7 +67,7 @@ function isRangesOverlap(rangeA, rangeB) {
68
67
  */
69
68
  function isOverlapWithTemplates(parts, range) {
70
69
  return parts
71
- .filter((part) => part.type !== NodeTypes.Part)
70
+ .filter((part) => part.type !== NODE_TYPES.Part)
72
71
  .some((part) => isRangesOverlap(part.range, range));
73
72
  }
74
73
 
@@ -77,7 +76,7 @@ function isOverlapWithTemplates(parts, range) {
77
76
  * @returns {boolean}
78
77
  */
79
78
  function hasTemplate(node) {
80
- return node.parts.some((part) => part.type !== NodeTypes.Part);
79
+ return node.parts.some((part) => part.type !== NODE_TYPES.Part);
81
80
  }
82
81
 
83
82
  /**
@@ -101,7 +100,7 @@ function splitToLineNodes(node) {
101
100
  function hasTemplate(range) {
102
101
  return parts.some(
103
102
  (part) =>
104
- part.type !== NodeTypes.Part && isRangesOverlap(part.range, range)
103
+ part.type !== NODE_TYPES.Part && isRangesOverlap(part.range, range)
105
104
  );
106
105
  }
107
106
 
@@ -248,7 +247,7 @@ function getTemplateTokens(tokens) {
248
247
  .map((token) => token["parts"] || [])
249
248
  )
250
249
  // @ts-ignore
251
- .filter((token) => token.type !== TokenTypes.Part)
250
+ .filter((token) => token.type !== NODE_TYPES.Part)
252
251
  );
253
252
  }
254
253
 
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @param {string} ruleName
4
+ */
5
+ function getRuleUrl(ruleName) {
6
+ return "https://html-eslint.org/docs/rules/" + ruleName;
7
+ }
8
+
9
+ module.exports = {
10
+ getRuleUrl,
11
+ };
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@html-eslint/eslint-plugin",
3
- "version": "0.40.3",
4
- "description": "ESLint plugin for html",
3
+ "version": "0.41.0-alpha.0",
4
+ "type": "commonjs",
5
+ "description": "ESLint plugin for HTML",
5
6
  "author": "yeonjuan",
6
7
  "homepage": "https://github.com/yeonjuan/html-eslint#readme",
7
8
  "license": "MIT",
@@ -23,7 +24,7 @@
23
24
  "test:legacy": "TEST_ESLINT_LEGACY_CONFIG=true && jest",
24
25
  "ts": "tsc --noEmit",
25
26
  "lint": "eslint .",
26
- "build": "rimraf types && tsc --project tsconfig.build.json"
27
+ "build": "rimraf types && tsc --project tsconfig.build.json"
27
28
  },
28
29
  "bugs": {
29
30
  "url": "https://github.com/yeonjuan/html-eslint/issues"
@@ -38,20 +39,25 @@
38
39
  "accessibility"
39
40
  ],
40
41
  "dependencies": {
41
- "@eslint/plugin-kit": "0.2.8",
42
- "@html-eslint/parser": "^0.40.0",
43
- "@html-eslint/template-parser": "^0.40.0",
44
- "@html-eslint/template-syntax-parser": "^0.40.0"
42
+ "@eslint/plugin-kit": "^0.3.1",
43
+ "@html-eslint/parser": "^0.41.0-alpha.0",
44
+ "@html-eslint/template-parser": "^0.41.0-alpha.0",
45
+ "@html-eslint/template-syntax-parser": "^0.41.0-alpha.0"
46
+ },
47
+ "peerDependencies": {
48
+ "eslint": "^8.0.0 || ^9.0.0"
45
49
  },
46
50
  "devDependencies": {
47
- "@eslint/core": "0.13.0",
48
- "@html-eslint/types": "^0.40.0",
49
- "@types/eslint": "^9.6.1",
51
+ "@eslint/core": "^0.14.0",
52
+ "@html-eslint/types": "^0.41.0-alpha.0",
50
53
  "@types/estree": "^0.0.47",
51
54
  "es-html-parser": "0.2.0",
52
- "eslint": "^9.21.0",
55
+ "eslint": "^9.27.0",
53
56
  "espree": "^10.3.0",
54
- "typescript": "^5.7.2"
57
+ "typescript": "^5.8.3"
58
+ },
59
+ "engines": {
60
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
55
61
  },
56
- "gitHead": "91e2ce609118eb1d0b2e2078fe465776bc60bc51"
62
+ "gitHead": "a1d2d99f91d5adc86184ea15151b5c04bd53ea8d"
57
63
  }
@@ -1,21 +1,21 @@
1
1
  export let rules: {
2
- "@html-eslint/require-lang": string;
3
- "@html-eslint/require-img-alt": string;
4
- "@html-eslint/require-doctype": string;
5
- "@html-eslint/require-title": string;
6
- "@html-eslint/no-multiple-h1": string;
7
- "@html-eslint/no-extra-spacing-attrs": string;
8
- "@html-eslint/attrs-newline": string;
9
- "@html-eslint/element-newline": (string | {
2
+ "@html-eslint/require-lang": "error";
3
+ "@html-eslint/require-img-alt": "error";
4
+ "@html-eslint/require-doctype": "error";
5
+ "@html-eslint/require-title": "error";
6
+ "@html-eslint/no-multiple-h1": "error";
7
+ "@html-eslint/no-extra-spacing-attrs": "error";
8
+ "@html-eslint/attrs-newline": "error";
9
+ "@html-eslint/element-newline": ["error", {
10
10
  inline: string[];
11
- })[];
12
- "@html-eslint/no-duplicate-id": string;
13
- "@html-eslint/indent": string;
14
- "@html-eslint/require-li-container": string;
15
- "@html-eslint/quotes": string;
16
- "@html-eslint/no-obsolete-tags": string;
17
- "@html-eslint/require-closing-tags": string;
18
- "@html-eslint/no-duplicate-attrs": string;
19
- "@html-eslint/use-baseline": string;
11
+ }];
12
+ "@html-eslint/no-duplicate-id": "error";
13
+ "@html-eslint/indent": "error";
14
+ "@html-eslint/require-li-container": "error";
15
+ "@html-eslint/quotes": "error";
16
+ "@html-eslint/no-obsolete-tags": "error";
17
+ "@html-eslint/require-closing-tags": "error";
18
+ "@html-eslint/no-duplicate-attrs": "error";
19
+ "@html-eslint/use-baseline": "error";
20
20
  };
21
21
  //# sourceMappingURL=recommended.d.ts.map
@@ -1,3 +1,3 @@
1
1
  import plugin = require("./index");
2
- export default plugin;
2
+ export = plugin;
3
3
  //# sourceMappingURL=exports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../lib/exports.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,GAAG,QAAQ,SAAS,CAAC,CAAC;AACnC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../lib/exports.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,GAAG,QAAQ,SAAS,CAAC,CAAC;AACnC,SAAS,MAAM,CAAC"}