diff --git a/src/providers/xref.provider.ts b/src/providers/xref.provider.ts index 943727be..949452d9 100644 --- a/src/providers/xref.provider.ts +++ b/src/providers/xref.provider.ts @@ -30,14 +30,17 @@ function shouldProvide (context: Context): boolean { } async function getLabels (): Promise { - const regex = /\\[\\[(\\w+)\\]\\]/g - const labels = await vscode.workspace.findFiles('**/*.adoc').then((files) => - files + const regex = /\[\[(\w+)\]\]/g + const labels = await vscode.workspace.findFiles('**/*.adoc').then((files) => { + const contentOfFilesConcatenated = files .map((uri) => readFileSync(uri.path).toString('utf-8')) .join('\n') - .match(regex) - .map((result) => result.replace('[[', '').replace(']]', '')) - ) + const matched = contentOfFilesConcatenated.match(regex) + if (matched) { + return matched.map((result) => result.replace('[[', '').replace(']]', '')) + } + return [] + }) return labels } diff --git a/src/test/xrefCompletionProvider.test.ts b/src/test/xrefCompletionProvider.test.ts new file mode 100644 index 00000000..2f92aa43 --- /dev/null +++ b/src/test/xrefCompletionProvider.test.ts @@ -0,0 +1,36 @@ +import 'mocha' +import * as vscode from 'vscode' +import assert from 'assert' +import { xrefProvider } from '../providers/xref.provider' +import { Position } from 'vscode' + +let root + +suite('Xref CompletionsProvider', () => { + const createdFiles: vscode.Uri[] = [] + setup(() => { + root = vscode.workspace.workspaceFolders[0].uri.fsPath + }) + teardown(async () => { + for (const createdFile of createdFiles) { + await vscode.workspace.fs.delete(createdFile) + } + }) + test('Should return other ids from old style double-brackets as completion after "xref:"', async () => { + const fileToAutoComplete = vscode.Uri.file(`${root}/fileToAutoComplete.adoc`) + await vscode.workspace.fs.writeFile(fileToAutoComplete, Buffer.from('xref:')) + createdFiles.push(fileToAutoComplete) + + const fileThatShouldAppearInAutoComplete = vscode.Uri.file(`${root}/fileToAppearInAutoComplete.adoc`) + await vscode.workspace.fs.writeFile(fileThatShouldAppearInAutoComplete, Buffer.from('[[anOldStyleID]]')) + createdFiles.push(fileThatShouldAppearInAutoComplete) + + const file = await vscode.workspace.openTextDocument(fileToAutoComplete) + const completionsItems = await xrefProvider.provideCompletionItems(file, new Position(0, 5)) + const filteredCompletionItems = completionsItems.filter((completionItem) => completionItem.label === 'anOldStyleID[]') + assert.deepStrictEqual(filteredCompletionItems[0], { + kind: vscode.CompletionItemKind.Reference, + label: 'anOldStyleID[]', + }) + }) +})