Actually refresh the treeview when updating SARIF context value

This commit is contained in:
Jason Reed
2020-09-29 14:43:38 -04:00
committed by Andrew Eisenberg
parent f4775954b6
commit 5244a1c3b0
2 changed files with 21 additions and 12 deletions

View File

@@ -43,7 +43,7 @@ import { spawnIdeServer } from './ide-server';
import { InterfaceManager } from './interface';
import { WebviewReveal } from './interface-utils';
import { ideServerLogger, logger, queryServerLogger } from './logging';
import { QueryHistoryManager, updateTreeItemContextValue } from './query-history';
import { QueryHistoryManager } from './query-history';
import { CompletedQuery } from './query-results';
import * as qsClient from './queryserver-client';
import { displayQuickQuery } from './quick-query';
@@ -409,7 +409,7 @@ async function activateWithInstalledDistribution(
// The call to showResults potentially creates SARIF file;
// Update the tree item context value to allow viewing that
// SARIF file from context menu.
await updateTreeItemContextValue(item);
await qhm.updateTreeItemContextValue(item);
} catch (e) {
if (e instanceof UserCancellationException) {
if (e.silent) {

View File

@@ -50,20 +50,14 @@ const SHOW_QUERY_TEXT_QUICK_EVAL_MSG = `\
*/
const FAILED_QUERY_HISTORY_ITEM_ICON = 'media/red-x.svg';
export async function updateTreeItemContextValue(element: CompletedQuery): Promise<void> {
// Mark this query history item according to whether it has a
// SARIF file so that we can make context menu items conditionally
// available.
element.treeItem!.contextValue = (await element.query.hasInterpretedResults())
? 'interpretedResultsItem'
: 'rawResultsItem';
interface QueryHistoryDataProvider extends vscode.TreeDataProvider<CompletedQuery> {
updateTreeItemContextValue(element: CompletedQuery): Promise<void>;
}
/**
* Tree data provider for the query history view.
*/
class HistoryTreeDataProvider
implements vscode.TreeDataProvider<CompletedQuery> {
class HistoryTreeDataProvider implements QueryHistoryDataProvider {
/**
* XXX: This idiom for how to get a `.fire()`-able event emitter was
* cargo culted from another vscode extension. It seems rather
@@ -85,6 +79,17 @@ class HistoryTreeDataProvider
constructor(private ctx: ExtensionContext) { }
async updateTreeItemContextValue(element: CompletedQuery): Promise<void> {
// Mark this query history item according to whether it has a
// SARIF file so that we can make context menu items conditionally
// available.
const hasResults = await element.query.hasInterpretedResults();
element.treeItem!.contextValue = hasResults
? 'interpretedResultsItem'
: 'rawResultsItem';
this.refresh();
}
async getTreeItem(element: CompletedQuery): Promise<vscode.TreeItem> {
if (element.treeItem !== undefined)
return element.treeItem;
@@ -98,7 +103,7 @@ class HistoryTreeDataProvider
};
element.treeItem = it;
updateTreeItemContextValue(element);
this.updateTreeItemContextValue(element);
if (!element.didRunSuccessfully) {
it.iconPath = path.join(
@@ -623,4 +628,8 @@ the file in the file explorer and dragging it into the workspace.`
this.compareWithItem = undefined;
}
}
async updateTreeItemContextValue(element: CompletedQuery): Promise<void> {
this.treeDataProvider.updateTreeItemContextValue(element);
}
}