fix(sfc/style-vars): should ignore style variable bindings in comments (#4188)
fix #4185
This commit is contained in:
parent
1c7f5d3fce
commit
3a75d5d694
@ -49,6 +49,17 @@ __default__.setup = __setup__
|
|||||||
export default __default__"
|
export default __default__"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`CSS vars injection codegen should ignore comments 1`] = `
|
||||||
|
"export default {
|
||||||
|
setup(__props, { expose }) {
|
||||||
|
expose()
|
||||||
|
const color = 'red'
|
||||||
|
return { color }
|
||||||
|
}
|
||||||
|
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`CSS vars injection codegen w/ <script setup> 1`] = `
|
exports[`CSS vars injection codegen w/ <script setup> 1`] = `
|
||||||
"import { useCssVars as _useCssVars, unref as _unref } from 'vue'
|
"import { useCssVars as _useCssVars, unref as _unref } from 'vue'
|
||||||
|
|
||||||
|
@ -161,6 +161,19 @@ describe('CSS vars injection', () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//#4185
|
||||||
|
test('should ignore comments', () => {
|
||||||
|
const { content } = compileSFCScript(
|
||||||
|
`<script setup>const color = 'red'</script>\n` +
|
||||||
|
`<style>
|
||||||
|
div{ /* color: v-bind(color); */ width:20; }
|
||||||
|
</style>`
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(content).not.toMatch(`_useCssVars`)
|
||||||
|
assertCode(content)
|
||||||
|
})
|
||||||
|
|
||||||
test('w/ <script setup> using the same var multiple times', () => {
|
test('w/ <script setup> using the same var multiple times', () => {
|
||||||
const { content } = compileSFCScript(
|
const { content } = compileSFCScript(
|
||||||
`<script setup>
|
`<script setup>
|
||||||
|
@ -37,7 +37,9 @@ export function parseCssVars(sfc: SFCDescriptor): string[] {
|
|||||||
const vars: string[] = []
|
const vars: string[] = []
|
||||||
sfc.styles.forEach(style => {
|
sfc.styles.forEach(style => {
|
||||||
let match
|
let match
|
||||||
while ((match = cssVarRE.exec(style.content))) {
|
// ignore v-bind() in comments /* ... */
|
||||||
|
const content = style.content.replace(/\/\*[\s\S]*\*\//g, '')
|
||||||
|
while ((match = cssVarRE.exec(content))) {
|
||||||
const variable = match[1] || match[2] || match[3]
|
const variable = match[1] || match[2] || match[3]
|
||||||
if (!vars.includes(variable)) {
|
if (!vars.includes(variable)) {
|
||||||
vars.push(variable)
|
vars.push(variable)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user