Skip to content

Commit

Permalink
fix: scope class name missing underline
Browse files Browse the repository at this point in the history
close #1447
  • Loading branch information
johnsoncodehk committed Jun 16, 2022
1 parent 8e4324a commit 49ded22
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 28 deletions.
Expand Up @@ -8,12 +8,12 @@ import { ComputedRef } from '@vue/reactivity';
import * as path from 'path';
import { VueCompilerOptions } from '../types';
import { SearchTexts } from '../utils/string';
import { EmbeddedFile, useCssModuleClasses, useCssScopedClasses, useCssVars, VueLanguagePlugin } from '../sourceFile';
import { EmbeddedFile, useStyleCssClasses, useCssVars, VueLanguagePlugin } from '../sourceFile';

export default function (
ts: typeof import('typescript/lib/tsserverlibrary'),
cssModuleClasses: ReturnType<typeof useCssModuleClasses>,
cssScopedClasses: ReturnType<typeof useCssScopedClasses>,
cssModuleClasses: ReturnType<typeof useStyleCssClasses>,
cssScopedClasses: ReturnType<typeof useStyleCssClasses>,
templateCodeGens: ComputedRef<ReturnType<typeof templateGen['generate']> | undefined>,
cssVars: ReturnType<typeof useCssVars>,
scriptSetupRanges: ComputedRef<ReturnType<typeof parseScriptSetupRanges> | undefined>,
Expand Down
42 changes: 17 additions & 25 deletions packages/vue-typescript/src/sourceFile.ts
Expand Up @@ -160,8 +160,11 @@ export function createSourceFile(
);
}
});
const cssModuleClasses = useCssModuleClasses(sfc);
const cssScopedClasses = useCssScopedClasses(sfc, vueCompilerOptions);
const cssModuleClasses = useStyleCssClasses(sfc, style => !!style.module);
const cssScopedClasses = useStyleCssClasses(sfc, style => {
const setting = compilerOptions.experimentalResolveStyleCssClasses ?? 'scoped';
return (setting === 'scoped' && style.scoped) || setting === 'always';
});
const templateCodeGens = computed(() => {

if (!computedHtmlTemplate.value)
Expand All @@ -180,7 +183,7 @@ export function createSourceFile(
sfc.template?.lang ?? 'html',
templateAstCompiled.value.ast,
!!sfc.scriptSetup,
Object.values(cssScopedClasses.value).map(map => Object.keys(map)).flat(),
Object.values(cssScopedClasses.value).map(style => style.classNames).flat(),
computedHtmlTemplate.value.mapping,
{
getEmitCompletion: SearchTexts.EmitCompletion,
Expand Down Expand Up @@ -761,34 +764,23 @@ export function createSourceFile(
}
}

export function useCssModuleClasses(sfc: Sfc) {
export function useStyleCssClasses(sfc: Sfc, condition: (style: Sfc['styles'][number]) => boolean) {
return computed(() => {
const result: { style: typeof sfc.styles[number], index: number, classNameRanges: TextRange[]; }[] = [];
for (let i = 0; i < sfc.styles.length; i++) {
const style = sfc.styles[i];
if (style.module) {
result.push({
style: style,
index: i,
classNameRanges: [...parseCssClassNames(style.content)],
});
}
}
return result;
});
}

export function useCssScopedClasses(sfc: Sfc, compilerOptions: VueCompilerOptions) {
return computed(() => {
const result: { style: typeof sfc.styles[number], index: number, classNameRanges: TextRange[]; }[] = [];
const setting = compilerOptions.experimentalResolveStyleCssClasses ?? 'scoped';
const result: {
style: typeof sfc.styles[number],
index: number,
classNameRanges: TextRange[],
classNames: string[],
}[] = [];
for (let i = 0; i < sfc.styles.length; i++) {
const style = sfc.styles[i];
if ((setting === 'scoped' && style.scoped) || setting === 'always') {
if (condition(style)) {
const classNameRanges = [...parseCssClassNames(style.content)];
result.push({
style: style,
index: i,
classNameRanges: [...parseCssClassNames(style.content)],
classNameRanges: classNameRanges,
classNames: classNameRanges.map(range => style.content.substring(range.start + 1, range.end)),
});
}
}
Expand Down

0 comments on commit 49ded22

Please sign in to comment.