提交 4a7d555d 编写于 作者: A Alex Dima

Simplify code dealing with brackets

上级 eeece32b
......@@ -113,11 +113,6 @@ function registerSupports(modeID: string, host: TypeScriptServiceClientHost, cli
],
__electricCharacterSupport: {
brackets: [
{ tokenType: 'delimiter.curly.' + modeID, open: '{', close: '}', isElectric: true },
{ tokenType: 'delimiter.square.' + modeID, open: '[', close: ']', isElectric: true },
{ tokenType: 'delimiter.paren.' + modeID, open: '(', close: ')', isElectric: true }
],
docComment: { scope: 'comment.documentation', open: '/**', lineStart: ' * ', close: ' */' }
},
......
......@@ -22,7 +22,7 @@ import {TokenIterator} from 'vs/editor/common/model/tokenIterator';
import {ILineContext, ILineTokens, IMode, IModeTransition, IState} from 'vs/editor/common/modes';
import {NullMode, NullState, nullTokenize} from 'vs/editor/common/modes/nullMode';
import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports';
import {BracketsUtils} from 'vs/editor/common/modes/supports/electricCharacter';
import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets';
export class TokensInflatorMap implements editorCommon.ITokensInflatorMap {
......
......@@ -649,16 +649,6 @@ export interface ITaskSupport {
clean?():TPromise<void>;
}
/**
* Standard brackets used for auto indentation
*/
export interface IBracketPair {
tokenType:string;
open:string;
close:string;
isElectric:boolean;
}
export interface IAutoClosingPairConditional extends IAutoClosingPair {
notIn?: string[];
}
......
......@@ -4,7 +4,8 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import {Bracket, IAutoClosingPairConditional, IBracketPair, ISuggestion} from 'vs/editor/common/modes';
import {Bracket, IAutoClosingPairConditional, ISuggestion} from 'vs/editor/common/modes';
import {CharacterPair} from 'vs/editor/common/modes/supports/richEditBrackets';
/*
* This module exports common types and functionality shared between
......@@ -47,7 +48,7 @@ export interface ILexer extends ILexerMin {
wordDefinition: RegExp;
autoClosingPairs: IAutoClosingPairConditional[];
standardBrackets: IBracketPair[];
standardBrackets: CharacterPair[];
// enhancedBrackets: IRegexBracketPair[];
outdentTriggers: string;
}
......
......@@ -10,9 +10,10 @@
*/
import * as objects from 'vs/base/common/objects';
import {Bracket, IAutoClosingPairConditional, IBracketPair} from 'vs/editor/common/modes';
import {Bracket, IAutoClosingPairConditional} from 'vs/editor/common/modes';
import * as monarchCommon from 'vs/editor/common/modes/monarch/monarchCommon';
import {ILanguage, ILanguageBracket} from 'vs/editor/common/modes/monarch/monarchTypes';
import {CharacterPair} from 'vs/editor/common/modes/supports/richEditBrackets';
/*
* Type helpers
......@@ -687,14 +688,9 @@ export function compile(json: ILanguage): monarchCommon.ILexer {
// }
// lexer.enhancedBrackets = enhancedBrackets;
var standardBrackets: IBracketPair[] = [];
var standardBrackets: CharacterPair[] = [];
for (var i = 0; i < brackets.length; ++i) {
standardBrackets.push({
tokenType: brackets[i].token,
open: brackets[i].open,
close:brackets[i].close,
isElectric: true
});
standardBrackets.push([brackets[i].open, brackets[i].close]);
}
lexer.standardBrackets = standardBrackets;
......
......@@ -9,23 +9,15 @@
* using regular expressions.
*/
import {IBracketPair, ISuggestSupport} from 'vs/editor/common/modes';
import {ISuggestSupport} from 'vs/editor/common/modes';
import {ILexer} from 'vs/editor/common/modes/monarch/monarchCommon';
import {CharacterPair, IRichEditConfiguration} from 'vs/editor/common/modes/supports/richEditSupport';
import {IRichEditConfiguration} from 'vs/editor/common/modes/supports/richEditSupport';
import {PredefinedResultSuggestSupport, TextualAndPredefinedResultSuggestSupport} from 'vs/editor/common/modes/supports/suggestSupport';
import {IEditorWorkerService} from 'vs/editor/common/services/editorWorkerService';
import {IModelService} from 'vs/editor/common/services/modelService';
export function createRichEditSupport(lexer: ILexer): IRichEditConfiguration {
function toBracket(input:IBracketPair): CharacterPair {
return [input.open, input.close];
}
function toBrackets(input:IBracketPair[]): CharacterPair[] {
return input.map(toBracket);
}
return {
wordPattern: lexer.wordDefinition,
......@@ -35,10 +27,9 @@ export function createRichEditSupport(lexer: ILexer): IRichEditConfiguration {
blockComment: [lexer.blockCommentStart, lexer.blockCommentEnd]
},
brackets: toBrackets(lexer.standardBrackets),
brackets: lexer.standardBrackets,
__electricCharacterSupport: {
brackets: lexer.standardBrackets,
// regexBrackets: lexer.enhancedBrackets,
caseInsensitive: lexer.ignoreCase,
embeddedElectricCharacters: lexer.outdentTriggers.split('')
......
......@@ -5,10 +5,9 @@
'use strict';
import * as strings from 'vs/base/common/strings';
import {Range} from 'vs/editor/common/core/range';
import {IRichEditBracket} from 'vs/editor/common/editorCommon';
import * as modes from 'vs/editor/common/modes';
import {handleEvent, ignoreBracketsInToken} from 'vs/editor/common/modes/supports';
import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets';
/**
* Definition of documentation comments (e.g. Javadoc/JSdoc)
......@@ -21,7 +20,6 @@ export interface IDocComment {
}
export interface IBracketElectricCharacterContribution {
brackets: modes.IBracketPair[];
docComment?: IDocComment;
caseInsensitive?: boolean;
embeddedElectricCharacters?: string[];
......@@ -33,10 +31,10 @@ export class BracketElectricCharacterSupport implements modes.IRichEditElectricC
private contribution: IBracketElectricCharacterContribution;
private brackets: Brackets;
constructor(modeId: string, contribution: IBracketElectricCharacterContribution) {
constructor(modeId: string, brackets: modes.IRichEditBrackets, contribution: IBracketElectricCharacterContribution) {
this._modeId = modeId;
this.contribution = contribution;
this.brackets = new Brackets(modeId, contribution.brackets, contribution.docComment, contribution.caseInsensitive);
this.contribution = contribution || {};
this.brackets = new Brackets(modeId, brackets, this.contribution.docComment, this.contribution.caseInsensitive);
}
public getElectricCharacters(): string[]{
......@@ -57,77 +55,31 @@ export class BracketElectricCharacterSupport implements modes.IRichEditElectricC
}
});
}
public getRichEditBrackets(): modes.IRichEditBrackets {
return this.brackets.getRichEditBrackets();
}
}
interface ISimpleInternalBracket {
open: string;
close: string;
}
export class Brackets {
private _modeId: string;
private _brackets: IRichEditBracket[];
private _bracketsForwardRegex: RegExp;
private _bracketsReversedRegex: RegExp;
private _maxBracketLength: number;
private _textIsBracket: {[text:string]:IRichEditBracket;};
private _textIsOpenBracket: {[text:string]:boolean;};
private _richEditBrackets: modes.IRichEditBrackets;
private _docComment: IDocComment;
constructor(modeId: string, brackets: modes.IBracketPair[], docComment: IDocComment = null, caseInsensitive: boolean = false) {
constructor(modeId: string, richEditBrackets: modes.IRichEditBrackets, docComment: IDocComment = null, caseInsensitive: boolean = false) {
this._modeId = modeId;
this._brackets = brackets.map((b) => {
return {
modeId: modeId,
open: b.open,
close: b.close,
forwardRegex: getRegexForBracketPair({ open: b.open, close: b.close }),
reversedRegex: getReversedRegexForBracketPair({ open: b.open, close: b.close })
};
});
this._bracketsForwardRegex = getRegexForBrackets(this._brackets);
this._bracketsReversedRegex = getReversedRegexForBrackets(this._brackets);
this._textIsBracket = {};
this._textIsOpenBracket = {};
this._maxBracketLength = 0;
this._brackets.forEach((b) => {
this._textIsBracket[b.open] = b;
this._textIsBracket[b.close] = b;
this._textIsOpenBracket[b.open] = true;
this._textIsOpenBracket[b.close] = false;
this._maxBracketLength = Math.max(this._maxBracketLength, b.open.length);
this._maxBracketLength = Math.max(this._maxBracketLength, b.close.length);
});
this._richEditBrackets = richEditBrackets;
this._docComment = docComment ? docComment : null;
}
public getRichEditBrackets(): modes.IRichEditBrackets {
if (this._brackets.length === 0) {
return null;
}
return {
maxBracketLength: this._maxBracketLength,
forwardRegex: this._bracketsForwardRegex,
reversedRegex: this._bracketsReversedRegex,
brackets: this._brackets,
textIsBracket: this._textIsBracket,
textIsOpenBracket: this._textIsOpenBracket
};
}
public getElectricCharacters():string[] {
var result: string[] = [];
for (let i = 0, len = this._brackets.length; i < len; i++) {
let bracketPair = this._brackets[i];
let lastChar = bracketPair.close.charAt(bracketPair.close.length - 1);
result.push(lastChar);
if (this._richEditBrackets) {
for (let i = 0, len = this._richEditBrackets.brackets.length; i < len; i++) {
let bracketPair = this._richEditBrackets.brackets[i];
let lastChar = bracketPair.close.charAt(bracketPair.close.length - 1);
result.push(lastChar);
}
}
// Doc comments
......@@ -164,11 +116,11 @@ export class Brackets {
private _onElectricCharacterStandardBrackets(context: modes.ILineContext, offset: number): modes.IElectricAction {
if (this._brackets.length === 0) {
if (!this._richEditBrackets || this._richEditBrackets.brackets.length === 0) {
return null;
}
let reversedBracketRegex = this._bracketsReversedRegex;
let reversedBracketRegex = this._richEditBrackets.reversedRegex;
let lineText = context.getLineContent();
let tokenIndex = context.findIndexOfOffset(offset);
......@@ -184,7 +136,7 @@ export class Brackets {
let r = BracketsUtils.findPrevBracketInToken(reversedBracketRegex, 1, lineText, tokenStart, tokenEnd);
if (r) {
let text = lineText.substring(r.startColumn - 1, r.endColumn - 1);
let isOpen = this._textIsOpenBracket[text];
let isOpen = this._richEditBrackets.textIsOpenBracket[text];
if (!isOpen) {
return {
matchOpenBracket: text
......@@ -228,113 +180,3 @@ export class Brackets {
return { appendText: this._docComment.close};
}
}
function once<T, R>(keyFn:(input:T)=>string, computeFn:(input:T)=>R):(input:T)=>R {
let cache: {[key:string]:R;} = {};
return (input:T):R => {
let key = keyFn(input);
if (!cache.hasOwnProperty(key)) {
cache[key] = computeFn(input);
}
return cache[key];
};
}
var getRegexForBracketPair = once<ISimpleInternalBracket,RegExp>(
(input) => `${input.open};${input.close}`,
(input) => {
return createOrRegex([input.open, input.close]);
}
);
var getReversedRegexForBracketPair = once<ISimpleInternalBracket,RegExp>(
(input) => `${input.open};${input.close}`,
(input) => {
return createOrRegex([toReversedString(input.open), toReversedString(input.close)]);
}
);
var getRegexForBrackets = once<ISimpleInternalBracket[],RegExp>(
(input) => input.map(b => `${b.open};${b.close}`).join(';'),
(input) => {
let pieces: string[] = [];
input.forEach((b) => {
pieces.push(b.open);
pieces.push(b.close);
});
return createOrRegex(pieces);
}
);
var getReversedRegexForBrackets = once<ISimpleInternalBracket[],RegExp>(
(input) => input.map(b => `${b.open};${b.close}`).join(';'),
(input) => {
let pieces: string[] = [];
input.forEach((b) => {
pieces.push(toReversedString(b.open));
pieces.push(toReversedString(b.close));
});
return createOrRegex(pieces);
}
);
function createOrRegex(pieces:string[]): RegExp {
let regexStr = `(${pieces.map(strings.escapeRegExpCharacters).join(')|(')})`;
return strings.createRegExp(regexStr, true, false, false, false);
}
function toReversedString(str:string): string {
let reversedStr = '';
for (let i = str.length - 1; i >= 0; i--) {
reversedStr += str.charAt(i);
}
return reversedStr;
}
export class BracketsUtils {
private static _findPrevBracketInText(reversedBracketRegex:RegExp, lineNumber:number, reversedText:string, offset:number): Range {
let m = reversedText.match(reversedBracketRegex);
if (!m) {
return null;
}
let matchOffset = reversedText.length - 1 - m.index;
let matchLength = m[0].length;
let absoluteMatchOffset = offset + matchOffset;
return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);
}
public static findPrevBracketInToken(reversedBracketRegex:RegExp, lineNumber:number, lineText:string, currentTokenStart:number, currentTokenEnd:number): Range {
// Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)
let currentTokenReversedText = '';
for (let index = currentTokenEnd - 1; index >= currentTokenStart; index--) {
currentTokenReversedText += lineText.charAt(index);
}
return this._findPrevBracketInText(reversedBracketRegex, lineNumber, currentTokenReversedText, currentTokenStart);
}
public static findNextBracketInText(bracketRegex:RegExp, lineNumber:number, text:string, offset:number): Range {
let m = text.match(bracketRegex);
if (!m) {
return null;
}
let matchOffset = m.index;
let matchLength = m[0].length;
let absoluteMatchOffset = offset + matchOffset;
return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);
}
public static findNextBracketInToken(bracketRegex:RegExp, lineNumber:number, lineText:string, currentTokenStart:number, currentTokenEnd:number): Range {
let currentTokenText = lineText.substring(currentTokenStart, currentTokenEnd);
return this.findNextBracketInText(bracketRegex, lineNumber, currentTokenText, currentTokenStart);
}
}
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as strings from 'vs/base/common/strings';
import {Range} from 'vs/editor/common/core/range';
import {IRichEditBracket} from 'vs/editor/common/editorCommon';
import * as modes from 'vs/editor/common/modes';
export type CharacterPair = [string, string];
interface ISimpleInternalBracket {
open: string;
close: string;
}
export class RichEditBrackets implements modes.IRichEditBrackets {
public brackets: IRichEditBracket[];
public forwardRegex: RegExp;
public reversedRegex: RegExp;
public maxBracketLength: number;
public textIsBracket: {[text:string]:IRichEditBracket;};
public textIsOpenBracket: {[text:string]:boolean;};
constructor(modeId: string, brackets: CharacterPair[]) {
this.brackets = brackets.map((b) => {
return {
modeId: modeId,
open: b[0],
close: b[1],
forwardRegex: getRegexForBracketPair({ open: b[0], close: b[1] }),
reversedRegex: getReversedRegexForBracketPair({ open: b[0], close: b[1] })
};
});
this.forwardRegex = getRegexForBrackets(this.brackets);
this.reversedRegex = getReversedRegexForBrackets(this.brackets);
this.textIsBracket = {};
this.textIsOpenBracket = {};
this.maxBracketLength = 0;
this.brackets.forEach((b) => {
this.textIsBracket[b.open] = b;
this.textIsBracket[b.close] = b;
this.textIsOpenBracket[b.open] = true;
this.textIsOpenBracket[b.close] = false;
this.maxBracketLength = Math.max(this.maxBracketLength, b.open.length);
this.maxBracketLength = Math.max(this.maxBracketLength, b.close.length);
});
}
}
function once<T, R>(keyFn:(input:T)=>string, computeFn:(input:T)=>R):(input:T)=>R {
let cache: {[key:string]:R;} = {};
return (input:T):R => {
let key = keyFn(input);
if (!cache.hasOwnProperty(key)) {
cache[key] = computeFn(input);
}
return cache[key];
};
}
var getRegexForBracketPair = once<ISimpleInternalBracket,RegExp>(
(input) => `${input.open};${input.close}`,
(input) => {
return createOrRegex([input.open, input.close]);
}
);
var getReversedRegexForBracketPair = once<ISimpleInternalBracket,RegExp>(
(input) => `${input.open};${input.close}`,
(input) => {
return createOrRegex([toReversedString(input.open), toReversedString(input.close)]);
}
);
var getRegexForBrackets = once<ISimpleInternalBracket[],RegExp>(
(input) => input.map(b => `${b.open};${b.close}`).join(';'),
(input) => {
let pieces: string[] = [];
input.forEach((b) => {
pieces.push(b.open);
pieces.push(b.close);
});
return createOrRegex(pieces);
}
);
var getReversedRegexForBrackets = once<ISimpleInternalBracket[],RegExp>(
(input) => input.map(b => `${b.open};${b.close}`).join(';'),
(input) => {
let pieces: string[] = [];
input.forEach((b) => {
pieces.push(toReversedString(b.open));
pieces.push(toReversedString(b.close));
});
return createOrRegex(pieces);
}
);
function createOrRegex(pieces:string[]): RegExp {
let regexStr = `(${pieces.map(strings.escapeRegExpCharacters).join(')|(')})`;
return strings.createRegExp(regexStr, true, false, false, false);
}
function toReversedString(str:string): string {
let reversedStr = '';
for (let i = str.length - 1; i >= 0; i--) {
reversedStr += str.charAt(i);
}
return reversedStr;
}
export class BracketsUtils {
private static _findPrevBracketInText(reversedBracketRegex:RegExp, lineNumber:number, reversedText:string, offset:number): Range {
let m = reversedText.match(reversedBracketRegex);
if (!m) {
return null;
}
let matchOffset = reversedText.length - 1 - m.index;
let matchLength = m[0].length;
let absoluteMatchOffset = offset + matchOffset;
return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);
}
public static findPrevBracketInToken(reversedBracketRegex:RegExp, lineNumber:number, lineText:string, currentTokenStart:number, currentTokenEnd:number): Range {
// Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)
let currentTokenReversedText = '';
for (let index = currentTokenEnd - 1; index >= currentTokenStart; index--) {
currentTokenReversedText += lineText.charAt(index);
}
return this._findPrevBracketInText(reversedBracketRegex, lineNumber, currentTokenReversedText, currentTokenStart);
}
public static findNextBracketInText(bracketRegex:RegExp, lineNumber:number, text:string, offset:number): Range {
let m = text.match(bracketRegex);
if (!m) {
return null;
}
let matchOffset = m.index;
let matchLength = m[0].length;
let absoluteMatchOffset = offset + matchOffset;
return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);
}
public static findNextBracketInToken(bracketRegex:RegExp, lineNumber:number, lineText:string, currentTokenStart:number, currentTokenEnd:number): Range {
let currentTokenText = lineText.substring(currentTokenStart, currentTokenEnd);
return this.findNextBracketInText(bracketRegex, lineNumber, currentTokenText, currentTokenStart);
}
}
......@@ -10,8 +10,7 @@ import {CharacterPairSupport} from 'vs/editor/common/modes/supports/characterPai
import {ICharacterPairContribution} from 'vs/editor/common/modes/supports/characterPair';
import {BracketElectricCharacterSupport, IBracketElectricCharacterContribution} from 'vs/editor/common/modes/supports/electricCharacter';
import {IIndentationRules, IOnEnterRegExpRules, IOnEnterSupportOptions, OnEnterSupport} from 'vs/editor/common/modes/supports/onEnter';
export type CharacterPair = [string, string];
import {CharacterPair, RichEditBrackets} from 'vs/editor/common/modes/supports/richEditBrackets';
export interface CommentRule {
lineComment?: string;
......@@ -48,6 +47,10 @@ export class RichEditSupport implements IRichEditSupport {
this._conf = RichEditSupport._mergeConf(prev, rawConf);
if (this._conf.brackets) {
this.brackets = new RichEditBrackets(modeId, this._conf.brackets);
}
this._handleOnEnter(modeId, this._conf);
this._handleComments(modeId, this._conf);
......@@ -56,9 +59,8 @@ export class RichEditSupport implements IRichEditSupport {
this.characterPair = new CharacterPairSupport(modeId, this._conf.__characterPairSupport);
}
if (this._conf.__electricCharacterSupport) {
this.electricCharacter = new BracketElectricCharacterSupport(modeId, this._conf.__electricCharacterSupport);
this.brackets = this.electricCharacter.getRichEditBrackets();
if (this._conf.__electricCharacterSupport || this._conf.brackets) {
this.electricCharacter = new BracketElectricCharacterSupport(modeId, this.brackets, this._conf.__electricCharacterSupport);
}
this.wordDefinition = this._conf.wordPattern || NullMode.DEFAULT_WORD_REGEXP;
......
......@@ -9,7 +9,7 @@ import {Range} from 'vs/editor/common/core/range';
import {ILineTokens, IModel, IPosition, IRange, IRichEditBracket} from 'vs/editor/common/editorCommon';
import {Bracket, IModeTransition, IRichEditBrackets} from 'vs/editor/common/modes';
import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports';
import {BracketsUtils} from 'vs/editor/common/modes/supports/electricCharacter';
import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets';
export class Node {
......
......@@ -82,15 +82,6 @@ export class LanguageConfigurationFileHandler {
};
}
// TMSyntax hard-codes these and tokenizes them as brackets
richEditConfig.__electricCharacterSupport = {
brackets: [
{ tokenType:'delimiter.curly.' + modeId, open: '{', close: '}', isElectric: true },
{ tokenType:'delimiter.square.' + modeId, open: '[', close: ']', isElectric: true },
{ tokenType:'delimiter.paren.' + modeId, open: '(', close: ')', isElectric: true }
]
};
this._modeService.registerRichEditSupport(modeId, richEditConfig);
}
}
......@@ -10,7 +10,7 @@ import {createLineContextFromTokenText} from 'vs/editor/test/common/modesTestUti
suite('Editor Modes - Auto Indentation', () => {
test('Doc comments', () => {
var brackets = new Brackets('test', [],
var brackets = new Brackets('test', null,
{ scope: 'doc', open: '/**', lineStart: ' * ', close: ' */' });
assert.equal(brackets.onElectricCharacter(createLineContextFromTokenText([
......
......@@ -231,13 +231,11 @@ export class BracketMode extends TestingMode {
getInitialState: () => new BracketState(this)
}, false, false);
this.richEditSupport = new RichEditSupport(this.getId(), null, {
__electricCharacterSupport: {
brackets: [
{ tokenType: 'asd', open: '{', close: '}', isElectric: true },
{ tokenType: 'qwe', open: '[', close: ']', isElectric: true },
{ tokenType: 'zxc', open: '(', close: ')', isElectric: true }
]
}
brackets: [
['{', '}'],
['[', ']'],
['(', ')'],
]
});
}
}
......
......@@ -323,12 +323,6 @@ export class CSSMode extends AbstractMode {
['(', ')']
],
__electricCharacterSupport: {
brackets: [
{ tokenType: 'punctuation.bracket.css', open: '{', close: '}', isElectric: true }
]
},
__characterPairSupport: {
autoClosingPairs: [
{ open: '{', close: '}' },
......
......@@ -130,7 +130,6 @@ export class HandlebarsMode extends htmlMode.HTMLMode<htmlWorker.HTMLWorker> {
],
__electricCharacterSupport: {
brackets: [],
caseInsensitive: true,
embeddedElectricCharacters: ['*', '}', ']', ')']
},
......
......@@ -351,10 +351,6 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode impl
],
__electricCharacterSupport: {
brackets: [
{ tokenType: 'bla', open: '<!--', close: '-->', isElectric: true },
{ tokenType: 'bla', open: '<', close: '>', isElectric: true }
],
caseInsensitive: true,
embeddedElectricCharacters: ['*', '}', ']', ')']
},
......
......@@ -93,11 +93,6 @@ export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaS
],
__electricCharacterSupport: {
brackets: [
{ tokenType: 'delimiter.bracket.js', open: '{', close: '}', isElectric: true },
{ tokenType: 'delimiter.array.js', open: '[', close: ']', isElectric: true },
{ tokenType: 'delimiter.parenthesis.js', open: '(', close: ')', isElectric: true }
],
docComment: { scope: 'comment.doc', open: '/**', lineStart: ' * ', close: ' */' }
},
......
......@@ -61,13 +61,6 @@ export class JSONMode extends AbstractMode implements Modes.IExtraInfoSupport, M
['[', ']']
],
__electricCharacterSupport: {
brackets: [
{ tokenType:'delimiter.bracket.json', open: '{', close: '}', isElectric: true },
{ tokenType:'delimiter.array.json', open: '[', close: ']', isElectric: true }
]
},
__characterPairSupport: {
autoClosingPairs: [
{ open: '{', close: '}', notIn: ['string'] },
......
......@@ -15,14 +15,15 @@ import {TokenizationSupport, ILeavingNestedModeData, ITokenizationCustomization}
import {TextualSuggestSupport} from 'vs/editor/common/modes/supports/suggestSupport';
import {IEditorWorkerService} from 'vs/editor/common/services/editorWorkerService';
var bracketsSource : Modes.IBracketPair[]= [
{ tokenType:'delimiter.bracket.php', open: '{', close: '}', isElectric: true },
{ tokenType:'delimiter.array.php', open: '[', close: ']', isElectric: true },
{ tokenType:'delimiter.parenthesis.php', open: '(', close: ')', isElectric: true }
];
var brackets = (function() {
let bracketsSource = [
{ tokenType:'delimiter.bracket.php', open: '{', close: '}' },
{ tokenType:'delimiter.array.php', open: '[', close: ']' },
{ tokenType:'delimiter.parenthesis.php', open: '(', close: ')' }
];
let MAP: {
[text:string]:{
tokenType: string;
......@@ -488,10 +489,6 @@ export class PHPMode extends AbstractMode implements ITokenizationCustomization
['(', ')']
],
__electricCharacterSupport: {
brackets: bracketsSource
},
__characterPairSupport: {
autoClosingPairs: [
{ open: '{', close: '}', notIn: ['string.php'] },
......
......@@ -21,9 +21,9 @@ var whitespace = '\t ';
var brackets = (function() {
let bracketsSource = [
{ tokenType:'punctuation.bracket.cs', open: '{', close: '}', isElectric: true },
{ tokenType:'punctuation.array.cs', open: '[', close: ']', isElectric: true },
{ tokenType:'punctuation.parenthesis.cs', open: '(', close: ')', isElectric: true }
{ tokenType:'punctuation.bracket.cs', open: '{', close: '}' },
{ tokenType:'punctuation.array.cs', open: '[', close: ']' },
{ tokenType:'punctuation.parenthesis.cs', open: '(', close: ')' }
];
let MAP: {
......
......@@ -84,7 +84,6 @@ export class RAZORMode extends htmlMode.HTMLMode<RAZORWorker> {
],
__electricCharacterSupport: {
brackets: [],
caseInsensitive: true,
embeddedElectricCharacters: ['*', '}', ']', ')']
},
......
......@@ -242,11 +242,6 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> extend
],
__electricCharacterSupport: {
brackets: [
{ tokenType:'delimiter.bracket.ts', open: '{', close: '}', isElectric: true },
{ tokenType:'delimiter.array.ts', open: '[', close: ']', isElectric: true },
{ tokenType:'delimiter.parenthesis.ts', open: '(', close: ')', isElectric: true }
],
docComment: {scope:'comment.doc', open:'/**', lineStart:' * ', close:' */'}
},
......
......@@ -2247,12 +2247,6 @@ declare namespace vscode {
* @deprecated Will be replaced by a better API soon.
*/
__electricCharacterSupport?: {
brackets: {
tokenType: string;
open: string;
close: string;
isElectric: boolean;
}[];
docComment?: {
scope: string;
open: string;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册