@html-eslint/eslint-plugin 0.31.1-alpha.0 → 0.32.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 (129) hide show
  1. package/lib/rules/attrs-newline.js +3 -5
  2. package/lib/rules/element-newline.js +11 -9
  3. package/lib/rules/id-naming-convention.js +5 -5
  4. package/lib/rules/indent/indent.js +119 -69
  5. package/lib/rules/index.js +12 -0
  6. package/lib/rules/lowercase.js +7 -8
  7. package/lib/rules/no-abstract-roles.js +4 -4
  8. package/lib/rules/no-accesskey-attrs.js +4 -4
  9. package/lib/rules/no-duplicate-attrs.js +4 -4
  10. package/lib/rules/no-duplicate-id.js +7 -7
  11. package/lib/rules/no-extra-spacing-attrs.js +14 -14
  12. package/lib/rules/no-extra-spacing-text.js +9 -10
  13. package/lib/rules/no-heading-inside-button.js +54 -0
  14. package/lib/rules/no-inline-styles.js +0 -1
  15. package/lib/rules/no-invalid-role.js +287 -0
  16. package/lib/rules/no-multiple-empty-lines.js +5 -5
  17. package/lib/rules/no-multiple-h1.js +2 -2
  18. package/lib/rules/no-nested-interactive.js +120 -0
  19. package/lib/rules/no-positive-tabindex.js +4 -4
  20. package/lib/rules/no-restricted-attr-values.js +6 -6
  21. package/lib/rules/no-restricted-attrs.js +6 -6
  22. package/lib/rules/no-script-style-type.js +4 -4
  23. package/lib/rules/no-skip-heading-levels.js +2 -2
  24. package/lib/rules/no-trailing-spaces.js +3 -3
  25. package/lib/rules/prefer-https.js +106 -0
  26. package/lib/rules/quotes.js +8 -8
  27. package/lib/rules/require-attrs.js +14 -6
  28. package/lib/rules/require-closing-tags.js +4 -4
  29. package/lib/rules/require-form-method.js +81 -0
  30. package/lib/rules/require-img-alt.js +2 -3
  31. package/lib/rules/require-input-label.js +77 -0
  32. package/lib/rules/require-meta-charset.js +3 -3
  33. package/lib/rules/require-meta-description.js +3 -3
  34. package/lib/rules/require-meta-viewport.js +3 -3
  35. package/lib/rules/require-open-graph-protocol.js +3 -3
  36. package/lib/rules/require-title.js +5 -5
  37. package/lib/rules/sort-attrs.js +12 -12
  38. package/lib/rules/utils/node.js +72 -32
  39. package/lib/rules/utils/settings.js +2 -2
  40. package/lib/rules/utils/visitors.js +1 -1
  41. package/lib/types/ast.d.ts +204 -0
  42. package/lib/types/index.d.ts +3 -0
  43. package/lib/types/rule.d.ts +83 -0
  44. package/lib/types/settings.ts +13 -0
  45. package/package.json +4 -4
  46. package/types/rules/attrs-newline.d.ts +2 -3
  47. package/types/rules/attrs-newline.d.ts.map +1 -1
  48. package/types/rules/element-newline.d.ts +8 -9
  49. package/types/rules/element-newline.d.ts.map +1 -1
  50. package/types/rules/id-naming-convention.d.ts +4 -4
  51. package/types/rules/id-naming-convention.d.ts.map +1 -1
  52. package/types/rules/indent/indent.d.ts +12 -5
  53. package/types/rules/indent/indent.d.ts.map +1 -1
  54. package/types/rules/index.d.ts +6 -0
  55. package/types/rules/lowercase.d.ts +4 -5
  56. package/types/rules/lowercase.d.ts.map +1 -1
  57. package/types/rules/no-abstract-roles.d.ts +4 -4
  58. package/types/rules/no-abstract-roles.d.ts.map +1 -1
  59. package/types/rules/no-accesskey-attrs.d.ts +4 -4
  60. package/types/rules/no-accesskey-attrs.d.ts.map +1 -1
  61. package/types/rules/no-duplicate-attrs.d.ts +4 -4
  62. package/types/rules/no-duplicate-attrs.d.ts.map +1 -1
  63. package/types/rules/no-duplicate-id.d.ts +5 -5
  64. package/types/rules/no-duplicate-id.d.ts.map +1 -1
  65. package/types/rules/no-extra-spacing-attrs.d.ts +11 -11
  66. package/types/rules/no-extra-spacing-attrs.d.ts.map +1 -1
  67. package/types/rules/no-extra-spacing-text.d.ts +7 -8
  68. package/types/rules/no-extra-spacing-text.d.ts.map +1 -1
  69. package/types/rules/no-heading-inside-button.d.ts +7 -0
  70. package/types/rules/no-heading-inside-button.d.ts.map +1 -0
  71. package/types/rules/no-inline-styles.d.ts +1 -2
  72. package/types/rules/no-inline-styles.d.ts.map +1 -1
  73. package/types/rules/no-invalid-role.d.ts +7 -0
  74. package/types/rules/no-invalid-role.d.ts.map +1 -0
  75. package/types/rules/no-multiple-empty-lines.d.ts +5 -5
  76. package/types/rules/no-multiple-empty-lines.d.ts.map +1 -1
  77. package/types/rules/no-multiple-h1.d.ts +2 -2
  78. package/types/rules/no-multiple-h1.d.ts.map +1 -1
  79. package/types/rules/no-nested-interactive.d.ts +8 -0
  80. package/types/rules/no-nested-interactive.d.ts.map +1 -0
  81. package/types/rules/no-positive-tabindex.d.ts +4 -4
  82. package/types/rules/no-positive-tabindex.d.ts.map +1 -1
  83. package/types/rules/no-restricted-attr-values.d.ts +5 -5
  84. package/types/rules/no-restricted-attr-values.d.ts.map +1 -1
  85. package/types/rules/no-restricted-attrs.d.ts +5 -5
  86. package/types/rules/no-restricted-attrs.d.ts.map +1 -1
  87. package/types/rules/no-script-style-type.d.ts +4 -4
  88. package/types/rules/no-script-style-type.d.ts.map +1 -1
  89. package/types/rules/no-skip-heading-levels.d.ts +2 -2
  90. package/types/rules/no-skip-heading-levels.d.ts.map +1 -1
  91. package/types/rules/no-trailing-spaces.d.ts +3 -3
  92. package/types/rules/no-trailing-spaces.d.ts.map +1 -1
  93. package/types/rules/prefer-https.d.ts +11 -0
  94. package/types/rules/prefer-https.d.ts.map +1 -0
  95. package/types/rules/quotes.d.ts +6 -6
  96. package/types/rules/quotes.d.ts.map +1 -1
  97. package/types/rules/require-attrs.d.ts +9 -4
  98. package/types/rules/require-attrs.d.ts.map +1 -1
  99. package/types/rules/require-closing-tags.d.ts +2 -2
  100. package/types/rules/require-closing-tags.d.ts.map +1 -1
  101. package/types/rules/require-form-method.d.ts +7 -0
  102. package/types/rules/require-form-method.d.ts.map +1 -0
  103. package/types/rules/require-img-alt.d.ts +2 -2
  104. package/types/rules/require-img-alt.d.ts.map +1 -1
  105. package/types/rules/require-input-label.d.ts +8 -0
  106. package/types/rules/require-input-label.d.ts.map +1 -0
  107. package/types/rules/require-meta-charset.d.ts +3 -3
  108. package/types/rules/require-meta-charset.d.ts.map +1 -1
  109. package/types/rules/require-meta-description.d.ts +3 -3
  110. package/types/rules/require-meta-description.d.ts.map +1 -1
  111. package/types/rules/require-meta-viewport.d.ts +3 -3
  112. package/types/rules/require-meta-viewport.d.ts.map +1 -1
  113. package/types/rules/require-open-graph-protocol.d.ts +3 -3
  114. package/types/rules/require-open-graph-protocol.d.ts.map +1 -1
  115. package/types/rules/require-title.d.ts +4 -4
  116. package/types/rules/require-title.d.ts.map +1 -1
  117. package/types/rules/sort-attrs.d.ts +4 -4
  118. package/types/rules/sort-attrs.d.ts.map +1 -1
  119. package/types/rules/utils/node.d.ts +56 -37
  120. package/types/rules/utils/node.d.ts.map +1 -1
  121. package/types/rules/utils/settings.d.ts +2 -2
  122. package/types/rules/utils/settings.d.ts.map +1 -1
  123. package/types/rules/utils/source-code.d.ts +1 -1
  124. package/types/rules/utils/source-code.d.ts.map +1 -1
  125. package/types/rules/utils/visitors.d.ts +1 -1
  126. package/types/rules/utils/visitors.d.ts.map +1 -1
  127. package/types/types/settings.d.ts +13 -0
  128. package/types/types/settings.d.ts.map +1 -0
  129. package/lib/types.d.ts +0 -289
@@ -1,9 +1,8 @@
1
1
  /**
2
- * @typedef { import("../types").RuleFixer } RuleFixer
2
+ * @typedef { import("eslint").Rule.RuleFixer } RuleFixer
3
3
  * @typedef { import("../types").RuleModule } RuleModule
4
- * @typedef { import("../types").TagNode } TagNode
5
- * @typedef {import("../types").RuleListener}
6
- * @typedef {Object} MessageId
4
+ *
5
+ * @typedef {Object } MessageId
7
6
  * @property {"closeStyleWrong"} CLOSE_STYLE_WRONG
8
7
  * @property {"newlineMissing"} NEWLINE_MISSING
9
8
  * @property {"newlineUnexpected"} NEWLINE_UNEXPECTED
@@ -15,7 +14,6 @@ const { createVisitors } = require("./utils/visitors");
15
14
  /**
16
15
  * @type {MessageId}
17
16
  */
18
-
19
17
  const MESSAGE_ID = {
20
18
  CLOSE_STYLE_WRONG: "closeStyleWrong",
21
19
  NEWLINE_MISSING: "newlineMissing",
@@ -1,13 +1,12 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").BaseNode } BaseNode
5
- * @typedef { import("../types").CommentNode } CommentNode
6
- * @typedef { import("../types").DoctypeNode } DoctypeNode
7
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
8
- * @typedef { import("../types").StyleTagNode } StyleTagNode
9
- * @typedef { import("../types").TextNode } TextNode
10
- * @typedef { CommentNode | DoctypeNode | ScriptTagNode | StyleTagNode | TagNode | TextNode } NewlineNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").Comment } Comment
5
+ * @typedef { import("../types").Doctype } Doctype
6
+ * @typedef { import("../types").ScriptTag } ScriptTag
7
+ * @typedef { import("../types").StyleTag } StyleTag
8
+ * @typedef { import("../types").Text } Text
9
+ * @typedef { Tag | Doctype | ScriptTag | StyleTag | Text } NewlineNode
11
10
  * @typedef {{
12
11
  * childFirst: NewlineNode | null;
13
12
  * childLast: NewlineNode | null;
@@ -188,7 +187,10 @@ module.exports = {
188
187
  }
189
188
  }
190
189
 
191
- if (nodeMeta.childLast.loc.end.line === node.close.loc.start.line) {
190
+ if (
191
+ node.close &&
192
+ nodeMeta.childLast.loc.end.line === node.close.loc.start.line
193
+ ) {
192
194
  if (isNotNewlineEnd(nodeMeta.childLast)) {
193
195
  context.report({
194
196
  node: node,
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
5
- * @typedef { import("../types").StyleTagNode } StyleTagNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").ScriptTag } ScriptTag
5
+ * @typedef { import("../types").StyleTag } StyleTag
6
6
  */
7
7
 
8
8
  const { RULE_CATEGORY } = require("../constants");
@@ -87,7 +87,7 @@ module.exports = {
87
87
  : CONVENTION_CHECKERS[convention];
88
88
 
89
89
  /**
90
- * @param {TagNode | ScriptTagNode | StyleTagNode} node
90
+ * @param {Tag | ScriptTag | StyleTag} node
91
91
  */
92
92
  function check(node) {
93
93
  if (isAttributesEmpty(node)) {
@@ -107,7 +107,7 @@ module.exports = {
107
107
  }
108
108
 
109
109
  /**
110
- * @param {TagNode | ScriptTagNode | StyleTagNode} node
110
+ * @param {Tag | ScriptTag | StyleTag} node
111
111
  */
112
112
  function checkInTemplate(node) {
113
113
  if (isAttributesEmpty(node)) {
@@ -1,23 +1,31 @@
1
1
  /**
2
2
  * @typedef { import("../../types").RuleModule } RuleModule
3
3
  * @typedef { import("../../types").AnyNode } AnyNode
4
- * @typedef { import("../../types").LineNode } LineNode
5
- * @typedef { import("../../types").BaseNode } BaseNode
6
- * @typedef { import("../../types").TagNode } TagNode
4
+ * @typedef { import("../../types").Line } Line
5
+ * @typedef { import("../../types").Tag } Tag
7
6
  * @typedef { import("../../types").RuleListener } RuleListener
7
+ * @typedef { import("../../types").Context } Context
8
8
  * @typedef { import("eslint").AST.Token } Token
9
9
  * @typedef { import("eslint").SourceCode } SourceCode
10
- * @typedef { import("estree").TemplateLiteral } TemplateLiteral
10
+ * @typedef { import("eslint").AST.Range } Range
11
+ * @typedef { import("eslint").AST.SourceLocation } SourceLocation
12
+ * @typedef { import("../../types").TemplateLiteral } TemplateLiteral
13
+ *
14
+ *
11
15
  * @typedef {Object} IndentType
12
16
  * @property {"tab"} TAB
13
17
  * @property {"space"} SPACE
14
18
  * @typedef {Object} MessageId
15
19
  * @property {"wrongIndent"} WRONG_INDENT
20
+ * @typedef {Object} IndentOptionInfo
21
+ * @property {IndentType["TAB"] | IndentType["SPACE"]} indentType
22
+ * @property {number} indentSize
23
+ * @property {string} indentChar
16
24
  */
17
25
 
18
26
  const { parse } = require("@html-eslint/template-parser");
19
27
  const { RULE_CATEGORY } = require("../../constants");
20
- const { splitToLineNodes } = require("../utils/node");
28
+ const { splitToLineNodes, isLine, isTag } = require("../utils/node");
21
29
  const {
22
30
  shouldCheckTaggedTemplateExpression,
23
31
  shouldCheckTemplateLiteral,
@@ -72,6 +80,17 @@ module.exports = {
72
80
  minimum: 1,
73
81
  default: 1,
74
82
  },
83
+ tagChildrenIndent: {
84
+ default: {},
85
+ type: "object",
86
+ patternProperties: {
87
+ "^[a-z]+$": {
88
+ type: "integer",
89
+ minimum: 0,
90
+ },
91
+ },
92
+ additionalProperties: false,
93
+ },
75
94
  },
76
95
  },
77
96
  ],
@@ -84,39 +103,44 @@ module.exports = {
84
103
  const sourceCode = getSourceCode(context);
85
104
  const indentLevelOptions = (context.options && context.options[1]) || {};
86
105
  const lines = sourceCode.getLines();
87
- const { indentType, indentSize, indentChar } = (function () {
88
- const options = context.options;
89
- /**
90
- * @type {IndentType['SPACE'] | IndentType['TAB']}
91
- */
92
- let indentType = INDENT_TYPES.SPACE;
93
- let indentSize = 4;
94
- if (options.length) {
95
- if (options[0] === INDENT_TYPES.TAB) {
96
- indentType = INDENT_TYPES.TAB;
97
- } else {
98
- indentSize = options[0];
99
- }
100
- }
101
- const indentChar =
102
- indentType === INDENT_TYPES.SPACE ? " ".repeat(indentSize) : "\t";
103
- return { indentType, indentSize, indentChar };
104
- })();
106
+ const { indentType, indentSize, indentChar } = getIndentOptionInfo(context);
105
107
 
106
108
  /**
107
- * @param {string} str
108
- * @returns {number}
109
+ * @param {Tag} node
110
+ * @return {number}
109
111
  */
110
- function countLeftPadding(str) {
111
- return str.length - str.replace(/^[\s\t]+/, "").length;
112
+ function getTagIncreasingLevel(node) {
113
+ if (
114
+ node.parent &&
115
+ isTag(node.parent) &&
116
+ indentLevelOptions &&
117
+ typeof indentLevelOptions.tagChildrenIndent === "object" &&
118
+ indentLevelOptions.tagChildrenIndent
119
+ ) {
120
+ const option =
121
+ indentLevelOptions.tagChildrenIndent[node.parent.name.toLowerCase()];
122
+ if (typeof option === "number") {
123
+ return option;
124
+ }
125
+ }
126
+
127
+ return 1;
112
128
  }
113
129
 
114
130
  /**
115
131
  * @param {AnyNode} node
116
- * @returns {node is LineNode}
132
+ * @return {number}
117
133
  */
118
- function isLineNode(node) {
119
- return node.type === "Line";
134
+ function getIncreasingLevel(node) {
135
+ if (isLine(node)) {
136
+ return 1;
137
+ }
138
+ if (isTag(node)) {
139
+ return getTagIncreasingLevel(node);
140
+ }
141
+ return typeof indentLevelOptions[node.type] === "number"
142
+ ? indentLevelOptions[node.type]
143
+ : 1;
120
144
  }
121
145
 
122
146
  /**
@@ -142,18 +166,14 @@ module.exports = {
142
166
  */
143
167
  function createIndentVisitor(baseLevel) {
144
168
  const indentLevel = new IndentLevel({
145
- getIncreasingLevel(node) {
146
- return typeof indentLevelOptions[node.type] === "number"
147
- ? indentLevelOptions[node.type]
148
- : 1;
149
- },
169
+ getIncreasingLevel,
150
170
  });
151
171
  indentLevel.setBase(baseLevel);
152
172
 
153
173
  let parentIgnoringChildCount = 0;
154
174
 
155
175
  /**
156
- * @param {AnyNode} node
176
+ * @param {AnyNode | Line} node
157
177
  * @returns {string}
158
178
  */
159
179
  function getActualIndent(node) {
@@ -161,7 +181,7 @@ module.exports = {
161
181
  const line = lines[node.loc.start.line - 1];
162
182
  let column = node.loc.start.column;
163
183
 
164
- if (isLineNode(node)) {
184
+ if (isLine(node)) {
165
185
  column += countLeftPadding(node.value);
166
186
  }
167
187
 
@@ -175,33 +195,6 @@ module.exports = {
175
195
  return indentChar.repeat(indentLevel.value());
176
196
  }
177
197
 
178
- /**
179
- * @param {AnyNode} node
180
- * @param {string} actualIndent
181
- * @return {BaseNode}
182
- */
183
- function getIndentNodeToReport(node, actualIndent) {
184
- let rangeStart = node.range[0];
185
-
186
- if (node.type !== "Line") {
187
- rangeStart -= actualIndent.length;
188
- }
189
-
190
- return {
191
- range: [rangeStart, rangeStart + actualIndent.length],
192
- loc: {
193
- start: {
194
- column: 0,
195
- line: node.loc.start.line,
196
- },
197
- end: {
198
- column: actualIndent.length,
199
- line: node.loc.start.line,
200
- },
201
- },
202
- };
203
- }
204
-
205
198
  /**
206
199
  * @param {string} actualIndent
207
200
  * @param {number} expectedIndentSize
@@ -235,7 +228,7 @@ module.exports = {
235
228
  }
236
229
 
237
230
  /**
238
- * @param {AnyNode} node
231
+ * @param {AnyNode | Line} node
239
232
  */
240
233
  function checkIndent(node) {
241
234
  if (parentIgnoringChildCount > 0) {
@@ -287,7 +280,9 @@ module.exports = {
287
280
  OpenStyleTagStart: checkIndent,
288
281
  OpenStyleTagEnd: checkIndent,
289
282
  OpenTagStart: checkIndent,
290
- OpenTagEnd: checkIndent,
283
+ OpenTagEnd(node) {
284
+ checkIndent(node);
285
+ },
291
286
  CloseTag: checkIndent,
292
287
  "Tag:exit"(node) {
293
288
  if (IGNORING_NODES.includes(node.name)) {
@@ -296,7 +291,6 @@ module.exports = {
296
291
  indentLevel.dedent(node);
297
292
  },
298
293
 
299
- // Attribute
300
294
  Attribute(node) {
301
295
  indentLevel.indent(node);
302
296
  },
@@ -305,8 +299,6 @@ module.exports = {
305
299
  "Attribute:exit"(node) {
306
300
  indentLevel.dedent(node);
307
301
  },
308
-
309
- // Text
310
302
  Text(node) {
311
303
  indentLevel.indent(node);
312
304
  const lineNodes = splitToLineNodes(node);
@@ -367,3 +359,61 @@ module.exports = {
367
359
  };
368
360
  },
369
361
  };
362
+
363
+ /**
364
+ * @param {AnyNode | Line} node
365
+ * @param {string} actualIndent
366
+ * @return {{range: Range; loc: SourceLocation}}
367
+ */
368
+ function getIndentNodeToReport(node, actualIndent) {
369
+ let rangeStart = node.range[0];
370
+
371
+ if (!isLine(node)) {
372
+ rangeStart -= actualIndent.length;
373
+ }
374
+
375
+ return {
376
+ range: [rangeStart, rangeStart + actualIndent.length],
377
+ loc: {
378
+ start: {
379
+ column: 0,
380
+ line: node.loc.start.line,
381
+ },
382
+ end: {
383
+ column: actualIndent.length,
384
+ line: node.loc.start.line,
385
+ },
386
+ },
387
+ };
388
+ }
389
+
390
+ /**
391
+ * @param {string} str
392
+ * @returns {number}
393
+ */
394
+ function countLeftPadding(str) {
395
+ return str.length - str.replace(/^[\s\t]+/, "").length;
396
+ }
397
+
398
+ /**
399
+ * @param {Context} context
400
+ * @return {IndentOptionInfo}
401
+ */
402
+ function getIndentOptionInfo(context) {
403
+ const options = context.options;
404
+ /**
405
+ * @type {IndentType['SPACE'] | IndentType['TAB']}
406
+ */
407
+ let indentType = INDENT_TYPES.SPACE;
408
+ let indentSize = 4;
409
+ if (options.length) {
410
+ if (options[0] === INDENT_TYPES.TAB) {
411
+ indentType = INDENT_TYPES.TAB;
412
+ } else {
413
+ indentSize = options[0];
414
+ }
415
+ }
416
+ const indentChar =
417
+ indentType === INDENT_TYPES.SPACE ? " ".repeat(indentSize) : "\t";
418
+ return { indentType, indentSize, indentChar };
419
+ }
@@ -37,6 +37,12 @@ const noScriptStyleType = require("./no-script-style-type");
37
37
  const lowercase = require("./lowercase");
38
38
  const requireOpenGraphProtocol = require("./require-open-graph-protocol");
39
39
  const sortAttrs = require("./sort-attrs");
40
+ const preferHttps = require("./prefer-https");
41
+ const requireInputLabel = require("./require-input-label");
42
+ const requireFormMethod = require("./require-form-method");
43
+ const noHeadingInsideButton = require("./no-heading-inside-button");
44
+ const noInvalidRole = require("./no-invalid-role");
45
+ const noNestedInteractive = require("./no-nested-interactive");
40
46
 
41
47
  module.exports = {
42
48
  "require-lang": requireLang,
@@ -75,7 +81,13 @@ module.exports = {
75
81
  "no-trailing-spaces": noTrailingSpaces,
76
82
  "no-restricted-attr-values": noRestrictedAttrValues,
77
83
  "no-script-style-type": noScriptStyleType,
84
+ "no-heading-inside-button": noHeadingInsideButton,
85
+ "no-invalid-role": noInvalidRole,
86
+ "no-nested-interactive": noNestedInteractive,
78
87
  lowercase: lowercase,
79
88
  "require-open-graph-protocol": requireOpenGraphProtocol,
89
+ "require-form-method": requireFormMethod,
80
90
  "sort-attrs": sortAttrs,
91
+ "prefer-https": preferHttps,
92
+ "require-input-label": requireInputLabel,
81
93
  };
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").StyleTagNode } StyleTagNode
5
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
6
- * @typedef { import("../types").RuleListener } RuleListener
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").StyleTag } StyleTag
5
+ * @typedef { import("../types").ScriptTag } ScriptTag
7
6
  */
8
7
 
9
8
  const { NODE_TYPES } = require("@html-eslint/parser");
@@ -38,12 +37,12 @@ module.exports = {
38
37
  create(context) {
39
38
  const allowedAttrKeySet = new Set(SVG_CAMEL_CASE_ATTRIBUTES);
40
39
  /**
41
- * @type {TagNode[]}
40
+ * @type {Tag[]}
42
41
  */
43
42
  const svgStack = [];
44
43
 
45
44
  /**
46
- * @param {TagNode} node
45
+ * @param {Tag} node
47
46
  */
48
47
  function enterSvg(node) {
49
48
  svgStack.push(node);
@@ -62,7 +61,7 @@ module.exports = {
62
61
  }
63
62
 
64
63
  /**
65
- * @param {TagNode | StyleTagNode | ScriptTagNode} node
64
+ * @param {Tag | StyleTag | ScriptTag} node
66
65
  */
67
66
  function nameOf(node) {
68
67
  if (node.type === NODE_TYPES.ScriptTag) return "script";
@@ -71,7 +70,7 @@ module.exports = {
71
70
  }
72
71
 
73
72
  /**
74
- * @param {TagNode | StyleTagNode | ScriptTagNode} node
73
+ * @param {Tag | StyleTag | ScriptTag} node
75
74
  */
76
75
  function check(node) {
77
76
  const raw = node.openStart.value.slice(1);
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").StyleTagNode } StyleTagNode
5
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").StyleTag } StyleTag
5
+ * @typedef { import("../types").ScriptTag } ScriptTag
6
6
  */
7
7
 
8
8
  const { RULE_CATEGORY } = require("../constants");
@@ -50,7 +50,7 @@ module.exports = {
50
50
 
51
51
  create(context) {
52
52
  /**
53
- * @param {TagNode | ScriptTagNode | StyleTagNode} node
53
+ * @param {Tag | ScriptTag | StyleTag} node
54
54
  */
55
55
  function check(node) {
56
56
  const roleAttr = findAttr(node, "role");
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").StyleTagNode } StyleTagNode
5
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").StyleTag } StyleTag
5
+ * @typedef { import("../types").ScriptTag } ScriptTag
6
6
  */
7
7
 
8
8
  const { RULE_CATEGORY } = require("../constants");
@@ -35,7 +35,7 @@ module.exports = {
35
35
 
36
36
  create(context) {
37
37
  /**
38
- * @param {TagNode | ScriptTagNode | StyleTagNode} node
38
+ * @param {Tag | ScriptTag | StyleTag} node
39
39
  */
40
40
  function check(node) {
41
41
  const accessKeyAttr = findAttr(node, "accesskey");
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").StyleTagNode } StyleTagNode
5
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").StyleTag } StyleTag
5
+ * @typedef { import("../types").ScriptTag } ScriptTag
6
6
  */
7
7
 
8
8
  const { RULE_CATEGORY } = require("../constants");
@@ -35,7 +35,7 @@ module.exports = {
35
35
 
36
36
  create(context) {
37
37
  /**
38
- * @param {TagNode | StyleTagNode | ScriptTagNode} node
38
+ * @param {Tag | StyleTag | ScriptTag} node
39
39
  */
40
40
  function check(node) {
41
41
  if (Array.isArray(node.attributes)) {
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").TagNode } TagNode
4
- * @typedef { import("../types").StyleTagNode } StyleTagNode
5
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
6
- * @typedef { import("es-html-parser").AttributeValueNode } AttributeValueNode
3
+ * @typedef { import("../types").Tag } Tag
4
+ * @typedef { import("../types").StyleTag } StyleTag
5
+ * @typedef { import("../types").ScriptTag } ScriptTag
6
+ * @typedef { import("../types").AttributeValue } AttributeValue
7
7
  */
8
8
 
9
9
  const { parse } = require("@html-eslint/template-parser");
@@ -42,11 +42,11 @@ module.exports = {
42
42
  create(context) {
43
43
  const htmlIdAttrsMap = new Map();
44
44
  /**
45
- * @param {Map<string, AttributeValueNode[]>} map
45
+ * @param {Map<string, AttributeValue[]>} map
46
46
  */
47
47
  function createTagVisitor(map) {
48
48
  /**
49
- * @param {TagNode} node
49
+ * @param {Tag} node
50
50
  */
51
51
  return function (node) {
52
52
  if (!node.attributes || node.attributes.length <= 0) {
@@ -67,7 +67,7 @@ module.exports = {
67
67
 
68
68
  /**
69
69
  *
70
- * @param {Map<string, AttributeValueNode[]>} map
70
+ * @param {Map<string, AttributeValue[]>} map
71
71
  */
72
72
  function report(map) {
73
73
  map.forEach((attrs) => {
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("../types").AttributeNode } AttributeNode
4
- * @typedef { import("../types").OpenTagEndNode } OpenTagEndNode
5
- * @typedef { import("../types").OpenScriptTagEndNode } OpenScriptTagEndNode
6
- * @typedef { import("../types").OpenStyleTagEndNode } OpenStyleTagEndNode
7
- * @typedef { import("../types").OpenScriptTagStartNode } OpenScriptTagStartNode
8
- * @typedef { import("../types").OpenTagStartNode } OpenTagStartNode
9
- * @typedef { import("../types").OpenStyleTagStartNode } OpenStyleTagStartNode
10
- * @typedef { import("../types").TagNode } TagNode
11
- * @typedef { import("../types").StyleTagNode } StyleTagNode
12
- * @typedef { import("../types").ScriptTagNode } ScriptTagNode
3
+ * @typedef { import("../types").Attribute } Attribute
4
+ * @typedef { import("../types").OpenTagEnd } OpenTagEnd
5
+ * @typedef { import("../types").OpenScriptTagEnd } OpenScriptTagEnd
6
+ * @typedef { import("../types").OpenStyleTagEnd } OpenStyleTagEnd
7
+ * @typedef { import("../types").OpenScriptTagStart } OpenScriptTagStart
8
+ * @typedef { import("../types").OpenTagStart } OpenTagStart
9
+ * @typedef { import("../types").OpenStyleTagStart } OpenStyleTagStart
10
+ * @typedef { import("../types").Tag } Tag
11
+ * @typedef { import("../types").StyleTag } StyleTag
12
+ * @typedef { import("../types").ScriptTag } ScriptTag
13
13
  * @typedef { import("../types").AnyNode } AnyNode
14
14
  */
15
15
 
@@ -95,7 +95,7 @@ module.exports = {
95
95
  const sourceCode = context.getSourceCode().text;
96
96
 
97
97
  /**
98
- * @param {AttributeNode[]} attrs
98
+ * @param {Attribute[]} attrs
99
99
  */
100
100
  function checkExtraSpacesBetweenAttrs(attrs) {
101
101
  attrs.forEach((current, index, attrs) => {
@@ -145,8 +145,8 @@ module.exports = {
145
145
  }
146
146
 
147
147
  /**
148
- * @param {OpenScriptTagStartNode | OpenTagStartNode | OpenStyleTagStartNode} node
149
- * @param {AttributeNode} firstAttr
148
+ * @param {OpenScriptTagStart | OpenTagStart | OpenStyleTagStart} node
149
+ * @param {Attribute} firstAttr
150
150
  * @returns
151
151
  */
152
152
  function checkExtraSpaceBefore(node, firstAttr) {
@@ -184,7 +184,7 @@ module.exports = {
184
184
  }
185
185
  }
186
186
  /**
187
- * @param {TagNode | StyleTagNode | ScriptTagNode} node
187
+ * @param {Tag | StyleTag | ScriptTag} node
188
188
  * @returns
189
189
  */
190
190
  function check(node) {
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * @typedef { import("../types").RuleModule } RuleModule
3
- * @typedef { import("es-html-parser").CommentContentNode } CommentContentNode
4
- * @typedef { import("es-html-parser").TagNode } TagNode
5
- * @typedef { import("es-html-parser").CommentNode } CommentNode
6
- * @typedef { import("../types").ContentNode } ContentNode
7
- * @typedef { import("es-html-parser").TextNode } TextNode
8
- * @typedef { import("../types").LineNode } LineNode
9
- * @typedef { import("../types").Range } Range
3
+ * @typedef { import("../types").CommentContent } CommentContent
4
+ * @typedef { import("../types").Tag } Tag
5
+ * @typedef { import("../types").Comment } Comment
6
+ * @typedef { import("../types").Text } Text
7
+ * @typedef { import("../types").Line } Line
8
+ * @typedef { import("eslint").AST.Range } Range
10
9
  */
11
10
 
12
11
  const { RULE_CATEGORY } = require("../constants");
@@ -60,12 +59,12 @@ module.exports = {
60
59
  const skipTags = options.skip || [];
61
60
  const sourceCode = getSourceCode(context);
62
61
  /**
63
- * @type {TagNode[]}
62
+ * @type {Tag[]}
64
63
  */
65
64
  const tagStack = [];
66
65
 
67
66
  /**
68
- * @param {CommentNode | TextNode} node
67
+ * @param {Comment | Text} node
69
68
  * @returns {boolean}
70
69
  */
71
70
  function hasSkipTagOnParent(node) {
@@ -83,7 +82,7 @@ module.exports = {
83
82
  }
84
83
 
85
84
  /**
86
- * @param {CommentContentNode | TextNode} node
85
+ * @param {CommentContent | Text} node
87
86
  */
88
87
  function stripConsecutiveSpaces(node) {
89
88
  const text = node.value;