diff --git a/extensions/coffeescript/coffeescript.configuration.json b/extensions/coffeescript/coffeescript.configuration.json index 3008173c45c..745427eacfb 100644 --- a/extensions/coffeescript/coffeescript.configuration.json +++ b/extensions/coffeescript/coffeescript.configuration.json @@ -7,5 +7,19 @@ ["{", "}"], ["[", "]"], ["(", ")"] + ], + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] ] } \ No newline at end of file diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index cd030dd8f4b..c2ed1a59ba9 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -705,7 +705,7 @@ export interface ICommentsConfiguration { } /** - * Interface used to support insertion of matching characters like brackets and qoutes. + * Interface used to support insertion of matching characters like brackets and quotes. */ export interface IAutoClosingPair { open:string; diff --git a/src/vs/editor/node/languageConfiguration.ts b/src/vs/editor/node/languageConfiguration.ts index 2931eadb6ad..cc3dd8a7f90 100644 --- a/src/vs/editor/node/languageConfiguration.ts +++ b/src/vs/editor/node/languageConfiguration.ts @@ -9,6 +9,7 @@ import {parse} from 'vs/base/common/json'; import {readFile} from 'vs/base/node/pfs'; import {IRichEditConfiguration} from 'vs/editor/common/modes/supports/richEditSupport'; import {IModeService} from 'vs/editor/common/services/modeService'; +import {IAutoClosingPair} from 'vs/editor/common/modes'; type CharacterPair = [string, string]; @@ -20,6 +21,8 @@ interface ICommentRule { interface ILanguageConfiguration { comments?: ICommentRule; brackets?: CharacterPair[]; + autoClosingPairs?: CharacterPair[]; + surroundingPairs?: CharacterPair[]; } export class LanguageConfigurationFileHandler { @@ -75,15 +78,29 @@ export class LanguageConfigurationFileHandler { if (configuration.brackets) { richEditConfig.brackets = configuration.brackets; + } + if (configuration.autoClosingPairs) { richEditConfig.__characterPairSupport = { - autoClosingPairs: configuration.brackets.map(pair => { - let [open, close] = pair; - return { open: open, close: close }; - }) + autoClosingPairs: this._mapCharacterPairs(configuration.autoClosingPairs) }; + } else if (configuration.brackets) { + richEditConfig.__characterPairSupport = { + autoClosingPairs: this._mapCharacterPairs(configuration.brackets) + }; + } + + if (richEditConfig.__characterPairSupport && configuration.surroundingPairs) { + richEditConfig.__characterPairSupport.surroundingPairs = this._mapCharacterPairs(configuration.surroundingPairs); } this._modeService.registerRichEditSupport(modeId, richEditConfig); } + + private _mapCharacterPairs(pairs:CharacterPair[]): IAutoClosingPair[] { + return pairs.map(pair => { + let [open, close] = pair; + return { open: open, close: close }; + }); + } }