Skip to content

Commit b7a001f

Browse files
committed
refactor(language-core): streamline tag offset calculations
1 parent e2febf0 commit b7a001f

File tree

1 file changed

+14
-13
lines changed
  • packages/language-core/lib/codegen/template

1 file changed

+14
-13
lines changed

packages/language-core/lib/codegen/template/element.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ export function* generateComponent(
2525
ctx: TemplateCodegenContext,
2626
node: CompilerDOM.ElementNode
2727
): Generator<Code> {
28-
const startTagOffset = node.loc.start.offset + options.template.content.slice(node.loc.start.offset).indexOf(node.tag);
29-
const endTagOffset = !node.isSelfClosing && options.template.lang === 'html' ? node.loc.start.offset + node.loc.source.lastIndexOf(node.tag) : undefined;
30-
const tagOffsets =
31-
endTagOffset !== undefined && endTagOffset > startTagOffset
32-
? [startTagOffset, endTagOffset]
33-
: [startTagOffset];
28+
const tagOffsets = [node.loc.start.offset + options.template.content.slice(node.loc.start.offset).indexOf(node.tag)];
29+
if (!node.isSelfClosing && options.template.lang === 'html') {
30+
const endTagOffset = node.loc.start.offset + node.loc.source.lastIndexOf(node.tag);
31+
if (endTagOffset > tagOffsets[0]) {
32+
tagOffsets.push(endTagOffset);
33+
}
34+
}
3435
const failedPropExps: FailedPropExpression[] = [];
3536
const possibleOriginalNames = getPossibleOriginalComponentNames(node.tag, true);
3637
const matchImportName = possibleOriginalNames.find(name => options.scriptSetupImportComponentNames.has(name));
@@ -51,7 +52,7 @@ export function* generateComponent(
5152
let props = node.props;
5253
let dynamicTagInfo: {
5354
tag: string;
54-
offsets: [number, number | undefined];
55+
offsets: number[];
5556
astHolder: CompilerDOM.SourceLocation;
5657
} | undefined;
5758

@@ -68,7 +69,7 @@ export function* generateComponent(
6869
}
6970
dynamicTagInfo = {
7071
tag: prop.exp.content,
71-
offsets: [prop.exp.loc.start.offset, undefined],
72+
offsets: [prop.exp.loc.start.offset],
7273
astHolder: prop.exp.loc,
7374
};
7475
props = props.filter(p => p !== prop);
@@ -80,7 +81,7 @@ export function* generateComponent(
8081
// namespace tag
8182
dynamicTagInfo = {
8283
tag: node.tag,
83-
offsets: [startTagOffset, endTagOffset],
84+
offsets: tagOffsets,
8485
astHolder: node.loc,
8586
};
8687
}
@@ -157,7 +158,7 @@ export function* generateComponent(
157158
yield `>).`;
158159
yield* generateCanonicalComponentName(
159160
node.tag,
160-
startTagOffset,
161+
tagOffsets[0],
161162
ctx.codeFeatures.withoutHighlightAndCompletionAndNavigation
162163
);
163164
yield `${endOfLine}`;
@@ -189,7 +190,7 @@ export function* generateComponent(
189190
yield `// @ts-ignore${newLine}`; // #2304
190191
yield* generateCamelized(
191192
capitalize(node.tag),
192-
startTagOffset,
193+
tagOffsets[0],
193194
{
194195
completion: {
195196
isAdditional: true,
@@ -227,8 +228,8 @@ export function* generateComponent(
227228
yield* generateComponentGeneric(ctx);
228229
yield `(`;
229230
yield* wrapWith(
230-
startTagOffset,
231-
startTagOffset + node.tag.length,
231+
tagOffsets[0],
232+
tagOffsets[0] + node.tag.length,
232233
ctx.codeFeatures.verification,
233234
`{${newLine}`,
234235
...generateElementProps(options, ctx, node, props, options.vueCompilerOptions.strictTemplates, true, failedPropExps),

0 commit comments

Comments
 (0)