forked from asciidoctor/asciidoctor-vscode
/
attributeReferenceProvider.ts
31 lines (28 loc) · 1.18 KB
/
attributeReferenceProvider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import * as vscode from 'vscode'
import { AsciidocParser } from '../asciidocParser'
export class AttributeReferenceProvider {
constructor (private readonly extensionUri: vscode.Uri) {
}
async provideCompletionItems (textDocument: vscode.TextDocument, position: vscode.Position) {
const { document } = await new AsciidocParser(this.extensionUri).parseText(textDocument.getText(), textDocument)
if (document) {
const attributes = document.getAttributes()
const lineText = textDocument.lineAt(position).text
const prefix = lineText.substring(position.character - 1, position.character)
const suffix = lineText.substring(position.character, position.character + 1)
return Object.keys(attributes).map((key) => {
const completionItem = new vscode.CompletionItem({
label: key,
description: attributes[key]?.toString(),
},
vscode.CompletionItemKind.Variable)
let insertText = key
insertText = prefix !== '{' ? `{${insertText}` : insertText
insertText = suffix !== '}' ? `${insertText}}` : insertText
completionItem.insertText = insertText
return completionItem
}
)
}
}
}