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