Skip to content

Commit 9069ba2

Browse files
Use sourceLocationPrefix to get relative path inside database
1 parent ebc5ef2 commit 9069ba2

File tree

4 files changed

+35
-11
lines changed

4 files changed

+35
-11
lines changed

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class DataExtensionsEditorModule extends DisposableObject {
4545
baseQueryStorageDir,
4646
"data-extensions-editor-results",
4747
);
48-
this.modelDetailsPanel = this.push(new ModelDetailsPanel());
48+
this.modelDetailsPanel = this.push(new ModelDetailsPanel(cliServer));
4949
}
5050

5151
public static async initialize(

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
7373
private readonly updateModelDetailsPanelState: (
7474
externalApiUsages: ExternalApiUsage[],
7575
databaseItem: DatabaseItem,
76-
) => void,
76+
) => Promise<void>,
7777
) {
7878
super(ctx);
7979

@@ -302,7 +302,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
302302
t: "setExternalApiUsages",
303303
externalApiUsages,
304304
});
305-
this.updateModelDetailsPanelState(
305+
await this.updateModelDetailsPanelState(
306306
externalApiUsages,
307307
this.databaseItem,
308308
);

extensions/ql-vscode/src/data-extensions-editor/model-details/model-details-data-provider.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,43 @@ import {
66
TreeDataProvider,
77
TreeItem,
88
TreeItemCollapsibleState,
9+
Uri,
910
} from "vscode";
1011
import { DisposableObject } from "../../common/disposable-object";
1112
import { ExternalApiUsage, Usage } from "../external-api-usage";
1213
import { DatabaseItem } from "../../databases/local-databases";
14+
import { relative } from "path";
15+
import { CodeQLCliServer } from "../../codeql-cli/cli";
1316

1417
export class ModelDetailsDataProvider
1518
extends DisposableObject
1619
implements TreeDataProvider<ModelDetailsTreeViewItem>
1720
{
1821
private externalApiUsages: ExternalApiUsage[] = [];
1922
private databaseItem: DatabaseItem | undefined = undefined;
23+
private sourceLocationPrefix: string | undefined = undefined;
2024

2125
private readonly onDidChangeTreeDataEmitter = this.push(
2226
new EventEmitter<void>(),
2327
);
2428

29+
public constructor(private readonly cliServer: CodeQLCliServer) {
30+
super();
31+
}
32+
2533
public get onDidChangeTreeData(): Event<void> {
2634
return this.onDidChangeTreeDataEmitter.event;
2735
}
2836

29-
public setState(
37+
public async setState(
3038
externalApiUsages: ExternalApiUsage[],
3139
databaseItem: DatabaseItem,
32-
): void {
40+
): Promise<void> {
3341
this.externalApiUsages = externalApiUsages;
3442
this.databaseItem = databaseItem;
43+
this.sourceLocationPrefix = await this.databaseItem.getSourceLocationPrefix(
44+
this.cliServer,
45+
);
3546
this.onDidChangeTreeDataEmitter.fire();
3647
}
3748

@@ -44,7 +55,10 @@ export class ModelDetailsDataProvider
4455
};
4556
} else {
4657
return {
47-
label: `${item.label} at ${item.url.uri} [${item.url.startLine}, ${item.url.endLine}]`,
58+
label: item.label,
59+
description: `${this.relativePathWithinDatabase(item.url.uri)} [${
60+
item.url.startLine
61+
}, ${item.url.endLine}]`,
4862
collapsibleState: TreeItemCollapsibleState.None,
4963
command: {
5064
title: "Show usage",
@@ -56,6 +70,15 @@ export class ModelDetailsDataProvider
5670
}
5771
}
5872

73+
private relativePathWithinDatabase(uri: string): string {
74+
const parsedUri = Uri.parse(uri);
75+
if (this.sourceLocationPrefix) {
76+
return relative(this.sourceLocationPrefix, parsedUri.fsPath);
77+
} else {
78+
return parsedUri.fsPath;
79+
}
80+
}
81+
5982
getChildren(item?: ModelDetailsTreeViewItem): ModelDetailsTreeViewItem[] {
6083
if (item === undefined) {
6184
return this.externalApiUsages;

extensions/ql-vscode/src/data-extensions-editor/model-details/model-details-panel.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,28 @@ import { DisposableObject } from "../../common/disposable-object";
33
import { ModelDetailsDataProvider } from "./model-details-data-provider";
44
import { DatabaseItem } from "../../databases/local-databases";
55
import { ExternalApiUsage, Usage } from "../external-api-usage";
6+
import { CodeQLCliServer } from "../../codeql-cli/cli";
67

78
export class ModelDetailsPanel extends DisposableObject {
89
private readonly dataProvider: ModelDetailsDataProvider;
910
private readonly treeView: TreeView<ExternalApiUsage | Usage>;
1011

11-
public constructor() {
12+
public constructor(cliServer: CodeQLCliServer) {
1213
super();
1314

14-
this.dataProvider = new ModelDetailsDataProvider();
15+
this.dataProvider = new ModelDetailsDataProvider(cliServer);
1516

1617
this.treeView = window.createTreeView("codeQLModelDetails", {
1718
treeDataProvider: this.dataProvider,
1819
});
1920
this.push(this.treeView);
2021
}
2122

22-
public setState(
23+
public async setState(
2324
externalApiUsages: ExternalApiUsage[],
2425
databaseItem: DatabaseItem,
25-
): void {
26-
this.dataProvider.setState(externalApiUsages, databaseItem);
26+
): Promise<void> {
27+
await this.dataProvider.setState(externalApiUsages, databaseItem);
2728
this.treeView.badge = {
2829
value: externalApiUsages.length,
2930
tooltip: "Number of external APIs",

0 commit comments

Comments
 (0)