Skip to content

Commit

Permalink
支持定义和完成
Browse files Browse the repository at this point in the history
  • Loading branch information
sumneko committed Nov 8, 2024
1 parent 70c2210 commit 3331540
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
36 changes: 36 additions & 0 deletions src/luaLanguage/completion.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import * as vscode from 'vscode';
import * as y3 from 'y3-helper';

export class CompletionProvider implements vscode.CompletionItemProvider {
private async provideByKey(text: string, token: vscode.CancellationToken): Promise<vscode.CompletionItem[] | null> {
let key = Number(text);
if (!Number.isInteger(key)) {
return null;
}
let objects = await y3.table.getAllObjects();
if (token.isCancellationRequested) {
throw new vscode.CancellationError();
}
let results: vscode.CompletionItem[] = [];

for (const object of objects) {
if (object.key.toString().startsWith(text)) {
let item = new vscode.CompletionItem(object.key.toString(), vscode.CompletionItemKind.Unit);
item.documentation = `${object.name}(${object.tableName})`;
results.push(item);
}
}

return results;
}

async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Promise<vscode.CompletionItem[] | null> {
if (context.triggerCharacter === '?') {
return await this.provideByKey('', token);
} else {
let range = document.getWordRangeAtPosition(position);
let text = document.getText(range);
return await this.provideByKey(text, token);
}
}
}
33 changes: 33 additions & 0 deletions src/luaLanguage/definition.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import * as vscode from 'vscode';
import * as y3 from 'y3-helper';

export class DefinitionProvider implements vscode.DefinitionProvider {
async provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.DefinitionLink[] | null> {
let range = document.getWordRangeAtPosition(position);
let text = document.getText(range);
let key = Number(text);
if (!Number.isInteger(key)) {
return null;
}
let objects = await y3.table.getObjectsByKey(key);
if (token.isCancellationRequested) {
throw new vscode.CancellationError();
}
if (objects.length === 0) {
return null;
}
let results: vscode.DefinitionLink[] = [];

for (const object of objects) {
if (!object.uri) {
continue;
}
results.push({
targetUri: object.uri,
targetRange: new vscode.Range(new vscode.Position(0, 0), new vscode.Position(0, 0)),
});
}

return results;
}
}
4 changes: 4 additions & 0 deletions src/luaLanguage/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import * as vscode from 'vscode';
import { HoverProvider } from './hover';
import { InlayHintProvider } from './inlayHint';
import { DefinitionProvider } from './definition';
import { CompletionProvider } from './completion';

class LanguageServer {
constructor() {
vscode.languages.registerHoverProvider('lua', new HoverProvider());
vscode.languages.registerInlayHintsProvider('lua', new InlayHintProvider());
vscode.languages.registerDefinitionProvider('lua', new DefinitionProvider());
vscode.languages.registerCompletionItemProvider('lua', new CompletionProvider(), ...'0123456789');
}
}

Expand Down

0 comments on commit 3331540

Please sign in to comment.