Skip to content

Commit

Permalink
fix: `strictTemplates did not check for unknown components
Browse files Browse the repository at this point in the history
close #2291
  • Loading branch information
johnsoncodehk committed Feb 18, 2023
1 parent 48e1d51 commit 27f2960
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 17 deletions.
35 changes: 23 additions & 12 deletions packages/vue-language-core/src/generators/template.ts
Expand Up @@ -144,7 +144,7 @@ export function generate(

const data: Record<string, string> = {};

codeGen.push(`let __VLS_templateComponents!: {\n`);
codeGen.push(`let __VLS_templateComponents!: {}\n`);

for (const tagName in tagNames) {

Expand All @@ -163,12 +163,12 @@ export function generate(
]);
const varName = validTsVar.test(tagName) ? tagName : capitalize(camelize(tagName.replace(/:/g, '-')));

codeGen.push(`${varName}: import('./__VLS_types.js').GetComponents<typeof __VLS_components, ${[...names].map(name => `'${name}'`).join(', ')}>;\n`);
codeGen.push(`& import('./__VLS_types.js').WithComponent<'${varName}', typeof __VLS_components, ${[...names].map(name => `'${name}'`).join(', ')}>\n`);

data[tagName] = varName;
}

codeGen.push(`};\n`);
codeGen.push(`;\n`);

for (const tagName in tagNames) {

Expand Down Expand Up @@ -541,7 +541,13 @@ export function generate(
codeGen.push(`;\n`);
}

codeGen.push(`let __VLS_${elementIndex++}: JSX.IntrinsicElements = { `);
codeGen.push(`(__VLS_x as JSX.IntrinsicElements)[`);
writeCodeWithQuotes(
node.tag,
tagOffsets[0],
capabilitiesPresets.diagnosticOnly,
);
codeGen.push(`] = `);
}
else if (_isNamespacedTag) {

Expand All @@ -555,7 +561,7 @@ export function generate(
codeGen.push(`;\n`);
}

codeGen.push(`const __VLS_${elementIndex++}: import('./__VLS_types.js').ComponentProps<typeof ${node.tag}> = { `);
codeGen.push(`(__VLS_x as import('./__VLS_types.js').ComponentProps<typeof ${node.tag}>) = `);
}
else {

Expand All @@ -567,29 +573,34 @@ export function generate(
componentVars[node.tag] ?? node.tag,
'template',
[endTagOffset, endTagOffset + node.tag.length],
capabilitiesPresets.tagHover,
{
...capabilitiesPresets.tagHover,
...capabilitiesPresets.diagnosticOnly,
},
]);
codeGen.push(`;\n`);
}

codeGen.push(`const __VLS_${elementIndex++}: { '${node.tag}': import('./__VLS_types.js').ComponentProps<typeof `);
codeGen.push(`(__VLS_x as import('./__VLS_types.js').ComponentProps<typeof `);
if (componentVars[node.tag]) {
codeGen.push(`__VLS_templateComponents.`);
}
codeGen.push([
componentVars[node.tag] ?? node.tag,
'template',
[startTagOffset, startTagOffset + node.tag.length],
capabilitiesPresets.tagHover,
{
...capabilitiesPresets.tagHover,
...capabilitiesPresets.diagnosticOnly,
},
]);
codeGen.push(`> } = { `);
codeGen.push(`>) = `);
}

writeObjectProperty(node.tag, startTagOffset, capabilitiesPresets.diagnosticOnly, node);
codeGen.push(` : { `);
codeGen.push(`{ `);
const { unWriteExps } = writeProps(node, 'class', 'props');
_unWriteExps = unWriteExps;
codeGen.push(` } };\n`);
codeGen.push(`};\n`);
}
{

Expand Down
10 changes: 5 additions & 5 deletions packages/vue-language-core/src/utils/localTypes.ts
Expand Up @@ -102,11 +102,11 @@ export type FirstFunction<F0 = void, F1 = void, F2 = void, F3 = void, F4 = void>
NonNullable<F4> extends (Function | AnyArray<Function>) ? F4 :
unknown;
export type SelfComponent<N, C> = string extends N ? {} : N extends string ? { [P in N]: C } : {};
export type GetComponents<Components, N1, N2 = unknown, N3 = unknown> =
N1 extends keyof Components ? Components[N1] :
N2 extends keyof Components ? Components[N2] :
N3 extends keyof Components ? Components[N3] :
${vueCompilerOptions.strictTemplates ? 'unknown' : 'any'};
export type WithComponent<N0, Components, N1, N2 = unknown, N3 = unknown> =
N1 extends keyof Components ? { [K in N0]: Components[N1] } :
N2 extends keyof Components ? { [K in N0]: Components[N2] } :
N3 extends keyof Components ? { [K in N0]: Components[N3] } :
${vueCompilerOptions.strictTemplates ? '{}' : '{ [K in N0]: any }'};
export type ComponentProps<T> =
${vueCompilerOptions.strictTemplates ? '' : 'Record<string, unknown> &'}
(
Expand Down

0 comments on commit 27f2960

Please sign in to comment.