refactor: use more efficient walk for importUsageCheck
This commit is contained in:
parent
37f9d3da8f
commit
b59eabdc0d
|
@ -5,8 +5,8 @@ import {
|
|||
SimpleExpressionNode,
|
||||
forAliasRE,
|
||||
parserOptions,
|
||||
transform,
|
||||
walkIdentifiers
|
||||
walkIdentifiers,
|
||||
TemplateChildNode
|
||||
} from '@vue/compiler-dom'
|
||||
import { createCache } from '../cache'
|
||||
import { camelize, capitalize, isBuiltInDirective } from '@vue/shared'
|
||||
|
@ -34,10 +34,12 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
|
|||
}
|
||||
|
||||
let code = ''
|
||||
transform(ast, {
|
||||
nodeTransforms: [
|
||||
node => {
|
||||
if (node.type === NodeTypes.ELEMENT) {
|
||||
|
||||
ast!.children.forEach(walk)
|
||||
|
||||
function walk(node: TemplateChildNode) {
|
||||
switch (node.type) {
|
||||
case NodeTypes.ELEMENT:
|
||||
if (
|
||||
!parserOptions.isNativeTag!(node.tag) &&
|
||||
!parserOptions.isBuiltInComponent!(node.tag)
|
||||
|
@ -73,14 +75,13 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
|
|||
code += `,${prop.value.content}`
|
||||
}
|
||||
}
|
||||
} else if (node.type === NodeTypes.INTERPOLATION) {
|
||||
code += `,${processExp(
|
||||
(node.content as SimpleExpressionNode).content
|
||||
)}`
|
||||
node.children.forEach(walk)
|
||||
break
|
||||
case NodeTypes.INTERPOLATION:
|
||||
code += `,${processExp((node.content as SimpleExpressionNode).content)}`
|
||||
break
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
code += ';'
|
||||
templateUsageCheckCache.set(content, code)
|
||||
|
|
Loading…
Reference in New Issue