Add "Open Containing Folder" to project context menu (#11187)

* add command to open the folder the project is in

* move commands to constants
This commit is contained in:
Kim Santiago
2020-07-06 11:42:25 -07:00
committed by GitHub
parent 2d989e1180
commit ac71c6f06d
5 changed files with 34 additions and 3 deletions

View File

@@ -124,6 +124,11 @@
"command": "sqlDatabaseProjects.addDatabaseReference", "command": "sqlDatabaseProjects.addDatabaseReference",
"title": "%sqlDatabaseProjects.addDatabaseReference%", "title": "%sqlDatabaseProjects.addDatabaseReference%",
"category": "%sqlDatabaseProjects.displayName%" "category": "%sqlDatabaseProjects.displayName%"
},
{
"command": "sqlDatabaseProjects.openContainingFolder",
"title": "%sqlDatabaseProjects.openContainingFolder%",
"category": "%sqlDatabaseProjects.displayName%"
} }
], ],
"menus": { "menus": {
@@ -188,6 +193,10 @@
{ {
"command": "sqlDatabaseProjects.addDatabaseReference", "command": "sqlDatabaseProjects.addDatabaseReference",
"when": "false" "when": "false"
},
{
"command": "sqlDatabaseProjects.openContainingFolder",
"when": "false"
} }
], ],
"view/item/context": [ "view/item/context": [
@@ -251,6 +260,11 @@
"when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.folder || viewItem == databaseProject.itemType.file", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.folder || viewItem == databaseProject.itemType.file",
"group": "9_dbProjectsLast@2" "group": "9_dbProjectsLast@2"
}, },
{
"command": "sqlDatabaseProjects.openContainingFolder",
"when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",
"group": "9_dbProjectsLast@8"
},
{ {
"command": "sqlDatabaseProjects.close", "command": "sqlDatabaseProjects.close",
"when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",

View File

@@ -23,6 +23,7 @@
"sqlDatabaseProjects.addDatabaseReference": "Add Database Reference", "sqlDatabaseProjects.addDatabaseReference": "Add Database Reference",
"sqlDatabaseProjects.openContainingFolder": "Open Containing Folder",
"sqlDatabaseProjects.Settings": "Database Projects", "sqlDatabaseProjects.Settings": "Database Projects",
"sqlDatabaseProjects.netCoreInstallLocation": "Full Path to .Net Core SDK on the machine.", "sqlDatabaseProjects.netCoreInstallLocation": "Full Path to .Net Core SDK on the machine.",

View File

@@ -22,6 +22,12 @@ export const msdbDacpac = 'msdb.dacpac';
export const MicrosoftDatatoolsSchemaSqlSql = 'Microsoft.Data.Tools.Schema.Sql.Sql'; export const MicrosoftDatatoolsSchemaSqlSql = 'Microsoft.Data.Tools.Schema.Sql.Sql';
export const databaseSchemaProvider = 'DatabaseSchemaProvider'; export const databaseSchemaProvider = 'DatabaseSchemaProvider';
// commands
export const revealFileInOsCommand = 'revealFileInOS';
export const schemaCompareStartCommand = 'schemaCompare.start';
export const sqlDatabaseProjectsViewFocusCommand = 'sqlDatabaseProjectsView.focus';
export const vscodeOpenCommand = 'vscode.open';
// UI Strings // UI Strings
export const projectNodeName = localize('projectNodeName', "Database Project"); export const projectNodeName = localize('projectNodeName', "Database Project");

View File

@@ -64,6 +64,7 @@ export default class MainController implements Disposable {
this.apiWrapper.registerCommand('sqlDatabaseProjects.newFolder', async (node: BaseProjectTreeItem) => { await this.projectsController.addFolderPrompt(node); }); this.apiWrapper.registerCommand('sqlDatabaseProjects.newFolder', async (node: BaseProjectTreeItem) => { await this.projectsController.addFolderPrompt(node); });
this.apiWrapper.registerCommand('sqlDatabaseProjects.addDatabaseReference', async (node: BaseProjectTreeItem) => { await this.projectsController.addDatabaseReference(node); }); this.apiWrapper.registerCommand('sqlDatabaseProjects.addDatabaseReference', async (node: BaseProjectTreeItem) => { await this.projectsController.addDatabaseReference(node); });
this.apiWrapper.registerCommand('sqlDatabaseProjects.openContainingFolder', async (node: BaseProjectTreeItem) => { await this.projectsController.openContainingFolder(node); });
this.apiWrapper.registerCommand('sqlDatabaseProjects.delete', async (node: BaseProjectTreeItem) => { await this.projectsController.delete(node); }); this.apiWrapper.registerCommand('sqlDatabaseProjects.delete', async (node: BaseProjectTreeItem) => { await this.projectsController.delete(node); });
this.apiWrapper.registerCommand('sqlDatabaseProjects.exclude', async (node: FileNode | FolderNode) => { await this.projectsController.exclude(node); }); this.apiWrapper.registerCommand('sqlDatabaseProjects.exclude', async (node: FileNode | FolderNode) => { await this.projectsController.exclude(node); });

View File

@@ -96,7 +96,7 @@ export class ProjectsController {
public async focusProject(project?: Project): Promise<void> { public async focusProject(project?: Project): Promise<void> {
if (project && this.projects.includes(project)) { if (project && this.projects.includes(project)) {
await this.apiWrapper.executeCommand('sqlDatabaseProjectsView.focus'); await this.apiWrapper.executeCommand(constants.sqlDatabaseProjectsViewFocusCommand);
await this.projectTreeViewProvider.focus(project); await this.projectTreeViewProvider.focus(project);
} }
} }
@@ -261,7 +261,7 @@ export class ProjectsController {
// check that dacpac exists // check that dacpac exists
if (await utils.exists(dacpacPath)) { if (await utils.exists(dacpacPath)) {
this.apiWrapper.executeCommand('schemaCompare.start', dacpacPath); this.apiWrapper.executeCommand(constants.schemaCompareStartCommand, dacpacPath);
} else { } else {
this.apiWrapper.showErrorMessage(constants.buildDacpacNotFound); this.apiWrapper.showErrorMessage(constants.buildDacpacNotFound);
} }
@@ -346,7 +346,7 @@ export class ProjectsController {
const newEntry = await project.addScriptItem(relativeFilePath, newFileText); const newEntry = await project.addScriptItem(relativeFilePath, newFileText);
this.apiWrapper.executeCommand('vscode.open', newEntry.fsUri); this.apiWrapper.executeCommand(constants.vscodeOpenCommand, newEntry.fsUri);
this.refreshProjectsTree(); this.refreshProjectsTree();
} catch (err) { } catch (err) {
@@ -400,6 +400,15 @@ export class ProjectsController {
return project.files.find(x => utils.getPlatformSafeFileEntryPath(x.relativePath) === utils.getPlatformSafeFileEntryPath(utils.trimUri(context.root.uri, context.uri))); return project.files.find(x => utils.getPlatformSafeFileEntryPath(x.relativePath) === utils.getPlatformSafeFileEntryPath(utils.trimUri(context.root.uri, context.uri)));
} }
/**
* Opens the folder containing the project
* @param context a treeItem in a project's hierarchy, to be used to obtain a Project
*/
public async openContainingFolder(context: BaseProjectTreeItem): Promise<void> {
const project = this.getProjectFromContext(context);
await this.apiWrapper.executeCommand(constants.revealFileInOsCommand, Uri.file(project.projectFilePath));
}
/** /**
* Adds a database reference to the project * Adds a database reference to the project
* @param context a treeItem in a project's hierarchy, to be used to obtain a Project * @param context a treeItem in a project's hierarchy, to be used to obtain a Project