data workspace extension batch 2 (#12208)

* work in progress

* load projects in view and test cases

* update scope

* make the sql proj menu available in workspace view

* add extension unit test

* address comments

* fix errors
This commit is contained in:
Alan Ren
2020-09-10 17:17:57 -07:00
committed by GitHub
parent cd8102535b
commit 7df132b307
20 changed files with 645 additions and 32 deletions

View File

@@ -22,6 +22,9 @@ export const msdbDacpac = 'msdb.dacpac';
export const MicrosoftDatatoolsSchemaSqlSql = 'Microsoft.Data.Tools.Schema.Sql.Sql';
export const databaseSchemaProvider = 'DatabaseSchemaProvider';
// Project Provider
export const projectTypeDisplayName = localize('projectTypeDisplayName', 'Database Project');
// commands
export const revealFileInOsCommand = 'revealFileInOS';
export const schemaCompareStartCommand = 'schemaCompare.start';

View File

@@ -5,6 +5,7 @@
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import * as dataworkspace from 'dataworkspace';
import * as templates from '../templates/templates';
import * as constants from '../common/constants';
import * as path from 'path';
@@ -19,6 +20,7 @@ import { NetCoreTool } from '../tools/netcoreTool';
import { Project } from '../models/project';
import { FileNode, FolderNode } from '../models/tree/fileFolderTreeItem';
import { IconPathHelper } from '../common/iconHelper';
import { SqlDatabaseProjectProvider } from '../projectProvider/projectProvider';
const SQL_DATABASE_PROJECTS_VIEW_ID = 'sqlDatabaseProjectsView';
@@ -78,6 +80,7 @@ export default class MainController implements vscode.Disposable {
vscode.commands.registerCommand('sqlDatabaseProjects.exclude', async (node: FileNode | FolderNode) => { await this.projectsController.exclude(node); });
IconPathHelper.setExtensionContext(this.extensionContext);
this.registerProjectProvider();
// init view
const treeView = vscode.window.createTreeView(SQL_DATABASE_PROJECTS_VIEW_ID, {
@@ -190,6 +193,13 @@ export default class MainController implements vscode.Disposable {
}
}
private registerProjectProvider(): void {
const dataWorkspaceApi: dataworkspace.IExtension = <dataworkspace.IExtension>vscode.extensions.getExtension(dataworkspace.extension.name)?.exports;
if (dataWorkspaceApi) {
dataWorkspaceApi.registerProjectProvider(new SqlDatabaseProjectProvider());
}
}
public dispose(): void {
this.deactivate();
}

View File

@@ -0,0 +1,37 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as dataworkspace from 'dataworkspace';
import * as vscode from 'vscode';
import { sqlprojExtension, projectTypeDisplayName } from '../common/constants';
import { IconPathHelper } from '../common/iconHelper';
import { SqlDatabaseProjectTreeViewProvider } from '../controllers/databaseProjectTreeViewProvider';
import { Project } from '../models/project';
import { BaseProjectTreeItem } from '../models/tree/baseTreeItem';
export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvider {
/**
* Gets the project tree data provider
* @param projectFilePath The project file path
*/
async getProjectTreeDataProvider(projectFilePath: string): Promise<vscode.TreeDataProvider<BaseProjectTreeItem>> {
const provider = new SqlDatabaseProjectTreeViewProvider();
const project = await Project.openProject(projectFilePath);
provider.load([project]);
return provider;
}
/**
* Gets the supported project types
*/
get supportedProjectTypes(): dataworkspace.IProjectType[] {
return [{
projectFileExtension: sqlprojExtension.replace(/\./g, ''),
displayName: projectTypeDisplayName,
icon: IconPathHelper.databaseProject
}];
}
}

View File

@@ -6,4 +6,5 @@
/// <reference path='../../../../src/vs/vscode.d.ts'/>
/// <reference path='../../../../src/sql/azdata.d.ts'/>
/// <reference path='../../../../src/sql/azdata.proposed.d.ts'/>
/// <reference path='../../../data-workspace/src/dataworkspace.d.ts'/>
/// <reference types='@types/node'/>