in src/provider/autoCompletion.ts [10:68]
async provideCompletionItems(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.CompletionContext,
) {
const language = vscode.window.activeTextEditor?.document.languageId;
const service = alicloudAPIMessageService;
const items = service.pontManager.localPontSpecs
.map((pontSpec) => {
return AlicloudApiCommands.getPickItems(pontSpec);
})
.reduce((pre, next) => pre.concat(next), []);
// 支持换行 代码从起始位置到输入位置
const text = document.getText(
new vscode.Range(new vscode.Position(position.line, position.character - 1), position),
);
let completionItems = [] as any;
// 支持已订阅的API搜索
if (items?.find((item) => item?.label?.toLocaleLowerCase()?.includes(text?.toLocaleLowerCase()))) {
const searchAPIs = items?.filter((item) => item?.label?.toLocaleLowerCase().includes(text?.toLocaleLowerCase()));
completionItems = searchAPIs?.map((api) => {
let completionItem = new vscode.CompletionItem(api.label, vscode.CompletionItemKind["Interface"]);
completionItem.detail = api.detail;
completionItem.documentation = api.summary || api.description;
completionItem.tags = api.tags;
// 代码替换位置,查找位置会同步应用
completionItem.range = new vscode.Range(
new vscode.Position(position.line, position.character - text.length),
new vscode.Position(position.line, position.character),
);
return completionItem;
});
if (language === "java") {
const javaAsyncCompletionItems = searchAPIs?.map((api) => {
let javaAsyncCompletionItem = new vscode.CompletionItem(
api.label + "(java-async)",
vscode.CompletionItemKind["Interface"],
);
javaAsyncCompletionItem.detail = api.detail;
javaAsyncCompletionItem.documentation = api.summary || api.description;
javaAsyncCompletionItem.tags = api.tags;
// 代码替换位置,查找位置会同步应用
javaAsyncCompletionItem.range = new vscode.Range(
new vscode.Position(position.line, position.character - text.length),
new vscode.Position(position.line, position.character),
);
return javaAsyncCompletionItem;
});
completionItems = [...completionItems, ...javaAsyncCompletionItems];
}
return completionItems;
}
}