Initial SQL Project tree viewlet in Explorer sidebar (#8639)

* Adding mock contents for tree
* added open sqlproj dialog
* reading files from directory
* Added directory traversal
* Adding tree sorting by folder vs file and label
* Improved auto-unfolding of tree based on node type
* replacing fs with fs.promise alias
* added activation event for when workspace contains sqlproj files
* Returning after displaying error
This commit is contained in:
Benjin Dubishar
2019-12-27 12:42:23 -08:00
committed by GitHub
parent 4a8609c3ef
commit 51ab435e5f
9 changed files with 256 additions and 10 deletions

View File

@@ -4,12 +4,21 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
import { SqlDatabaseProjectTreeViewProvider } from './databaseProjectTreeViewProvider';
import { getErrorMessage } from '../common/utils';
const SQL_DATABASE_PROJECTS_VIEW_ID = 'sqlDatabaseProjectsView';
const localize = nls.loadMessageBundle();
/**
* The main controller class that initializes the extension
*/
export default class MainController implements vscode.Disposable {
protected _context: vscode.ExtensionContext;
protected dbProjectTreeViewProvider: SqlDatabaseProjectTreeViewProvider = new SqlDatabaseProjectTreeViewProvider();
public constructor(context: vscode.ExtensionContext) {
this._context = context;
@@ -22,14 +31,36 @@ export default class MainController implements vscode.Disposable {
public deactivate(): void {
}
public activate(): Promise<boolean> {
this.initializeDatabaseProjects();
return Promise.resolve(true);
public async activate(): Promise<void> {
await this.initializeDatabaseProjects();
}
private initializeDatabaseProjects(): void {
vscode.commands.registerCommand('sqlDatabaseProjects.new', () => { console.log('new database project called'); });
vscode.commands.registerCommand('sqlDatabaseProjects.open', () => { console.log('open database project called'); });
private async initializeDatabaseProjects(): Promise<void> {
// init commands
vscode.commands.registerCommand('sqlDatabaseProjects.new', () => { console.log('"New Database Project" called.'); });
vscode.commands.registerCommand('sqlDatabaseProjects.open', async () => { this.openProjectFolder(); });
// init view
this.dbProjectTreeViewProvider = new SqlDatabaseProjectTreeViewProvider();
this.extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider(SQL_DATABASE_PROJECTS_VIEW_ID, this.dbProjectTreeViewProvider));
}
public async openProjectFolder(): Promise<void> {
try {
let filter: { [key: string]: string[] } = {};
filter[localize('sqlDatabaseProject', "SQL database project")] = ['sqlproj'];
let file = await vscode.window.showOpenDialog({ filters: filter });
if (file) {
await this.dbProjectTreeViewProvider.openProject(file);
}
}
catch (err) {
vscode.window.showErrorMessage(getErrorMessage(err));
}
}
public dispose(): void {