diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 6ef2b811d3f8f550f149b878e64f498939df9f6d..b642b3caae4f8ad33de370c80126582ef7116423 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -1718,7 +1718,7 @@ export class EditorOptionsValidator { let autoClosingBrackets: EditorAutoClosingStrategy; let autoClosingQuotes: EditorAutoClosingStrategy; let autoWrapping: EditorAutoWrappingStrategy; - if (typeof (opts.autoClosingBrackets) === 'boolean' && opts.autoClosingBrackets === false) { + if (typeof opts.autoClosingBrackets === 'boolean' && opts.autoClosingBrackets === false) { // backwards compatibility: disable all on boolean false autoClosingBrackets = 'never'; autoClosingQuotes = 'never'; diff --git a/src/vs/editor/common/controller/cursorCommon.ts b/src/vs/editor/common/controller/cursorCommon.ts index 3eb11919f8d40d779c0578657636d0eecb42f5ac..e9b777d1df3c975736cdf3794f9a3d78d75609d6 100644 --- a/src/vs/editor/common/controller/cursorCommon.ts +++ b/src/vs/editor/common/controller/cursorCommon.ts @@ -20,7 +20,6 @@ import { IViewModel } from 'vs/editor/common/viewModel/viewModel'; import { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents'; import { VerticalRevealType } from 'vs/editor/common/view/viewEvents'; import { TextModelResolvedOptions, ITextModel } from 'vs/editor/common/model'; -import { CharacterPairSupport } from 'vs/editor/common/modes/supports/characterPair'; export interface IColumnSelectData { toViewLineNumber: number; @@ -67,6 +66,10 @@ export interface CharacterMap { [char: string]: string; } +const autoCloseAlways = _ => true; +const autoCloseNever = _ => false; +const autoCloseBeforeWhitespace = (chr: string) => (chr === ' ' || chr === '\t'); + export class CursorConfiguration { _cursorMoveConfigurationBrand: void; @@ -138,8 +141,8 @@ export class CursorConfiguration { this._electricChars = null; this.shouldAutoCloseBefore = { - quote: CursorConfiguration._getShouldAutoclose(languageIdentifier, this.autoClosingQuotes), - bracket: CursorConfiguration._getShouldAutoclose(languageIdentifier, this.autoClosingBrackets) + quote: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingQuotes), + bracket: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingBrackets) }; let autoClosingPairs = CursorConfiguration._getAutoClosingPairs(languageIdentifier); @@ -193,20 +196,26 @@ export class CursorConfiguration { } } - private static _getShouldAutoclose(languageIdentifier: LanguageIdentifier, autoCloseConfig: EditorAutoClosingStrategy): (ch: string) => boolean { - let autoCloseBeforeSet = CursorConfiguration._getAutoCloseBeforeSet(languageIdentifier); - if (autoCloseConfig === 'beforeWhitespace') { return c => CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_WHITESPACE.indexOf(c) !== -1; } - if (autoCloseConfig === 'languageDefined') { return c => autoCloseBeforeSet.indexOf(c) !== -1; } - if (autoCloseConfig === 'always') { return c => true; } - return c => false; + private static _getShouldAutoClose(languageIdentifier: LanguageIdentifier, autoCloseConfig: EditorAutoClosingStrategy): (ch: string) => boolean { + switch (autoCloseConfig) { + case 'beforeWhitespace': + return autoCloseBeforeWhitespace; + case 'languageDefined': + return CursorConfiguration._getLanguageDefinedShouldAutoClose(languageIdentifier); + case 'always': + return autoCloseAlways; + case 'never': + return autoCloseNever; + } } - private static _getAutoCloseBeforeSet(languageIdentifier: LanguageIdentifier): string { + private static _getLanguageDefinedShouldAutoClose(languageIdentifier: LanguageIdentifier): (ch: string) => boolean { try { - return LanguageConfigurationRegistry.getAutoCloseBeforeSet(languageIdentifier.id); + const autoCloseBeforeSet = LanguageConfigurationRegistry.getAutoCloseBeforeSet(languageIdentifier.id); + return c => autoCloseBeforeSet.indexOf(c) !== -1; } catch (e) { onUnexpectedError(e); - return null; + return autoCloseNever; } } diff --git a/src/vs/editor/common/controller/cursorTypeOperations.ts b/src/vs/editor/common/controller/cursorTypeOperations.ts index 72546cb0c00d8ff6d4808131b11fb2d2e0b8a2df..726a007bd83e40a8f04fe4385bc5b7e8eb719f99 100644 --- a/src/vs/editor/common/controller/cursorTypeOperations.ts +++ b/src/vs/editor/common/controller/cursorTypeOperations.ts @@ -532,7 +532,6 @@ export class TypeOperations { const position = selection.getPosition(); const lineText = model.getLineContent(position.lineNumber); - // Do not auto-close ' or " after a word character if (chIsQuote && position.column > 1) { const wordSeparators = getMapForWordSeparators(config.wordSeparators); diff --git a/src/vs/workbench/parts/codeEditor/electron-browser/languageConfiguration/languageConfigurationExtensionPoint.ts b/src/vs/workbench/parts/codeEditor/electron-browser/languageConfiguration/languageConfigurationExtensionPoint.ts index 000d7800babbb9e20f785821cdc434d9ce2326d1..c739f208f75095e42b8ede85edf61882d74903f0 100644 --- a/src/vs/workbench/parts/codeEditor/electron-browser/languageConfiguration/languageConfigurationExtensionPoint.ts +++ b/src/vs/workbench/parts/codeEditor/electron-browser/languageConfiguration/languageConfigurationExtensionPoint.ts @@ -280,7 +280,6 @@ export class LanguageConfigurationFileHandler { richEditConfig.autoCloseBefore = autoCloseBefore; } - if (configuration.wordPattern) { try { let wordPattern = this._parseRegex(configuration.wordPattern);