improved error feedback and fix completion issue

This commit is contained in:
2026-04-23 23:00:01 +02:00
parent a7846b54e5
commit 8454cc95f5
5 changed files with 26 additions and 4 deletions

View File

@@ -86,6 +86,10 @@
"title": "AppDaemon: Refresh Entity List", "title": "AppDaemon: Refresh Entity List",
"icon": "$(sync)" "icon": "$(sync)"
}, },
{
"command": "appdaemon.handleErrors",
"title": "AppDaemon: Handle Errors"
},
{ {
"command": "appdaemon.clearErrors", "command": "appdaemon.clearErrors",
"title": "AppDaemon: Clear Error Diagnostics" "title": "AppDaemon: Clear Error Diagnostics"

View File

@@ -37,7 +37,10 @@ export class EntityCompletionProvider implements vscode.CompletionItemProvider {
const domain = dotMatch[1]; const domain = dotMatch[1];
const partial = dotMatch[2]; const partial = dotMatch[2];
if (this.cachedDomains.has(domain)) { if (this.cachedDomains.has(domain)) {
const items = this.buildDomainItems(entities, domain, partial); // Range covers "domain.partial" so the full entity_id replaces it
const replaceStart = position.translate(0, -(domain.length + 1 + partial.length));
const replaceRange = new vscode.Range(replaceStart, position);
const items = this.buildDomainItems(entities, domain, partial, replaceRange);
if (items.length > 0) { if (items.length > 0) {
return new vscode.CompletionList(items, false); return new vscode.CompletionList(items, false);
} }
@@ -80,7 +83,8 @@ export class EntityCompletionProvider implements vscode.CompletionItemProvider {
private buildDomainItems( private buildDomainItems(
entities: HAEntity[], entities: HAEntity[],
domain: string, domain: string,
partial: string partial: string,
replaceRange: vscode.Range
): vscode.CompletionItem[] { ): vscode.CompletionItem[] {
const items: vscode.CompletionItem[] = []; const items: vscode.CompletionItem[] = [];
const prefix = `${domain}.`; const prefix = `${domain}.`;
@@ -105,6 +109,7 @@ export class EntityCompletionProvider implements vscode.CompletionItemProvider {
item.documentation = new vscode.MarkdownString(formatEntityMarkdown(entity)); item.documentation = new vscode.MarkdownString(formatEntityMarkdown(entity));
item.filterText = entity.entity_id; item.filterText = entity.entity_id;
item.sortText = entity.entity_id; item.sortText = entity.entity_id;
item.range = replaceRange;
items.push(item); items.push(item);
} }
return items; return items;

View File

@@ -285,7 +285,18 @@ export async function activate(context: vscode.ExtensionContext) {
vscode.commands.registerCommand('appdaemon.showErrors', () => { vscode.commands.registerCommand('appdaemon.showErrors', () => {
errorViewer.show(); errorViewer.show();
}), }),
vscode.commands.registerCommand('appdaemon.handleErrors', async () => {
const pick = await vscode.window.showErrorMessage(
'AppDaemon errors detected',
'Show log',
'Clear'
);
if (pick === 'Show log') {
errorViewer.show();
} else if (pick === 'Clear') {
errorViewer.clearDiagnostics();
}
}),
vscode.commands.registerCommand('appdaemon.refreshEntities', async () => { vscode.commands.registerCommand('appdaemon.refreshEntities', async () => {
const entities = await haClient.fetchEntities(); const entities = await haClient.fetchEntities();
vscode.window.showInformationMessage(`AppDaemon: ${entities.length} entities loaded`); vscode.window.showInformationMessage(`AppDaemon: ${entities.length} entities loaded`);

View File

@@ -78,11 +78,13 @@ export class StatusBarManager {
if (count > 0) { if (count > 0) {
this.errorItem.text = `$(warning) AD Errors (${count})`; this.errorItem.text = `$(warning) AD Errors (${count})`;
this.errorItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground'); this.errorItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');
this.errorItem.tooltip = `${count} error(s) in AppDaemon log — click to view`; this.errorItem.tooltip = `${count} error(s) — click to show or clear`;
this.errorItem.command = 'appdaemon.handleErrors';
} else { } else {
this.errorItem.text = '$(check) AD Errors'; this.errorItem.text = '$(check) AD Errors';
this.errorItem.backgroundColor = undefined; this.errorItem.backgroundColor = undefined;
this.errorItem.tooltip = 'No AppDaemon errors — click to view log'; this.errorItem.tooltip = 'No AppDaemon errors — click to view log';
this.errorItem.command = 'appdaemon.showErrors';
} }
} }