filter data-workspace projects by ext (#14354)

* add filtering by project extension

* Fix tests

* addressing comments

* convert to lowercase
This commit is contained in:
Kim Santiago
2021-02-22 13:21:25 -08:00
committed by GitHub
parent f62889002d
commit 551eb76a42
7 changed files with 17 additions and 9 deletions

View File

@@ -12,8 +12,8 @@ export class DataWorkspaceExtension implements IExtension {
constructor(private workspaceService: WorkspaceService) {
}
getProjectsInWorkspace(): vscode.Uri[] {
return this.workspaceService.getProjectsInWorkspace();
getProjectsInWorkspace(ext?: string): vscode.Uri[] {
return this.workspaceService.getProjectsInWorkspace(ext);
}
addProjectsToWorkspace(projectFiles: vscode.Uri[], workspaceFilePath?: vscode.Uri): Promise<void> {

View File

@@ -15,8 +15,9 @@ declare module 'dataworkspace' {
export interface IExtension {
/**
* Returns all the projects in the workspace
* @param ext project extension to filter on. If this is passed in, this will only return projects with this file extension
*/
getProjectsInWorkspace(): vscode.Uri[];
getProjectsInWorkspace(ext?: string): vscode.Uri[];
/**
* Add projects to the workspace

View File

@@ -155,8 +155,15 @@ export class WorkspaceService implements IWorkspaceService {
return projectTypes;
}
getProjectsInWorkspace(): vscode.Uri[] {
return vscode.workspace.workspaceFile ? this.getWorkspaceConfigurationValue<string[]>(ProjectsConfigurationName).map(project => this.toUri(project)) : [];
getProjectsInWorkspace(ext?: string): vscode.Uri[] {
let projects = vscode.workspace.workspaceFile ? this.getWorkspaceConfigurationValue<string[]>(ProjectsConfigurationName).map(project => this.toUri(project)) : [];
// filter by specified extension
if (ext) {
projects = projects.filter(p => p.fsPath.toLowerCase().endsWith(ext.toLowerCase()));
}
return projects;
}
/**

View File

@@ -236,7 +236,7 @@ export async function getSqlProjectFilesInFolder(folderPath: string): Promise<st
*/
export function getSqlProjectsInWorkspace(): vscode.Uri[] {
const api = getDataWorkspaceExtensionApi();
return api.getProjectsInWorkspace().filter((p: vscode.Uri) => path.extname(p.fsPath) === constants.sqlprojExtension);
return api.getProjectsInWorkspace(constants.sqlprojExtension);
}
export function getDataWorkspaceExtensionApi(): dataworkspace.IExtension {

View File

@@ -560,7 +560,7 @@ export class ProjectsController {
if ((<IProjectReferenceSettings>settings).projectName !== undefined) {
// get project path and guid
const projectReferenceSettings = settings as IProjectReferenceSettings;
const workspaceProjects = await utils.getSqlProjectsInWorkspace();
const workspaceProjects = utils.getSqlProjectsInWorkspace();
const referencedProject = await Project.openProject(workspaceProjects.filter(p => path.parse(p.fsPath).name === projectReferenceSettings.projectName)[0].fsPath);
const relativePath = path.relative(project.projectFolderPath, referencedProject?.projectFilePath!);
projectReferenceSettings.projectRelativePath = vscode.Uri.file(relativePath);

View File

@@ -23,7 +23,7 @@ describe('Add Database Reference Dialog', () => {
beforeEach(function (): void {
const dataWorkspaceMock = TypeMoq.Mock.ofType<dataworkspace.IExtension>();
dataWorkspaceMock.setup(x => x.getProjectsInWorkspace()).returns(() => []);
dataWorkspaceMock.setup(x => x.getProjectsInWorkspace(TypeMoq.It.isAny())).returns(() => []);
sinon.stub(vscode.extensions, 'getExtension').returns(<any>{ exports: dataWorkspaceMock.object });
});

View File

@@ -550,7 +550,7 @@ describe('ProjectsController', function (): void {
const project2 = await Project.openProject(vscode.Uri.file(projPath2).fsPath);
const showErrorMessageSpy = sinon.spy(vscode.window, 'showErrorMessage');
const dataWorkspaceMock = TypeMoq.Mock.ofType<dataworkspace.IExtension>();
dataWorkspaceMock.setup(x => x.getProjectsInWorkspace()).returns(() => [vscode.Uri.file(project1.projectFilePath), vscode.Uri.file(project2.projectFilePath)]);
dataWorkspaceMock.setup(x => x.getProjectsInWorkspace(TypeMoq.It.isAny())).returns(() => [vscode.Uri.file(project1.projectFilePath), vscode.Uri.file(project2.projectFilePath)]);
sinon.stub(vscode.extensions, 'getExtension').returns(<any>{ exports: dataWorkspaceMock.object });
// add project reference from project1 to project2