Add completion for default icons (#7)

This commit is contained in:
Robin van der Linde 2025-01-15 20:35:39 +01:00
parent 80a536d848
commit 720f4e6c2f
Signed by: Robin-van-der-Linde
GPG key ID: 53956B3252478F0D
2 changed files with 54 additions and 0 deletions

View file

@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
This allows the completions to show _all_ filters, not just the ones in `filters.json` and `questions.json`.
It's also possible to look up uses of a filter or a tagRendering.
The caching will take about 30 seconds to complete, but it will only run once per session, and will update individual files as they are saved or removed.
- Autocompletion for `icon` fields, giving the built-in icons as suggestions.
### Fixed

View file

@ -12,6 +12,59 @@ import {
vsCodeToHex,
} from "./utils/color";
export const iconCompletionProvider =
vscode.languages.registerCompletionItemProvider(
{
language: "json",
scheme: "file",
pattern: "**/assets/*/*/*.json",
},
{
async provideCompletionItems(
document: vscode.TextDocument,
position: vscode.Position
) {
console.log("iconCompletionProvider");
const text = document.getText();
const jsonPath = getCursorPath(text, position);
const regexes = [/icon$/, /icon.render/, /icon.mappings.\d+.then$/];
if (regexes.some((regex) => regex.exec(jsonPath))) {
// We need to look at all the files in the assets/svg folder
const svgFolder = path.join(
(vscode.workspace.workspaceFolders
? vscode.workspace.workspaceFolders[0].uri.fsPath
: "") || "",
"assets",
"svg"
);
const files = await vscode.workspace.fs.readDirectory(
vscode.Uri.file(svgFolder)
);
const icons: vscode.CompletionItem[] = [];
files.forEach((file) => {
if (file[1] === 1) {
if (file[0].endsWith(".svg")) {
const name = file[0].split(".")[0];
icons.push({
label: name,
kind: vscode.CompletionItemKind.File,
insertText: name,
});
}
}
});
return icons;
}
},
}
);
/**
* Icon definition provider
*