mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Adding option to open referenced project from SQL Project reference item (#23178)
* Adding hook to open a referenced SQL project * cleanup * adding docstring
This commit is contained in:
@@ -81,7 +81,7 @@ export class WorkspaceService implements IWorkspaceService {
|
|||||||
vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders?.length || 0, undefined, ...(newWorkspaceFolders.map(folder => ({ uri: vscode.Uri.file(folder) }))));
|
vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders?.length || 0, undefined, ...(newWorkspaceFolders.map(folder => ({ uri: vscode.Uri.file(folder) }))));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Compare projcets being added against prior (cached) list of projects in the workspace
|
// 2. Compare projects being added against prior (cached) list of projects in the workspace
|
||||||
|
|
||||||
const previousProjects: string[] = (await this.getProjectsInWorkspace(undefined, false)).map(p => p.path);
|
const previousProjects: string[] = (await this.getProjectsInWorkspace(undefined, false)).map(p => p.path);
|
||||||
let newProjectAdded: boolean = false;
|
let newProjectAdded: boolean = false;
|
||||||
|
|||||||
@@ -163,6 +163,11 @@
|
|||||||
"title": "%sqlDatabaseProjects.addDatabaseReference%",
|
"title": "%sqlDatabaseProjects.addDatabaseReference%",
|
||||||
"category": "%sqlDatabaseProjects.displayName%"
|
"category": "%sqlDatabaseProjects.displayName%"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "sqlDatabaseProjects.openReferencedSqlProject",
|
||||||
|
"title": "%sqlDatabaseProjects.openReferencedSqlProject%",
|
||||||
|
"category": "%sqlDatabaseProjects.displayName%"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "sqlDatabaseProjects.validateExternalStreamingJob",
|
"command": "sqlDatabaseProjects.validateExternalStreamingJob",
|
||||||
"title": "%sqlDatabaseProjects.validateExternalStreamingJob%",
|
"title": "%sqlDatabaseProjects.validateExternalStreamingJob%",
|
||||||
@@ -300,6 +305,10 @@
|
|||||||
"command": "sqlDatabaseProjects.addDatabaseReference",
|
"command": "sqlDatabaseProjects.addDatabaseReference",
|
||||||
"when": "false"
|
"when": "false"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "sqlDatabaseProjects.openReferencedSqlProject",
|
||||||
|
"when": "false"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "sqlDatabaseProjects.validateExternalStreamingJob",
|
"command": "sqlDatabaseProjects.validateExternalStreamingJob",
|
||||||
"when": "false"
|
"when": "false"
|
||||||
@@ -431,6 +440,11 @@
|
|||||||
"when": "azdataAvailable && view == dataworkspace.views.main && viewItem == databaseProject.itemType.file.table",
|
"when": "azdataAvailable && view == dataworkspace.views.main && viewItem == databaseProject.itemType.file.table",
|
||||||
"group": "6_dbProjects_openInDesigner"
|
"group": "6_dbProjects_openInDesigner"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "sqlDatabaseProjects.openReferencedSqlProject",
|
||||||
|
"when": "view == dataworkspace.views.main && viewItem == databaseProject.itemType.reference.sqlProject",
|
||||||
|
"group": "8_dbProjects_openReferencedSqlProject"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "sqlDatabaseProjects.exclude",
|
"command": "sqlDatabaseProjects.exclude",
|
||||||
"when": "view == dataworkspace.views.main && viewItem == databaseProject.itemType.folder || viewItem =~ /^databaseProject.itemType.file/",
|
"when": "view == dataworkspace.views.main && viewItem == databaseProject.itemType.folder || viewItem =~ /^databaseProject.itemType.file/",
|
||||||
@@ -438,7 +452,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"command": "sqlDatabaseProjects.delete",
|
"command": "sqlDatabaseProjects.delete",
|
||||||
"when": "view == dataworkspace.views.main && viewItem == databaseProject.itemType.folder || viewItem =~ /^databaseProject.itemType.file/ || viewItem == databaseProject.itemType.reference || viewItem == databaseProject.itemType.sqlcmdVariable",
|
"when": "view == dataworkspace.views.main && viewItem == databaseProject.itemType.folder || viewItem =~ /^databaseProject.itemType.file/ || viewItem =~ /^databaseProject.itemType.reference/ || viewItem == databaseProject.itemType.sqlcmdVariable",
|
||||||
"group": "9_dbProjectsLast@2"
|
"group": "9_dbProjectsLast@2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
"sqlDatabaseProjects.generateProjectFromOpenApiSpec": "Generate SQL Project from OpenAPI/Swagger spec (Preview)",
|
"sqlDatabaseProjects.generateProjectFromOpenApiSpec": "Generate SQL Project from OpenAPI/Swagger spec (Preview)",
|
||||||
"sqlDatabaseProjects.convertToSdkStyleProject": "Convert to SDK-style project",
|
"sqlDatabaseProjects.convertToSdkStyleProject": "Convert to SDK-style project",
|
||||||
"sqlDatabaseProjects.openInDesigner": "Open in Designer",
|
"sqlDatabaseProjects.openInDesigner": "Open in Designer",
|
||||||
|
"sqlDatabaseProjects.openReferencedSqlProject": "Open project",
|
||||||
|
|
||||||
"sqlDatabaseProjects.Settings": "Database Projects",
|
"sqlDatabaseProjects.Settings": "Database Projects",
|
||||||
"sqlDatabaseProjects.dotnetInstallLocation": "Full path to .NET SDK on the machine. For example, if dotnet.exe is located at C:\\folder1\\dotnet\\dotnet.exe, set the path for this setting to C:\\folder1\\dotnet",
|
"sqlDatabaseProjects.dotnetInstallLocation": "Full path to .NET SDK on the machine. For example, if dotnet.exe is located at C:\\folder1\\dotnet\\dotnet.exe, set the path for this setting to C:\\folder1\\dotnet",
|
||||||
|
|||||||
@@ -572,6 +572,7 @@ export enum DatabaseProjectItemType {
|
|||||||
table = 'databaseProject.itemType.file.table',
|
table = 'databaseProject.itemType.file.table',
|
||||||
referencesRoot = 'databaseProject.itemType.referencesRoot',
|
referencesRoot = 'databaseProject.itemType.referencesRoot',
|
||||||
reference = 'databaseProject.itemType.reference',
|
reference = 'databaseProject.itemType.reference',
|
||||||
|
sqlProjectReference = 'databaseProject.itemType.reference.sqlProject',
|
||||||
dataSourceRoot = 'databaseProject.itemType.dataSourceRoot',
|
dataSourceRoot = 'databaseProject.itemType.dataSourceRoot',
|
||||||
sqlcmdVariablesRoot = 'databaseProject.itemType.sqlcmdVariablesRoot',
|
sqlcmdVariablesRoot = 'databaseProject.itemType.sqlcmdVariablesRoot',
|
||||||
sqlcmdVariable = 'databaseProject.itemType.sqlcmdVariable',
|
sqlcmdVariable = 'databaseProject.itemType.sqlcmdVariable',
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ export default class MainController implements vscode.Disposable {
|
|||||||
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.newPublishProfile', async (node: WorkspaceTreeItem) => { return this.projectsController.addItemPromptFromNode(node, ItemType.publishProfile); }));
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.newPublishProfile', async (node: WorkspaceTreeItem) => { return this.projectsController.addItemPromptFromNode(node, ItemType.publishProfile); }));
|
||||||
|
|
||||||
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.addDatabaseReference', async (node: WorkspaceTreeItem) => { return this.projectsController.addDatabaseReference(node); }));
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.addDatabaseReference', async (node: WorkspaceTreeItem) => { return this.projectsController.addDatabaseReference(node); }));
|
||||||
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.openReferencedSqlProject', async (node: WorkspaceTreeItem) => { return this.projectsController.openReferencedSqlProject(node); }));
|
||||||
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.openContainingFolder', async (node: WorkspaceTreeItem) => { return this.projectsController.openContainingFolder(node); }));
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.openContainingFolder', async (node: WorkspaceTreeItem) => { return this.projectsController.openContainingFolder(node); }));
|
||||||
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.editProjectFile', async (node: WorkspaceTreeItem) => { return this.projectsController.editProjectFile(node); }));
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.editProjectFile', async (node: WorkspaceTreeItem) => { return this.projectsController.editProjectFile(node); }));
|
||||||
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.delete', async (node: WorkspaceTreeItem) => { return this.projectsController.delete(node); }));
|
this.context.subscriptions.push(vscode.commands.registerCommand('sqlDatabaseProjects.delete', async (node: WorkspaceTreeItem) => { return this.projectsController.delete(node); }));
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import { BuildHelper } from '../tools/buildHelper';
|
|||||||
import { readPublishProfile, promptForSavingProfile, savePublishProfile } from '../models/publishProfile/publishProfile';
|
import { readPublishProfile, promptForSavingProfile, savePublishProfile } from '../models/publishProfile/publishProfile';
|
||||||
import { AddDatabaseReferenceDialog } from '../dialogs/addDatabaseReferenceDialog';
|
import { AddDatabaseReferenceDialog } from '../dialogs/addDatabaseReferenceDialog';
|
||||||
import { ISystemDatabaseReferenceSettings, IDacpacReferenceSettings, IProjectReferenceSettings, INugetPackageReferenceSettings } from '../models/IDatabaseReferenceSettings';
|
import { ISystemDatabaseReferenceSettings, IDacpacReferenceSettings, IProjectReferenceSettings, INugetPackageReferenceSettings } from '../models/IDatabaseReferenceSettings';
|
||||||
import { DatabaseReferenceTreeItem } from '../models/tree/databaseReferencesTreeItem';
|
import { DatabaseReferenceTreeItem, SqlProjectReferenceTreeItem } from '../models/tree/databaseReferencesTreeItem';
|
||||||
import { CreateProjectFromDatabaseDialog } from '../dialogs/createProjectFromDatabaseDialog';
|
import { CreateProjectFromDatabaseDialog } from '../dialogs/createProjectFromDatabaseDialog';
|
||||||
import { UpdateProjectFromDatabaseDialog } from '../dialogs/updateProjectFromDatabaseDialog';
|
import { UpdateProjectFromDatabaseDialog } from '../dialogs/updateProjectFromDatabaseDialog';
|
||||||
import { TelemetryActions, TelemetryReporter, TelemetryViews } from '../common/telemetry';
|
import { TelemetryActions, TelemetryReporter, TelemetryViews } from '../common/telemetry';
|
||||||
@@ -1028,6 +1028,22 @@ export class ProjectsController {
|
|||||||
await vscode.commands.executeCommand(constants.revealFileInOsCommand, vscode.Uri.file(project.projectFilePath));
|
await vscode.commands.executeCommand(constants.revealFileInOsCommand, vscode.Uri.file(project.projectFilePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the project indicated by `context` in the workspace
|
||||||
|
* @param context a SqlProjectReferenceTreeItem in the project's tree
|
||||||
|
*/
|
||||||
|
public async openReferencedSqlProject(context: dataworkspace.WorkspaceTreeItem): Promise<void> {
|
||||||
|
const node = context.element as BaseProjectTreeItem;
|
||||||
|
const project = await this.getProjectFromContext(node);
|
||||||
|
|
||||||
|
if (!(node instanceof SqlProjectReferenceTreeItem)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const absolutePath = path.normalize(path.join(project.projectFolderPath, node.reference.fsUri.fsPath));
|
||||||
|
await this.openProjectInWorkspace(absolutePath);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens the .sqlproj file for the given project. Upon update of file, prompts user to
|
* Opens the .sqlproj file for the given project. Upon update of file, prompts user to
|
||||||
* reload their project.
|
* reload their project.
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import * as constants from '../../common/constants';
|
|||||||
import { BaseProjectTreeItem } from './baseTreeItem';
|
import { BaseProjectTreeItem } from './baseTreeItem';
|
||||||
import { IconPathHelper } from '../../common/iconHelper';
|
import { IconPathHelper } from '../../common/iconHelper';
|
||||||
import { IDatabaseReferenceProjectEntry } from 'sqldbproj';
|
import { IDatabaseReferenceProjectEntry } from 'sqldbproj';
|
||||||
|
import { SqlProjectReferenceProjectEntry } from '../projectEntry';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Folder for containing references nodes in the tree
|
* Folder for containing references nodes in the tree
|
||||||
@@ -35,7 +36,9 @@ export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const reference of databaseReferences) {
|
for (const reference of databaseReferences) {
|
||||||
this.references.push(new DatabaseReferenceTreeItem(reference, this.relativeProjectUri, this.projectFileUri));
|
this.references.push(reference instanceof SqlProjectReferenceProjectEntry
|
||||||
|
? new SqlProjectReferenceTreeItem(reference, this.relativeProjectUri, this.projectFileUri)
|
||||||
|
: new DatabaseReferenceTreeItem(reference, this.relativeProjectUri, this.projectFileUri));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +60,7 @@ export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class DatabaseReferenceTreeItem extends BaseProjectTreeItem {
|
export class DatabaseReferenceTreeItem extends BaseProjectTreeItem {
|
||||||
constructor(private reference: IDatabaseReferenceProjectEntry, referencesNodeRelativeProjectUri: vscode.Uri, sqlprojUri: vscode.Uri) {
|
constructor(public readonly reference: IDatabaseReferenceProjectEntry, referencesNodeRelativeProjectUri: vscode.Uri, sqlprojUri: vscode.Uri) {
|
||||||
super(vscode.Uri.file(path.join(referencesNodeRelativeProjectUri.fsPath, reference.referenceName)), sqlprojUri);
|
super(vscode.Uri.file(path.join(referencesNodeRelativeProjectUri.fsPath, reference.referenceName)), sqlprojUri);
|
||||||
this.entryKey = this.friendlyName;
|
this.entryKey = this.friendlyName;
|
||||||
}
|
}
|
||||||
@@ -79,3 +82,9 @@ export class DatabaseReferenceTreeItem extends BaseProjectTreeItem {
|
|||||||
return refItem;
|
return refItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SqlProjectReferenceTreeItem extends DatabaseReferenceTreeItem {
|
||||||
|
public override get type(): constants.DatabaseProjectItemType {
|
||||||
|
return constants.DatabaseProjectItemType.sqlProjectReference;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user