Change many configs to resource scope (#1017)

This commit is contained in:
Matt Irvine 2017-11-06 09:59:41 -08:00 коммит произвёл GitHub
Родитель 1534e40712
Коммит b9ea17c2eb
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
9 изменённых файлов: 91 добавлений и 48 удалений

Просмотреть файл

@ -240,12 +240,14 @@
"mssql.logDebugInfo": { "mssql.logDebugInfo": {
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"description": "%mssql.logDebugInfo%" "description": "%mssql.logDebugInfo%",
"scope": "window"
}, },
"mssql.maxRecentConnections": { "mssql.maxRecentConnections": {
"type": "number", "type": "number",
"default": 5, "default": 5,
"description": "%mssql.maxRecentConnections%" "description": "%mssql.maxRecentConnections%",
"scope": "window"
}, },
"mssql.connections": { "mssql.connections": {
"type": "array", "type": "array",
@ -424,7 +426,8 @@
"description": "%mssql.connection.emptyPasswordInput%" "description": "%mssql.connection.emptyPasswordInput%"
} }
} }
} },
"scope": "window"
}, },
"mssql.shortcuts": { "mssql.shortcuts": {
"type": "object", "type": "object",
@ -442,42 +445,50 @@
"event.saveAsJSON": "", "event.saveAsJSON": "",
"event.saveAsCSV": "", "event.saveAsCSV": "",
"event.saveAsExcel": "" "event.saveAsExcel": ""
} },
"scope": "resource"
}, },
"mssql.messagesDefaultOpen": { "mssql.messagesDefaultOpen": {
"type": "boolean", "type": "boolean",
"description": "%mssql.messagesDefaultOpen%", "description": "%mssql.messagesDefaultOpen%",
"default": true "default": true,
"scope": "resource"
}, },
"mssql.resultsFontFamily": { "mssql.resultsFontFamily": {
"type": "string", "type": "string",
"description": "%mssql.resultsFontFamily%", "description": "%mssql.resultsFontFamily%",
"default": "-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,Ubuntu,Droid Sans,sans-serif" "default": "-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,Ubuntu,Droid Sans,sans-serif",
"scope": "resource"
}, },
"mssql.resultsFontSize": { "mssql.resultsFontSize": {
"type": "number", "type": "number",
"description": "%mssql.resultsFontSize%", "description": "%mssql.resultsFontSize%",
"default": 13 "default": 13,
"scope": "resource"
}, },
"mssql.saveAsCsv.includeHeaders": { "mssql.saveAsCsv.includeHeaders": {
"type": "boolean", "type": "boolean",
"description": "%mssql.saveAsCsv.includeHeaders%", "description": "%mssql.saveAsCsv.includeHeaders%",
"default": true "default": true,
"scope": "resource"
}, },
"mssql.copyIncludeHeaders": { "mssql.copyIncludeHeaders": {
"type": "boolean", "type": "boolean",
"description": "%mssql.copyIncludeHeaders%", "description": "%mssql.copyIncludeHeaders%",
"default": false "default": false,
"scope": "resource"
}, },
"mssql.copyRemoveNewLine": { "mssql.copyRemoveNewLine": {
"type": "boolean", "type": "boolean",
"description": "%mssql.copyRemoveNewLine%", "description": "%mssql.copyRemoveNewLine%",
"default": true "default": true,
"scope": "resource"
}, },
"mssql.showBatchTime": { "mssql.showBatchTime": {
"type": "boolean", "type": "boolean",
"description": "%mssql.showBatchTime%", "description": "%mssql.showBatchTime%",
"default": false "default": false,
"scope": "resource"
}, },
"mssql.splitPaneSelection": { "mssql.splitPaneSelection": {
"type": "string", "type": "string",
@ -487,12 +498,14 @@
"next", "next",
"current", "current",
"end" "end"
] ],
"scope": "resource"
}, },
"mssql.format.alignColumnDefinitionsInColumns": { "mssql.format.alignColumnDefinitionsInColumns": {
"type": "boolean", "type": "boolean",
"description": "%mssql.format.alignColumnDefinitionsInColumns%", "description": "%mssql.format.alignColumnDefinitionsInColumns%",
"default": false "default": false,
"scope": "window"
}, },
"mssql.format.datatypeCasing": { "mssql.format.datatypeCasing": {
"type": "string", "type": "string",
@ -502,7 +515,8 @@
"none", "none",
"uppercase", "uppercase",
"lowercase" "lowercase"
] ],
"scope": "window"
}, },
"mssql.format.keywordCasing": { "mssql.format.keywordCasing": {
"type": "string", "type": "string",
@ -512,52 +526,62 @@
"none", "none",
"uppercase", "uppercase",
"lowercase" "lowercase"
] ],
"scope": "window"
}, },
"mssql.format.placeCommasBeforeNextStatement": { "mssql.format.placeCommasBeforeNextStatement": {
"type": "boolean", "type": "boolean",
"description": "%mssql.format.placeCommasBeforeNextStatement%", "description": "%mssql.format.placeCommasBeforeNextStatement%",
"default": false "default": false,
"scope": "window"
}, },
"mssql.format.placeSelectStatementReferencesOnNewLine": { "mssql.format.placeSelectStatementReferencesOnNewLine": {
"type": "boolean", "type": "boolean",
"description": "%mssql.format.placeSelectStatementReferencesOnNewLine%", "description": "%mssql.format.placeSelectStatementReferencesOnNewLine%",
"default": false "default": false,
"scope": "window"
}, },
"mssql.applyLocalization": { "mssql.applyLocalization": {
"type": "boolean", "type": "boolean",
"description": "%mssql.applyLocalization%", "description": "%mssql.applyLocalization%",
"default": false "default": false,
"scope": "window"
}, },
"mssql.query.displayBitAsNumber": { "mssql.query.displayBitAsNumber": {
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"description": "%mssql.query.displayBitAsNumber%" "description": "%mssql.query.displayBitAsNumber%",
"scope": "window"
}, },
"mssql.intelliSense.enableIntelliSense": { "mssql.intelliSense.enableIntelliSense": {
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"description": "%mssql.intelliSense.enableIntelliSense%" "description": "%mssql.intelliSense.enableIntelliSense%",
"scope": "window"
}, },
"mssql.intelliSense.enableErrorChecking": { "mssql.intelliSense.enableErrorChecking": {
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"description": "%mssql.intelliSense.enableErrorChecking%" "description": "%mssql.intelliSense.enableErrorChecking%",
"scope": "window"
}, },
"mssql.intelliSense.enableSuggestions": { "mssql.intelliSense.enableSuggestions": {
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"description": "%mssql.intelliSense.enableSuggestions%" "description": "%mssql.intelliSense.enableSuggestions%",
"scope": "window"
}, },
"mssql.intelliSense.enableQuickInfo": { "mssql.intelliSense.enableQuickInfo": {
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"description": "%mssql.intelliSense.enableQuickInfo%" "description": "%mssql.intelliSense.enableQuickInfo%",
"scope": "window"
}, },
"mssql.intelliSense.lowerCaseSuggestions": { "mssql.intelliSense.lowerCaseSuggestions": {
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"description": "%mssql.intelliSense.lowerCaseSuggestions%" "description": "%mssql.intelliSense.lowerCaseSuggestions%",
"scope": "window"
} }
} }
} }

Просмотреть файл

@ -348,14 +348,14 @@ export default class QueryRunner {
return includeHeaders; return includeHeaders;
} }
// else get config option from vscode config // else get config option from vscode config
let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this.uri);
includeHeaders = config[Constants.copyIncludeHeaders]; includeHeaders = config[Constants.copyIncludeHeaders];
return !!includeHeaders; return !!includeHeaders;
} }
private shouldRemoveNewLines(): boolean { private shouldRemoveNewLines(): boolean {
// get config copyRemoveNewLine option from vscode config // get config copyRemoveNewLine option from vscode config
let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this.uri);
let removeNewLines: boolean = config[Constants.configCopyRemoveNewLine]; let removeNewLines: boolean = config[Constants.configCopyRemoveNewLine];
return removeNewLines; return removeNewLines;
} }
@ -371,7 +371,7 @@ export default class QueryRunner {
private sendBatchTimeMessage(batchId: number, executionTime: string): void { private sendBatchTimeMessage(batchId: number, executionTime: string): void {
// get config copyRemoveNewLine option from vscode config // get config copyRemoveNewLine option from vscode config
let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this.uri);
let showBatchTime: boolean = config[Constants.configShowBatchTime]; let showBatchTime: boolean = config[Constants.configShowBatchTime];
if (showBatchTime) { if (showBatchTime) {
let message: IResultMessage = { let message: IResultMessage = {

Просмотреть файл

@ -65,7 +65,7 @@ export default class ResultsSerializer {
private getConfigForCsv(): Contracts.SaveResultsAsCsvRequestParams { private getConfigForCsv(): Contracts.SaveResultsAsCsvRequestParams {
// get save results config from vscode config // get save results config from vscode config
let config = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this._uri);
let saveConfig = config[Constants.configSaveAsCsv]; let saveConfig = config[Constants.configSaveAsCsv];
let saveResultsParams = new Contracts.SaveResultsAsCsvRequestParams(); let saveResultsParams = new Contracts.SaveResultsAsCsvRequestParams();
@ -80,7 +80,7 @@ export default class ResultsSerializer {
private getConfigForJson(): Contracts.SaveResultsAsJsonRequestParams { private getConfigForJson(): Contracts.SaveResultsAsJsonRequestParams {
// get save results config from vscode config // get save results config from vscode config
let config = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this._uri);
let saveConfig = config[Constants.configSaveAsJson]; let saveConfig = config[Constants.configSaveAsJson];
let saveResultsParams = new Contracts.SaveResultsAsJsonRequestParams(); let saveResultsParams = new Contracts.SaveResultsAsJsonRequestParams();
@ -94,7 +94,7 @@ export default class ResultsSerializer {
// get save results config from vscode config // get save results config from vscode config
// Note: we are currently using the configSaveAsCsv setting since it has the option mssql.saveAsCsv.includeHeaders // Note: we are currently using the configSaveAsCsv setting since it has the option mssql.saveAsCsv.includeHeaders
// and we want to have just 1 setting that lists this. // and we want to have just 1 setting that lists this.
let config = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, this._uri);
let saveConfig = config[Constants.configSaveAsCsv]; let saveConfig = config[Constants.configSaveAsCsv];
let saveResultsParams = new Contracts.SaveResultsAsExcelRequestParams(); let saveResultsParams = new Contracts.SaveResultsAsExcelRequestParams();

Просмотреть файл

@ -97,8 +97,12 @@ export class SqlOutputContentProvider implements vscode.TextDocumentContentProvi
} catch (e) { } catch (e) {
prod = false; prod = false;
} }
let mssqlConfig = this._vscodeWrapper.getConfiguration(Constants.extensionName); let queryUri: string;
let editorConfig = this._vscodeWrapper.getConfiguration('editor', uri); if (this._queryResultsMap.has(uri)) {
queryUri = this._queryResultsMap.get(uri).queryRunner.uri;
}
let mssqlConfig = this._vscodeWrapper.getConfiguration(Constants.extensionName, queryUri);
let editorConfig = this._vscodeWrapper.getConfiguration('editor', queryUri);
let extensionFontFamily = mssqlConfig.get<string>(Constants.extConfigResultFontFamily).split('\'').join('').split('"').join(''); let extensionFontFamily = mssqlConfig.get<string>(Constants.extConfigResultFontFamily).split('\'').join('').split('"').join('');
let extensionFontSize = mssqlConfig.get<number>(Constants.extConfigResultFontSize); let extensionFontSize = mssqlConfig.get<number>(Constants.extConfigResultFontSize);
let fontfamily = extensionFontFamily ? let fontfamily = extensionFontFamily ?
@ -133,7 +137,8 @@ export class SqlOutputContentProvider implements vscode.TextDocumentContentProvi
} }
public configRequestHandler(req, res): void { public configRequestHandler(req, res): void {
let extConfig = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName); let queryUri = this._queryResultsMap.get(req.query.uri).queryRunner.uri;
let extConfig = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, queryUri);
let config = new ResultsConfig(); let config = new ResultsConfig();
for (let key of Constants.extConfigResultKeys) { for (let key of Constants.extConfigResultKeys) {
config[key] = extConfig[key]; config[key] = extConfig[key];
@ -260,7 +265,7 @@ export class SqlOutputContentProvider implements vscode.TextDocumentContentProvi
let paneTitle = Utils.formatString(LocalizedConstants.titleResultsPane, queryRunner.title); let paneTitle = Utils.formatString(LocalizedConstants.titleResultsPane, queryRunner.title);
// Always run this command even if just updating to avoid a bug - tfs 8686842 // Always run this command even if just updating to avoid a bug - tfs 8686842
this.displayResultPane(resultsUri, paneTitle); this.displayResultPane(resultsUri, paneTitle, uri);
} }
} }
@ -330,14 +335,14 @@ export class SqlOutputContentProvider implements vscode.TextDocumentContentProvi
} }
// Function to render resultspane content // Function to render resultspane content
public displayResultPane(resultsUri: string, paneTitle: string): void { public displayResultPane(resultsUri: string, paneTitle: string, queryUri: string): void {
// Get the active text editor // Get the active text editor
let activeTextEditor = this._vscodeWrapper.activeTextEditor; let activeTextEditor = this._vscodeWrapper.activeTextEditor;
// Check if the results window already exists // Check if the results window already exists
if (!this.doesResultPaneExist(resultsUri)) { if (!this.doesResultPaneExist(resultsUri)) {
// Wrapper tells us where the new results pane should be placed // Wrapper tells us where the new results pane should be placed
let resultPaneColumn = this.newResultPaneViewColumn(); let resultPaneColumn = this.newResultPaneViewColumn(queryUri);
// Try and Open new window then reset focus back to the editor // Try and Open new window then reset focus back to the editor
vscode.commands.executeCommand('vscode.previewHtml', resultsUri, resultPaneColumn, paneTitle).then(() => { vscode.commands.executeCommand('vscode.previewHtml', resultsUri, resultPaneColumn, paneTitle).then(() => {
@ -586,9 +591,9 @@ export class SqlOutputContentProvider implements vscode.TextDocumentContentProvi
* @return ViewColumn to be used * @return ViewColumn to be used
* public for testing purposes * public for testing purposes
*/ */
public newResultPaneViewColumn(): vscode.ViewColumn { public newResultPaneViewColumn(queryUri: string): vscode.ViewColumn {
// Find configuration options // Find configuration options
let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName); let config = this._vscodeWrapper.getConfiguration(Constants.extensionConfigSectionName, queryUri);
let splitPaneSelection = config[Constants.configSplitPaneSelection]; let splitPaneSelection = config[Constants.configSplitPaneSelection];
let viewColumn: vscode.ViewColumn; let viewColumn: vscode.ViewColumn;

Просмотреть файл

@ -198,7 +198,9 @@ export class DataService {
return Promise.resolve(this._config); return Promise.resolve(this._config);
} else { } else {
return new Promise<{[key: string]: string}>((resolve, reject) => { return new Promise<{[key: string]: string}>((resolve, reject) => {
self.http.get('/config').map((res): IResultsConfig => { let url = '/config?'
+ '&uri=' + self.uri;
self.http.get(url).map((res): IResultsConfig => {
return res.json(); return res.json();
}).subscribe((result: IResultsConfig) => { }).subscribe((result: IResultsConfig) => {
self._shortcuts = result.shortcuts; self._shortcuts = result.shortcuts;
@ -216,7 +218,9 @@ export class DataService {
return Promise.resolve(this._shortcuts); return Promise.resolve(this._shortcuts);
} else { } else {
return new Promise<any>((resolve, reject) => { return new Promise<any>((resolve, reject) => {
self.http.get('/config').map((res): IResultsConfig => { let url = '/config?'
+ '&uri=' + self.uri;
self.http.get(url).map((res): IResultsConfig => {
return res.json(); return res.json();
}).subscribe((result) => { }).subscribe((result) => {
self._shortcuts = result.shortcuts; self._shortcuts = result.shortcuts;

Просмотреть файл

@ -490,7 +490,7 @@ suite('Query Runner tests', () => {
function setupWorkspaceConfig(configResult: {[key: string]: any}): void { function setupWorkspaceConfig(configResult: {[key: string]: any}): void {
let config = stubs.createWorkspaceConfiguration(configResult); let config = stubs.createWorkspaceConfiguration(configResult);
testVscodeWrapper.setup(x => x.getConfiguration(TypeMoq.It.isAny())) testVscodeWrapper.setup(x => x.getConfiguration(TypeMoq.It.isAny(), TypeMoq.It.isAny()))
.returns(x => { .returns(x => {
return config; return config;
}); });

Просмотреть файл

@ -5,13 +5,13 @@ import ResultsSerializer from './../src/models/resultsSerializer';
import { SaveResultsAsCsvRequestParams } from './../src/models/contracts'; import { SaveResultsAsCsvRequestParams } from './../src/models/contracts';
import SqlToolsServerClient from './../src/languageservice/serviceclient'; import SqlToolsServerClient from './../src/languageservice/serviceclient';
import VscodeWrapper from './../src/controllers/vscodeWrapper'; import VscodeWrapper from './../src/controllers/vscodeWrapper';
import { Uri } from 'vscode'; import * as vscode from 'vscode';
import os = require('os'); import os = require('os');
suite('save results tests', () => { suite('save results tests', () => {
const testFile = 'file:///my/test/file.sql'; const testFile = 'file:///my/test/file.sql';
let fileUri: Uri; let fileUri: vscode.Uri;
let serverClient: TypeMoq.IMock<SqlToolsServerClient>; let serverClient: TypeMoq.IMock<SqlToolsServerClient>;
let vscodeWrapper: TypeMoq.IMock<VscodeWrapper>; let vscodeWrapper: TypeMoq.IMock<VscodeWrapper>;
@ -19,10 +19,13 @@ suite('save results tests', () => {
serverClient = TypeMoq.Mock.ofType(SqlToolsServerClient, TypeMoq.MockBehavior.Strict); serverClient = TypeMoq.Mock.ofType(SqlToolsServerClient, TypeMoq.MockBehavior.Strict);
vscodeWrapper = TypeMoq.Mock.ofType(VscodeWrapper); vscodeWrapper = TypeMoq.Mock.ofType(VscodeWrapper);
vscodeWrapper.setup(x => x.getConfiguration(TypeMoq.It.isAny(), TypeMoq.It.isAny())).returns(extensionName => {
return vscode.workspace.getConfiguration(extensionName);
});
if (os.platform() === 'win32') { if (os.platform() === 'win32') {
fileUri = Uri.file('c:\\test.csv'); fileUri = vscode.Uri.file('c:\\test.csv');
} else { } else {
fileUri = Uri.file('/test.csv'); fileUri = vscode.Uri.file('/test.csv');
} }
}); });

Просмотреть файл

@ -32,7 +32,7 @@ suite('SqlOutputProvider Tests', () => {
let configResult: {[key: string]: any} = {}; let configResult: {[key: string]: any} = {};
configResult[Constants.configSplitPaneSelection] = value; configResult[Constants.configSplitPaneSelection] = value;
let config = stubs.createWorkspaceConfiguration(configResult); let config = stubs.createWorkspaceConfiguration(configResult);
vscodeWrapper.setup(x => x.getConfiguration(TypeMoq.It.isAny())) vscodeWrapper.setup(x => x.getConfiguration(TypeMoq.It.isAny(), TypeMoq.It.isAny()))
.returns(x => { .returns(x => {
return config; return config;
}); });
@ -74,7 +74,7 @@ suite('SqlOutputProvider Tests', () => {
setSplitPaneSelectionConfig(c.config); setSplitPaneSelectionConfig(c.config);
setCurrentEditorColumn(c.position); setCurrentEditorColumn(c.position);
let resultColumn = contentProvider.newResultPaneViewColumn(); let resultColumn = contentProvider.newResultPaneViewColumn('test_uri');
// Ensure each case properly outputs the result pane // Ensure each case properly outputs the result pane
assert.equal(resultColumn, c.expectedColumn); assert.equal(resultColumn, c.expectedColumn);

Просмотреть файл

@ -51,6 +51,7 @@ suite('Web Service Request Handler Tests', () => {
startColumn: 0, startColumn: 0,
startLine: 0 startLine: 0
}; };
queryRunner.setup(x => x.uri).returns(() => uri);
contentProvider.runQuery(statusView.object, uri, querySelection, title); contentProvider.runQuery(statusView.object, uri, querySelection, title);
contentProvider.getResultsMap.get('tsqloutput:' + uri).queryRunner = queryRunner.object; contentProvider.getResultsMap.get('tsqloutput:' + uri).queryRunner = queryRunner.object;
}); });
@ -117,7 +118,13 @@ suite('Web Service Request Handler Tests', () => {
}); });
test('ConfigRequestHandler properly handles request and renders content', done => { test('ConfigRequestHandler properly handles request and renders content', done => {
let request = new stubs.ExpressRequest(); let testQuery = {
resultSetNo: 0,
uri: 'tsqloutput:test_uri',
batchIndex: 0,
format: 'test_format'
};
let request = new stubs.ExpressRequest(testQuery);
// Run tested function // Run tested function
contentProvider.configRequestHandler(request, result.object); contentProvider.configRequestHandler(request, result.object);