diff --git a/extensions/data-workspace/src/common/dataWorkspaceExtension.ts b/extensions/data-workspace/src/common/dataWorkspaceExtension.ts index 1dc9dc2f4f..b95b2aa104 100644 --- a/extensions/data-workspace/src/common/dataWorkspaceExtension.ts +++ b/extensions/data-workspace/src/common/dataWorkspaceExtension.ts @@ -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 { diff --git a/extensions/data-workspace/src/dataworkspace.d.ts b/extensions/data-workspace/src/dataworkspace.d.ts index 32d92e420d..268e1228e9 100644 --- a/extensions/data-workspace/src/dataworkspace.d.ts +++ b/extensions/data-workspace/src/dataworkspace.d.ts @@ -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 diff --git a/extensions/data-workspace/src/services/workspaceService.ts b/extensions/data-workspace/src/services/workspaceService.ts index 77016638ea..31cfb6baf4 100644 --- a/extensions/data-workspace/src/services/workspaceService.ts +++ b/extensions/data-workspace/src/services/workspaceService.ts @@ -155,8 +155,15 @@ export class WorkspaceService implements IWorkspaceService { return projectTypes; } - getProjectsInWorkspace(): vscode.Uri[] { - return vscode.workspace.workspaceFile ? this.getWorkspaceConfigurationValue(ProjectsConfigurationName).map(project => this.toUri(project)) : []; + getProjectsInWorkspace(ext?: string): vscode.Uri[] { + let projects = vscode.workspace.workspaceFile ? this.getWorkspaceConfigurationValue(ProjectsConfigurationName).map(project => this.toUri(project)) : []; + + // filter by specified extension + if (ext) { + projects = projects.filter(p => p.fsPath.toLowerCase().endsWith(ext.toLowerCase())); + } + + return projects; } /** diff --git a/extensions/sql-database-projects/src/common/utils.ts b/extensions/sql-database-projects/src/common/utils.ts index 1287c2bed1..a8d26d6509 100644 --- a/extensions/sql-database-projects/src/common/utils.ts +++ b/extensions/sql-database-projects/src/common/utils.ts @@ -236,7 +236,7 @@ export async function getSqlProjectFilesInFolder(folderPath: string): Promise path.extname(p.fsPath) === constants.sqlprojExtension); + return api.getProjectsInWorkspace(constants.sqlprojExtension); } export function getDataWorkspaceExtensionApi(): dataworkspace.IExtension { diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index 4a32f480ed..7fb31ff756 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -560,7 +560,7 @@ export class ProjectsController { if ((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); diff --git a/extensions/sql-database-projects/src/test/dialogs/addDatabaseReferenceDialog.test.ts b/extensions/sql-database-projects/src/test/dialogs/addDatabaseReferenceDialog.test.ts index cb0d2687d1..f68bcae4db 100644 --- a/extensions/sql-database-projects/src/test/dialogs/addDatabaseReferenceDialog.test.ts +++ b/extensions/sql-database-projects/src/test/dialogs/addDatabaseReferenceDialog.test.ts @@ -23,7 +23,7 @@ describe('Add Database Reference Dialog', () => { beforeEach(function (): void { const dataWorkspaceMock = TypeMoq.Mock.ofType(); - dataWorkspaceMock.setup(x => x.getProjectsInWorkspace()).returns(() => []); + dataWorkspaceMock.setup(x => x.getProjectsInWorkspace(TypeMoq.It.isAny())).returns(() => []); sinon.stub(vscode.extensions, 'getExtension').returns({ exports: dataWorkspaceMock.object }); }); diff --git a/extensions/sql-database-projects/src/test/projectController.test.ts b/extensions/sql-database-projects/src/test/projectController.test.ts index f04ded635c..148d6c3c84 100644 --- a/extensions/sql-database-projects/src/test/projectController.test.ts +++ b/extensions/sql-database-projects/src/test/projectController.test.ts @@ -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(); - 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({ exports: dataWorkspaceMock.object }); // add project reference from project1 to project2