From 282715d434594e50b86e664aa300bdd2f983bc73 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 20 Oct 2017 15:39:40 +0200 Subject: [PATCH] Update read me --- configuration-sample/README.md | 57 +++++++++++++ configuration-sample/src/extension.ts | 116 ++++++++++++++++---------- 2 files changed, 130 insertions(+), 43 deletions(-) diff --git a/configuration-sample/README.md b/configuration-sample/README.md index e1847b48..9f93c32a 100644 --- a/configuration-sample/README.md +++ b/configuration-sample/README.md @@ -15,11 +15,68 @@ This sample shows Explains how to test this extension in an Empty workspace +### Testing Window configuration + +- Open User Settings and set `"conf.view.showOnWindowOpen": "scm"` +- Refresh the Window. SCM view will be shown always, even if you refresh from a view other than SCM. +- Run the command `Configure view to show on window open` and Select the value (View to show when opening a window) +- Value should be updated in `User Settings` + +### Testing Resource configuration + +- Open User Settings and set `"conf.resource.insertEmptyLastLine": {"${absolute_path_to_file}": true}` +- Open the above configured file in the empty window. A message about adding empty line from the extension is shown. +- Open a different file. No message is shown. +- Run the command `Configure empty last line for current file` +- Value in User settings is updated. Message is shown now +- Run the command `Configure empty last line for files` and provide abosoulte path of another file +- Value should be updated in User Settings + ## Folder Workspace Explains how to test this extension in a Folder workspace +### Testing Window configuration + +- Open User or Workspace Settings and set `"conf.view.showOnWindowOpen": "scm"` +- Refresh the Window. SCM view will be shown always, even if you refresh from a view other than SCM. +- Run the command `Configure view to show on window open`. Select the value (View to show when opening a window) +- Pick the target `User Settings` or `Workspace Settings` into which the value should be updated +- Value should be updated in selected target + +### Testing Resource configuration + +- Open User Settings and set `"conf.resource.insertEmptyLastLine": {"${absolute_path_to_file}": true}` +- Open the above configured file in the empty window. A message about adding empty line from the extension is shown. +- Open a different file from the opened folder. No message is shown. +- Run the command `Configure empty last line for current file` +- Value in Workspace settings is updated. Message is shown now. +- Run the command `Configure empty last line for files` and provide abosoulte path of another file. +- Pick the target `User Settings` or `Workspace Settings` into which the value should be updated +- Value should be updated in selected target + ### Multiroot Workspace Explains how to test this extension in a Multiroot workspace +### Testing Window configuration + +- Open User or Workspace Settings and set `"conf.view.showOnWindowOpen": "scm"` +- Refresh the Window. SCM view will be shown always, even if you refresh from a view other than SCM. +- *NOTE*: This setting cannot be applied under Folder settings, doing so will show a warning and value is not respected. +- Run the command `Configure view to show on window open`. Select the value (View to show when opening a window) +- Pick the target `User Settings` or `Workspace Settings` into which the value should be updated +- Value should be updated in selected target + +### Testing Resource configuration + +- Open User Settings and set `"conf.resource.insertEmptyLastLine": {"${absolute_path_to_file}": true}` +- Open the above configured file in the empty window. A message about adding empty line from the extension is shown. +- Open a different file from one of the root folders. No message is shown. +- Run the command `Configure empty last line for current file` +- Value in Folder Settings of the root folder of the current file is updated. Message is shown now. +- Run the command `Configure empty last line for files` and provide abosoulte path of another file. +- Pick the target `User Settings` or `Workspace Settings` or `Workspace Folder Settings` into which the value should be updated +- Selecting User or Workspace Settings should update the value in respective targets. +- Selecting Workspace Folder Settings will show a Workspace Folder Picker +- Picking a workspace folder should update the value in the respective folder settings file. diff --git a/configuration-sample/src/extension.ts b/configuration-sample/src/extension.ts index 1cba097d..596e85ae 100644 --- a/configuration-sample/src/extension.ts +++ b/configuration-sample/src/extension.ts @@ -28,24 +28,33 @@ export function activate(context: vscode.ExtensionContext) { // 1) Getting the value const value = await vscode.window.showQuickPick(['explorer', 'search', 'scm', 'debug', 'extensions'], { placeHolder: 'Select the view to show when opening a window.' }); - // 2) Getting the Configuration target - const target = await vscode.window.showQuickPick( - [ - { label: 'User', description: 'User Settings', target: vscode.ConfigurationTarget.Global }, - { label: 'Workspace', description: 'Workspace Settings', target: vscode.ConfigurationTarget.Workspace } - ], - { placeHolder: 'Select the view to show when opening a window.' }); + if (vscode.workspace.workspaceFolders) { - if (value && target) { + // 2) Getting the Configuration target + const target = await vscode.window.showQuickPick( + [ + { label: 'User', description: 'User Settings', target: vscode.ConfigurationTarget.Global }, + { label: 'Workspace', description: 'Workspace Settings', target: vscode.ConfigurationTarget.Workspace } + ], + { placeHolder: 'Select the view to show when opening a window.' }); - // 3) Update the configuration value in the target - await vscode.workspace.getConfiguration().update('conf.view.showOnWindowOpen', value, target.target); + if (value && target) { - /* - // Default is to update in Workspace - await vscode.workspace.getConfiguration().update('conf.view.showOnWindowOpen', value); - */ + // 3) Update the configuration value in the target + await vscode.workspace.getConfiguration().update('conf.view.showOnWindowOpen', value, target.target); + + /* + // Default is to update in Workspace + await vscode.workspace.getConfiguration().update('conf.view.showOnWindowOpen', value); + */ + } + } else { + + // 2) Update the configuration value in User Setting in case of no workspace folders + await vscode.workspace.getConfiguration().update('conf.view.showOnWindowOpen', value, vscode.ConfigurationTarget.Global); } + + }); // Example 3: Reading Resource scoped configuration for a file @@ -79,8 +88,10 @@ export function activate(context: vscode.ExtensionContext) { // 3) Choose target to Global when there are no workspace folders const target = vscode.workspace.workspaceFolders ? vscode.ConfigurationTarget.WorkspaceFolder : vscode.ConfigurationTarget.Global; + const value = { ...currentValue, ...{ [currentDocument.fileName]: true } }; + // 4) Update the configuration - await configuration.update('conf.resource.insertEmptyLastLine', { ...currentValue, ...{ [currentDocument.fileName]: true } }, target) + await configuration.update('conf.resource.insertEmptyLastLine', value, target) } }); @@ -91,43 +102,62 @@ export function activate(context: vscode.ExtensionContext) { // 1) Getting the value const value = await vscode.window.showInputBox({ prompt: 'Provide glob pattern of files to have empty last line.' }); - // 2) Getting the target - const target = await vscode.window.showQuickPick( - [ - { label: 'Application', description: 'User Settings', target: vscode.ConfigurationTarget.Global }, - { label: 'Workspace', description: 'Workspace Settings', target: vscode.ConfigurationTarget.Workspace }, - { label: 'Workspace Folder', description: 'Workspace Folder Settings', target: vscode.ConfigurationTarget.WorkspaceFolder } - ], - { placeHolder: 'Select the target to which this setting should be applied' }); + if (vscode.workspace.workspaceFolders) { - if (value && target) { + // 2) Getting the target + const target = await vscode.window.showQuickPick( + [ + { label: 'Application', description: 'User Settings', target: vscode.ConfigurationTarget.Global }, + { label: 'Workspace', description: 'Workspace Settings', target: vscode.ConfigurationTarget.Workspace }, + { label: 'Workspace Folder', description: 'Workspace Folder Settings', target: vscode.ConfigurationTarget.WorkspaceFolder } + ], + { placeHolder: 'Select the target to which this setting should be applied' }); - if (target.target === vscode.ConfigurationTarget.WorkspaceFolder) { + if (value && target) { - // 3) Getting the workspace folder - let workspaceFolder = await vscode.window.showWorkspaceFolderPick({ placeHolder: 'Pick Workspace Folder to which this setting should be applied' }) - if (workspaceFolder) { + if (target.target === vscode.ConfigurationTarget.WorkspaceFolder) { - // 4) Get the configuration for the workspace folder - const configuration = vscode.workspace.getConfiguration('', workspaceFolder.uri); + // 3) Getting the workspace folder + let workspaceFolder = await vscode.window.showWorkspaceFolderPick({ placeHolder: 'Pick Workspace Folder to which this setting should be applied' }) + if (workspaceFolder) { - // 5) Get the current value + // 4) Get the configuration for the workspace folder + const configuration = vscode.workspace.getConfiguration('', workspaceFolder.uri); + + // 5) Get the current value + const currentValue = configuration.get('conf.resource.insertEmptyLastLine'); + + const newValue = { ...currentValue, ...{ [value]: true } }; + + // 6) Update the configuration value + await configuration.update('conf.resource.insertEmptyLastLine', newValue, target.target); + } + } else { + + // 3) Get the configuration + const configuration = vscode.workspace.getConfiguration(); + + // 4) Get the current value const currentValue = configuration.get('conf.resource.insertEmptyLastLine'); - // 6) Update the configuration value - await configuration.update('conf.resource.insertEmptyLastLine', { ...currentValue, ...{ [value]: true } }, target.target); + const newValue = { ...currentValue, ...{ [value]: true } }; + + // 3) Update the value in the target + await vscode.workspace.getConfiguration().update('conf.resource.insertEmptyLastLine', newValue, target.target); } - } else { - - // 3) Get the configuration - const configuration = vscode.workspace.getConfiguration(); - - // 4) Get the current value - const currentValue = configuration.get('conf.resource.insertEmptyLastLine'); - - // 3) Update the value in the target - await vscode.workspace.getConfiguration().update('conf.resource.insertEmptyLastLine', { ...currentValue, ...{ [value]: true } }, target.target); } + } else { + + // 2) Get the configuration + const configuration = vscode.workspace.getConfiguration(); + + // 3) Get the current value + const currentValue = configuration.get('conf.resource.insertEmptyLastLine'); + + const newValue = { ...currentValue, ...{ [value]: true } }; + + // 4) Update the value in the User Settings + await vscode.workspace.getConfiguration().update('conf.resource.insertEmptyLastLine', newValue, vscode.ConfigurationTarget.Global); } });