Skip to content

Commit dc2bb3a

Browse files
committed
Merge remote-tracking branch 'origin/main' into koesie10/export-progress
2 parents 7414a77 + 8b35435 commit dc2bb3a

22 files changed

Lines changed: 896 additions & 105 deletions

extensions/ql-vscode/src/databases/config/db-config.ts

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,53 @@ export interface DbConfigDatabases {
1010
local: LocalDbConfig;
1111
}
1212

13-
export interface SelectedDbItem {
14-
kind: SelectedDbItemKind;
15-
value: string;
16-
}
13+
export type SelectedDbItem =
14+
| SelectedLocalUserDefinedList
15+
| SelectedLocalDatabase
16+
| SelectedRemoteSystemDefinedList
17+
| SelectedRemoteUserDefinedList
18+
| SelectedRemoteOwner
19+
| SelectedRemoteRepository;
1720

1821
export enum SelectedDbItemKind {
19-
ConfigDefined = "configDefined",
22+
LocalUserDefinedList = "localUserDefinedList",
23+
LocalDatabase = "localDatabase",
2024
RemoteSystemDefinedList = "remoteSystemDefinedList",
25+
RemoteUserDefinedList = "remoteUserDefinedList",
26+
RemoteOwner = "remoteOwner",
27+
RemoteRepository = "remoteRepository",
28+
}
29+
30+
export interface SelectedLocalUserDefinedList {
31+
kind: SelectedDbItemKind.LocalUserDefinedList;
32+
listName: string;
33+
}
34+
35+
export interface SelectedLocalDatabase {
36+
kind: SelectedDbItemKind.LocalDatabase;
37+
databaseName: string;
38+
listName?: string;
39+
}
40+
41+
export interface SelectedRemoteSystemDefinedList {
42+
kind: SelectedDbItemKind.RemoteSystemDefinedList;
43+
listName: string;
44+
}
45+
46+
export interface SelectedRemoteUserDefinedList {
47+
kind: SelectedDbItemKind.RemoteUserDefinedList;
48+
listName: string;
49+
}
50+
51+
export interface SelectedRemoteOwner {
52+
kind: SelectedDbItemKind.RemoteOwner;
53+
ownerName: string;
54+
}
55+
56+
export interface SelectedRemoteRepository {
57+
kind: SelectedDbItemKind.RemoteRepository;
58+
repositoryName: string;
59+
listName?: string;
2160
}
2261

2362
export interface RemoteDbConfig {
@@ -70,10 +109,44 @@ export function cloneDbConfig(config: DbConfig): DbConfig {
70109
},
71110
},
72111
selected: config.selected
73-
? {
74-
kind: config.selected.kind,
75-
value: config.selected.value,
76-
}
112+
? cloneDbConfigSelectedItem(config.selected)
77113
: undefined,
78114
};
79115
}
116+
117+
function cloneDbConfigSelectedItem(selected: SelectedDbItem): SelectedDbItem {
118+
switch (selected.kind) {
119+
case SelectedDbItemKind.LocalUserDefinedList:
120+
return {
121+
kind: SelectedDbItemKind.LocalUserDefinedList,
122+
listName: selected.listName,
123+
};
124+
case SelectedDbItemKind.LocalDatabase:
125+
return {
126+
kind: SelectedDbItemKind.LocalDatabase,
127+
databaseName: selected.databaseName,
128+
listName: selected.listName,
129+
};
130+
case SelectedDbItemKind.RemoteSystemDefinedList:
131+
return {
132+
kind: SelectedDbItemKind.RemoteSystemDefinedList,
133+
listName: selected.listName,
134+
};
135+
case SelectedDbItemKind.RemoteUserDefinedList:
136+
return {
137+
kind: SelectedDbItemKind.RemoteUserDefinedList,
138+
listName: selected.listName,
139+
};
140+
case SelectedDbItemKind.RemoteOwner:
141+
return {
142+
kind: SelectedDbItemKind.RemoteOwner,
143+
ownerName: selected.ownerName,
144+
};
145+
case SelectedDbItemKind.RemoteRepository:
146+
return {
147+
kind: SelectedDbItemKind.RemoteRepository,
148+
repositoryName: selected.repositoryName,
149+
listName: selected.listName,
150+
};
151+
}
152+
}

extensions/ql-vscode/src/databases/db-item.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ export type LocalDbItem = LocalListDbItem | LocalDatabaseDbItem;
2020

2121
export interface LocalListDbItem {
2222
kind: DbItemKind.LocalList;
23+
selected: boolean;
2324
listName: string;
2425
databases: LocalDatabaseDbItem[];
2526
}
2627

2728
export interface LocalDatabaseDbItem {
2829
kind: DbItemKind.LocalDatabase;
30+
selected: boolean;
2931
databaseName: string;
3032
dateAdded: number;
3133
language: string;
@@ -51,23 +53,74 @@ export type RemoteDbItem =
5153

5254
export interface RemoteSystemDefinedListDbItem {
5355
kind: DbItemKind.RemoteSystemDefinedList;
56+
selected: boolean;
5457
listName: string;
5558
listDisplayName: string;
5659
listDescription: string;
5760
}
5861

5962
export interface RemoteUserDefinedListDbItem {
6063
kind: DbItemKind.RemoteUserDefinedList;
64+
selected: boolean;
6165
listName: string;
6266
repos: RemoteRepoDbItem[];
6367
}
6468

6569
export interface RemoteOwnerDbItem {
6670
kind: DbItemKind.RemoteOwner;
71+
selected: boolean;
6772
ownerName: string;
6873
}
6974

7075
export interface RemoteRepoDbItem {
7176
kind: DbItemKind.RemoteRepo;
77+
selected: boolean;
7278
repoFullName: string;
7379
}
80+
81+
export function isRemoteSystemDefinedListDbItem(
82+
dbItem: DbItem,
83+
): dbItem is RemoteSystemDefinedListDbItem {
84+
return dbItem.kind === DbItemKind.RemoteSystemDefinedList;
85+
}
86+
87+
export function isRemoteUserDefinedListDbItem(
88+
dbItem: DbItem,
89+
): dbItem is RemoteUserDefinedListDbItem {
90+
return dbItem.kind === DbItemKind.RemoteUserDefinedList;
91+
}
92+
93+
export function isRemoteOwnerDbItem(
94+
dbItem: DbItem,
95+
): dbItem is RemoteOwnerDbItem {
96+
return dbItem.kind === DbItemKind.RemoteOwner;
97+
}
98+
99+
export function isRemoteRepoDbItem(dbItem: DbItem): dbItem is RemoteRepoDbItem {
100+
return dbItem.kind === DbItemKind.RemoteRepo;
101+
}
102+
103+
export function isLocalListDbItem(dbItem: DbItem): dbItem is LocalListDbItem {
104+
return dbItem.kind === DbItemKind.LocalList;
105+
}
106+
107+
export function isLocalDatabaseDbItem(
108+
dbItem: DbItem,
109+
): dbItem is LocalDatabaseDbItem {
110+
return dbItem.kind === DbItemKind.LocalDatabase;
111+
}
112+
113+
export type SelectableDbItem = RemoteDbItem | LocalDbItem;
114+
115+
export function isSelectableDbItem(dbItem: DbItem): dbItem is SelectableDbItem {
116+
return SelectableDbItemKinds.includes(dbItem.kind);
117+
}
118+
119+
const SelectableDbItemKinds = [
120+
DbItemKind.LocalList,
121+
DbItemKind.LocalDatabase,
122+
DbItemKind.RemoteSystemDefinedList,
123+
DbItemKind.RemoteUserDefinedList,
124+
DbItemKind.RemoteOwner,
125+
DbItemKind.RemoteRepo,
126+
];

extensions/ql-vscode/src/databases/db-module.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import { window } from "vscode";
12
import { App, AppMode } from "../common/app";
23
import { isCanary, isNewQueryRunExperienceEnabled } from "../config";
34
import { extLogger } from "../common";
45
import { DisposableObject } from "../pure/disposable-object";
56
import { DbConfigStore } from "./config/db-config-store";
67
import { DbManager } from "./db-manager";
78
import { DbPanel } from "./ui/db-panel";
9+
import { DbSelectionDecorationProvider } from "./ui/db-selection-decoration-provider";
810

911
export class DbModule extends DisposableObject {
1012
public async initialize(app: App): Promise<void> {
@@ -30,6 +32,10 @@ export class DbModule extends DisposableObject {
3032

3133
this.push(dbPanel);
3234
this.push(dbConfigStore);
35+
36+
const dbSelectionDecorationProvider = new DbSelectionDecorationProvider();
37+
38+
window.registerFileDecorationProvider(dbSelectionDecorationProvider);
3339
}
3440
}
3541

extensions/ql-vscode/src/databases/db-tree-creator.ts

Lines changed: 78 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
LocalDatabase,
44
LocalList,
55
RemoteRepositoryList,
6+
SelectedDbItemKind,
67
} from "./config/db-config";
78
import {
89
DbItemKind,
@@ -18,16 +19,20 @@ import {
1819

1920
export function createRemoteTree(dbConfig: DbConfig): RootRemoteDbItem {
2021
const systemDefinedLists = [
21-
createSystemDefinedList(10),
22-
createSystemDefinedList(100),
23-
createSystemDefinedList(1000),
22+
createSystemDefinedList(10, dbConfig),
23+
createSystemDefinedList(100, dbConfig),
24+
createSystemDefinedList(1000, dbConfig),
2425
];
2526

2627
const userDefinedRepoLists = dbConfig.databases.remote.repositoryLists.map(
27-
createUserDefinedList,
28+
(r) => createRemoteUserDefinedList(r, dbConfig),
29+
);
30+
const owners = dbConfig.databases.remote.owners.map((o) =>
31+
createOwnerItem(o, dbConfig),
32+
);
33+
const repos = dbConfig.databases.remote.repositories.map((r) =>
34+
createRepoItem(r, dbConfig),
2835
);
29-
const owners = dbConfig.databases.remote.owners.map(createOwnerItem);
30-
const repos = dbConfig.databases.remote.repositories.map(createRepoItem);
3136

3237
return {
3338
kind: DbItemKind.RootRemote,
@@ -41,62 +46,118 @@ export function createRemoteTree(dbConfig: DbConfig): RootRemoteDbItem {
4146
}
4247

4348
export function createLocalTree(dbConfig: DbConfig): RootLocalDbItem {
44-
const localLists = dbConfig.databases.local.lists.map(createLocalList);
45-
const localDbs = dbConfig.databases.local.databases.map(createLocalDb);
49+
const localLists = dbConfig.databases.local.lists.map((l) =>
50+
createLocalList(l, dbConfig),
51+
);
52+
const localDbs = dbConfig.databases.local.databases.map((l) =>
53+
createLocalDb(l, dbConfig),
54+
);
4655

4756
return {
4857
kind: DbItemKind.RootLocal,
4958
children: [...localLists, ...localDbs],
5059
};
5160
}
5261

53-
function createSystemDefinedList(n: number): RemoteSystemDefinedListDbItem {
62+
function createSystemDefinedList(
63+
n: number,
64+
dbConfig: DbConfig,
65+
): RemoteSystemDefinedListDbItem {
66+
const listName = `top_${n}`;
67+
68+
const selected =
69+
dbConfig.selected &&
70+
dbConfig.selected.kind === SelectedDbItemKind.RemoteSystemDefinedList &&
71+
dbConfig.selected.listName === listName;
72+
5473
return {
5574
kind: DbItemKind.RemoteSystemDefinedList,
56-
listName: `top_${n}`,
75+
listName,
5776
listDisplayName: `Top ${n} repositories`,
5877
listDescription: `Top ${n} repositories of a language`,
78+
selected: !!selected,
5979
};
6080
}
6181

62-
function createUserDefinedList(
82+
function createRemoteUserDefinedList(
6383
list: RemoteRepositoryList,
84+
dbConfig: DbConfig,
6485
): RemoteUserDefinedListDbItem {
86+
const selected =
87+
dbConfig.selected &&
88+
dbConfig.selected.kind === SelectedDbItemKind.RemoteUserDefinedList &&
89+
dbConfig.selected.listName === list.name;
90+
6591
return {
6692
kind: DbItemKind.RemoteUserDefinedList,
6793
listName: list.name,
68-
repos: list.repositories.map((r) => createRepoItem(r)),
94+
repos: list.repositories.map((r) => createRepoItem(r, dbConfig, list.name)),
95+
selected: !!selected,
6996
};
7097
}
7198

72-
function createOwnerItem(owner: string): RemoteOwnerDbItem {
99+
function createOwnerItem(owner: string, dbConfig: DbConfig): RemoteOwnerDbItem {
100+
const selected =
101+
dbConfig.selected &&
102+
dbConfig.selected.kind === SelectedDbItemKind.RemoteOwner &&
103+
dbConfig.selected.ownerName === owner;
104+
73105
return {
74106
kind: DbItemKind.RemoteOwner,
75107
ownerName: owner,
108+
selected: !!selected,
76109
};
77110
}
78111

79-
function createRepoItem(repo: string): RemoteRepoDbItem {
112+
function createRepoItem(
113+
repo: string,
114+
dbConfig: DbConfig,
115+
listName?: string,
116+
): RemoteRepoDbItem {
117+
const selected =
118+
dbConfig.selected &&
119+
dbConfig.selected.kind === SelectedDbItemKind.RemoteRepository &&
120+
dbConfig.selected.repositoryName === repo &&
121+
dbConfig.selected.listName === listName;
122+
80123
return {
81124
kind: DbItemKind.RemoteRepo,
82125
repoFullName: repo,
126+
selected: !!selected,
83127
};
84128
}
85129

86-
function createLocalList(list: LocalList): LocalListDbItem {
130+
function createLocalList(list: LocalList, dbConfig: DbConfig): LocalListDbItem {
131+
const selected =
132+
dbConfig.selected &&
133+
dbConfig.selected.kind === SelectedDbItemKind.LocalUserDefinedList &&
134+
dbConfig.selected.listName === list.name;
135+
87136
return {
88137
kind: DbItemKind.LocalList,
89138
listName: list.name,
90-
databases: list.databases.map(createLocalDb),
139+
databases: list.databases.map((d) => createLocalDb(d, dbConfig, list.name)),
140+
selected: !!selected,
91141
};
92142
}
93143

94-
function createLocalDb(db: LocalDatabase): LocalDatabaseDbItem {
144+
function createLocalDb(
145+
db: LocalDatabase,
146+
dbConfig: DbConfig,
147+
listName?: string,
148+
): LocalDatabaseDbItem {
149+
const selected =
150+
dbConfig.selected &&
151+
dbConfig.selected.kind === SelectedDbItemKind.LocalDatabase &&
152+
dbConfig.selected.databaseName === db.name &&
153+
dbConfig.selected.listName === listName;
154+
95155
return {
96156
kind: DbItemKind.LocalDatabase,
97157
databaseName: db.name,
98158
dateAdded: db.dateAdded,
99159
language: db.language,
100160
storagePath: db.storagePath,
161+
selected: !!selected,
101162
};
102163
}

0 commit comments

Comments
 (0)