Skip to content

Commit 00e347e

Browse files
authored
feat: completion for custom element tag name and event (#2300)
For #1560 and #2245. Adding completion for element tag name from custom type definition and some small performance tweaks with completion. #1560 is already showing but needed some TextEdit so it doesn't end up with on:on:input
1 parent 1b5e913 commit 00e347e

File tree

10 files changed

+276
-97
lines changed

10 files changed

+276
-97
lines changed

packages/language-server/src/lib/documents/utils.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Position, Range } from 'vscode-languageserver';
33
import { Node, HTMLDocument } from 'vscode-html-languageservice';
44
import * as path from 'path';
55
import { parseHtml } from './parseHtml';
6+
import { Document } from './Document';
67

78
export interface TagInformation {
89
content: string;
@@ -396,8 +397,14 @@ export function getWordAt(
396397
/**
397398
* Returns start/end offset of a text into a range
398399
*/
399-
export function toRange(str: string, start: number, end: number): Range {
400-
return Range.create(positionAt(start, str), positionAt(end, str));
400+
export function toRange(str: string, start: number, end: number): Range;
401+
export function toRange(str: Document, start: number, end: number): Range;
402+
export function toRange(str: string | Document, start: number, end: number): Range {
403+
if (typeof str === 'string') {
404+
return Range.create(positionAt(start, str), positionAt(end, str));
405+
}
406+
407+
return Range.create(str.positionAt(start), str.positionAt(end));
401408
}
402409

403410
/**

packages/language-server/src/plugins/html/HTMLPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ export class HTMLPlugin
314314
}
315315
const tagNameStart = node.start + '<'.length;
316316

317-
return toRange(document.getText(), tagNameStart, tagNameStart + node.tag.length);
317+
return toRange(document, tagNameStart, tagNameStart + node.tag.length);
318318
}
319319

320320
getLinkedEditingRanges(document: Document, position: Position): LinkedEditingRanges | null {

packages/language-server/src/plugins/typescript/TypeScriptPlugin.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,7 @@ import { LSAndTSDocResolver } from './LSAndTSDocResolver';
6262
import { ignoredBuildDirectories } from './SnapshotManager';
6363
import { CallHierarchyProviderImpl } from './features/CallHierarchyProvider';
6464
import { CodeActionsProviderImpl } from './features/CodeActionsProvider';
65-
import {
66-
CompletionEntryWithIdentifier,
67-
CompletionsProviderImpl
68-
} from './features/CompletionProvider';
65+
import { CompletionResolveInfo, CompletionsProviderImpl } from './features/CompletionProvider';
6966
import { DiagnosticsProviderImpl } from './features/DiagnosticsProvider';
7067
import { FindComponentReferencesProviderImpl } from './features/FindComponentReferencesProvider';
7168
import { FindFileReferencesProviderImpl } from './features/FindFileReferencesProvider';
@@ -116,7 +113,7 @@ export class TypeScriptPlugin
116113
CallHierarchyProvider,
117114
FoldingRangeProvider,
118115
OnWatchFileChanges,
119-
CompletionsProvider<CompletionEntryWithIdentifier>,
116+
CompletionsProvider<CompletionResolveInfo>,
120117
UpdateTsOrJsFile
121118
{
122119
__name = 'ts';
@@ -325,7 +322,7 @@ export class TypeScriptPlugin
325322
position: Position,
326323
completionContext?: CompletionContext,
327324
cancellationToken?: CancellationToken
328-
): Promise<AppCompletionList<CompletionEntryWithIdentifier> | null> {
325+
): Promise<AppCompletionList<CompletionResolveInfo> | null> {
329326
if (!this.featureEnabled('completions')) {
330327
return null;
331328
}
@@ -355,9 +352,9 @@ export class TypeScriptPlugin
355352

356353
async resolveCompletion(
357354
document: Document,
358-
completionItem: AppCompletionItem<CompletionEntryWithIdentifier>,
355+
completionItem: AppCompletionItem<CompletionResolveInfo>,
359356
cancellationToken?: CancellationToken
360-
): Promise<AppCompletionItem<CompletionEntryWithIdentifier>> {
357+
): Promise<AppCompletionItem<CompletionResolveInfo>> {
361358
return this.completionProvider.resolveCompletion(
362359
document,
363360
completionItem,

0 commit comments

Comments
 (0)