Skip to content

Commit 49ded22

Browse files
committed
fix: scope class name missing underline
close #1447
1 parent 8e4324a commit 49ded22

File tree

2 files changed

+20
-28
lines changed

2 files changed

+20
-28
lines changed

packages/vue-typescript/src/plugins/vue-typescript-template.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import { ComputedRef } from '@vue/reactivity';
88
import * as path from 'path';
99
import { VueCompilerOptions } from '../types';
1010
import { SearchTexts } from '../utils/string';
11-
import { EmbeddedFile, useCssModuleClasses, useCssScopedClasses, useCssVars, VueLanguagePlugin } from '../sourceFile';
11+
import { EmbeddedFile, useStyleCssClasses, useCssVars, VueLanguagePlugin } from '../sourceFile';
1212

1313
export default function (
1414
ts: typeof import('typescript/lib/tsserverlibrary'),
15-
cssModuleClasses: ReturnType<typeof useCssModuleClasses>,
16-
cssScopedClasses: ReturnType<typeof useCssScopedClasses>,
15+
cssModuleClasses: ReturnType<typeof useStyleCssClasses>,
16+
cssScopedClasses: ReturnType<typeof useStyleCssClasses>,
1717
templateCodeGens: ComputedRef<ReturnType<typeof templateGen['generate']> | undefined>,
1818
cssVars: ReturnType<typeof useCssVars>,
1919
scriptSetupRanges: ComputedRef<ReturnType<typeof parseScriptSetupRanges> | undefined>,

packages/vue-typescript/src/sourceFile.ts

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,11 @@ export function createSourceFile(
160160
);
161161
}
162162
});
163-
const cssModuleClasses = useCssModuleClasses(sfc);
164-
const cssScopedClasses = useCssScopedClasses(sfc, vueCompilerOptions);
163+
const cssModuleClasses = useStyleCssClasses(sfc, style => !!style.module);
164+
const cssScopedClasses = useStyleCssClasses(sfc, style => {
165+
const setting = compilerOptions.experimentalResolveStyleCssClasses ?? 'scoped';
166+
return (setting === 'scoped' && style.scoped) || setting === 'always';
167+
});
165168
const templateCodeGens = computed(() => {
166169

167170
if (!computedHtmlTemplate.value)
@@ -180,7 +183,7 @@ export function createSourceFile(
180183
sfc.template?.lang ?? 'html',
181184
templateAstCompiled.value.ast,
182185
!!sfc.scriptSetup,
183-
Object.values(cssScopedClasses.value).map(map => Object.keys(map)).flat(),
186+
Object.values(cssScopedClasses.value).map(style => style.classNames).flat(),
184187
computedHtmlTemplate.value.mapping,
185188
{
186189
getEmitCompletion: SearchTexts.EmitCompletion,
@@ -761,34 +764,23 @@ export function createSourceFile(
761764
}
762765
}
763766

764-
export function useCssModuleClasses(sfc: Sfc) {
767+
export function useStyleCssClasses(sfc: Sfc, condition: (style: Sfc['styles'][number]) => boolean) {
765768
return computed(() => {
766-
const result: { style: typeof sfc.styles[number], index: number, classNameRanges: TextRange[]; }[] = [];
767-
for (let i = 0; i < sfc.styles.length; i++) {
768-
const style = sfc.styles[i];
769-
if (style.module) {
770-
result.push({
771-
style: style,
772-
index: i,
773-
classNameRanges: [...parseCssClassNames(style.content)],
774-
});
775-
}
776-
}
777-
return result;
778-
});
779-
}
780-
781-
export function useCssScopedClasses(sfc: Sfc, compilerOptions: VueCompilerOptions) {
782-
return computed(() => {
783-
const result: { style: typeof sfc.styles[number], index: number, classNameRanges: TextRange[]; }[] = [];
784-
const setting = compilerOptions.experimentalResolveStyleCssClasses ?? 'scoped';
769+
const result: {
770+
style: typeof sfc.styles[number],
771+
index: number,
772+
classNameRanges: TextRange[],
773+
classNames: string[],
774+
}[] = [];
785775
for (let i = 0; i < sfc.styles.length; i++) {
786776
const style = sfc.styles[i];
787-
if ((setting === 'scoped' && style.scoped) || setting === 'always') {
777+
if (condition(style)) {
778+
const classNameRanges = [...parseCssClassNames(style.content)];
788779
result.push({
789780
style: style,
790781
index: i,
791-
classNameRanges: [...parseCssClassNames(style.content)],
782+
classNameRanges: classNameRanges,
783+
classNames: classNameRanges.map(range => style.content.substring(range.start + 1, range.end)),
792784
});
793785
}
794786
}

0 commit comments

Comments
 (0)