Skip to content

Commit f0aa5dc

Browse files
authored
Support MathML elements (#2457)
1 parent cfad3ee commit f0aa5dc

8 files changed

+70
-9
lines changed

Diff for: lib/rules/component-name-in-template-casing.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,12 @@ module.exports = {
122122
}
123123

124124
if (
125-
(!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
125+
(!utils.isHtmlElementNode(node) &&
126+
!utils.isSvgElementNode(node) &&
127+
!utils.isMathElementNode(node)) ||
126128
utils.isHtmlWellKnownElementName(node.rawName) ||
127129
utils.isSvgWellKnownElementName(node.rawName) ||
130+
utils.isMathWellKnownElementName(node.rawName) ||
128131
utils.isVueBuiltInElementName(node.rawName)
129132
) {
130133
return false

Diff for: lib/rules/html-self-closing.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ function getElementType(node) {
6363
if (utils.isSvgElementNode(node)) {
6464
return 'SVG'
6565
}
66-
if (utils.isMathMLElementNode(node)) {
66+
if (utils.isMathElementNode(node)) {
6767
return 'MATH'
6868
}
6969
return 'UNKNOWN'

Diff for: lib/rules/no-deprecated-html-element-is.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ module.exports = {
2727
function isValidElement(node) {
2828
return (
2929
!utils.isHtmlWellKnownElementName(node.rawName) &&
30-
!utils.isSvgWellKnownElementName(node.rawName)
30+
!utils.isSvgWellKnownElementName(node.rawName) &&
31+
!utils.isMathWellKnownElementName(node.rawName)
3132
)
3233
}
3334
return utils.defineTemplateBodyVisitor(context, {

Diff for: lib/rules/no-undef-components.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ module.exports = {
149149
if (
150150
utils.isHtmlWellKnownElementName(rawName) ||
151151
utils.isSvgWellKnownElementName(rawName) ||
152+
utils.isMathWellKnownElementName(rawName) ||
152153
utils.isBuiltInComponentName(kebabCaseName)
153154
) {
154155
return false
@@ -177,7 +178,11 @@ module.exports = {
177178
/** @type {TemplateListener} */
178179
const templateBodyVisitor = {
179180
VElement(node) {
180-
if (!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) {
181+
if (
182+
!utils.isHtmlElementNode(node) &&
183+
!utils.isSvgElementNode(node) &&
184+
!utils.isMathElementNode(node)
185+
) {
181186
return
182187
}
183188
verifyName(node.rawName, node.startTag)

Diff for: lib/rules/no-unused-components.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,12 @@ module.exports = {
5252
/** @param {VElement} node */
5353
VElement(node) {
5454
if (
55-
(!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
55+
(!utils.isHtmlElementNode(node) &&
56+
!utils.isSvgElementNode(node) &&
57+
!utils.isMathElementNode(node)) ||
5658
utils.isHtmlWellKnownElementName(node.rawName) ||
57-
utils.isSvgWellKnownElementName(node.rawName)
59+
utils.isSvgWellKnownElementName(node.rawName) ||
60+
utils.isMathWellKnownElementName(node.rawName)
5861
) {
5962
return
6063
}

Diff for: lib/rules/script-setup-uses-vars.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,13 @@ module.exports = {
9494
},
9595
VElement(node) {
9696
if (
97-
(!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
97+
(!utils.isHtmlElementNode(node) &&
98+
!utils.isSvgElementNode(node) &&
99+
!utils.isMathElementNode(node)) ||
98100
(node.rawName === node.name &&
99101
(utils.isHtmlWellKnownElementName(node.rawName) ||
100-
utils.isSvgWellKnownElementName(node.rawName))) ||
102+
utils.isSvgWellKnownElementName(node.rawName) ||
103+
utils.isMathWellKnownElementName(node.rawName))) ||
101104
utils.isBuiltInComponentName(node.rawName)
102105
) {
103106
return

Diff for: lib/utils/index.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const { getScope } = require('./scope')
5151

5252
const HTML_ELEMENT_NAMES = new Set(require('./html-elements.json'))
5353
const SVG_ELEMENT_NAMES = new Set(require('./svg-elements.json'))
54+
const MATH_ELEMENT_NAMES = new Set(require('./math-elements.json'))
5455
const VOID_ELEMENT_NAMES = new Set(require('./void-elements.json'))
5556
const VUE2_BUILTIN_COMPONENT_NAMES = new Set(
5657
require('./vue2-builtin-components')
@@ -948,6 +949,8 @@ module.exports = {
948949
!this.isHtmlWellKnownElementName(node.rawName)) ||
949950
(this.isSvgElementNode(node) &&
950951
!this.isSvgWellKnownElementName(node.rawName)) ||
952+
(this.isMathElementNode(node) &&
953+
!this.isMathWellKnownElementName(node.rawName)) ||
951954
hasAttribute(node, 'is') ||
952955
hasDirective(node, 'bind', 'is') ||
953956
hasDirective(node, 'is')
@@ -977,7 +980,7 @@ module.exports = {
977980
* @param {VElement} node The node to check.
978981
* @returns {boolean} `true` if the node is a MathML element.
979982
*/
980-
isMathMLElementNode(node) {
983+
isMathElementNode(node) {
981984
return node.namespace === NS.MathML
982985
},
983986

@@ -999,6 +1002,15 @@ module.exports = {
9991002
return SVG_ELEMENT_NAMES.has(name)
10001003
},
10011004

1005+
/**
1006+
* Check whether the given name is a well-known MathML element or not.
1007+
* @param {string} name The name to check.
1008+
* @returns {boolean} `true` if the name is a well-known MathML element name.
1009+
*/
1010+
isMathWellKnownElementName(name) {
1011+
return MATH_ELEMENT_NAMES.has(name)
1012+
},
1013+
10021014
/**
10031015
* Check whether the given name is a void element name or not.
10041016
* @param {string} name The name to check.

Diff for: lib/utils/math-elements.json

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[
2+
"math",
3+
"maction",
4+
"annotation",
5+
"annotation-xml",
6+
"menclose",
7+
"merror",
8+
"mfenced",
9+
"mfrac",
10+
"mi",
11+
"mmultiscripts",
12+
"mn",
13+
"mo",
14+
"mover",
15+
"mpadded",
16+
"mphantom",
17+
"mprescripts",
18+
"mroot",
19+
"mrow",
20+
"ms",
21+
"semantics",
22+
"mspace",
23+
"msqrt",
24+
"mstyle",
25+
"msub",
26+
"msup",
27+
"msubsup",
28+
"mtable",
29+
"mtd",
30+
"mtext",
31+
"mtr",
32+
"munder",
33+
"munderover"
34+
]

0 commit comments

Comments
 (0)