提交 e07e2b01 编写于 作者: A Alex Dima

Fixes Microsoft/monaco-editor#133: Brackets are case-insensitive

上级 daf411d8
......@@ -716,8 +716,10 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
return result;
}
public findMatchingBracketUp(bracket:string, _position:editorCommon.IPosition): Range {
public findMatchingBracketUp(_bracket:string, _position:editorCommon.IPosition): Range {
let bracket = _bracket.toLowerCase();
let position = this.validatePosition(_position);
let modeTransitions = this._lines[position.lineNumber - 1].getModeTransitions(this.getModeId());
let currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1);
let currentMode = modeTransitions[currentModeIndex];
......@@ -779,6 +781,8 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
// check that we didn't hit a bracket too far away from position
if (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {
let foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);
foundBracketText = foundBracketText.toLowerCase();
let r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText]);
// check that we can actually match this bracket
......@@ -812,6 +816,8 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
// check that we didn't hit a bracket too far away from position
if (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {
let foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);
foundBracketText = foundBracketText.toLowerCase();
let r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText]);
// check that we can actually match this bracket
......@@ -889,6 +895,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
}
let hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);
hitText = hitText.toLowerCase();
if (hitText === bracket.open) {
count++;
......@@ -955,6 +962,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
}
let hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);
hitText = hitText.toLowerCase();
if (hitText === bracket.open) {
count++;
......
......@@ -143,6 +143,8 @@ export class Brackets {
let r = BracketsUtils.findPrevBracketInToken(reversedBracketRegex, 1, lineText, tokenStart, tokenEnd);
if (r) {
let text = lineText.substring(r.startColumn - 1, r.endColumn - 1);
text = text.toLowerCase();
let isOpen = this._richEditBrackets.textIsOpenBracket[text];
if (!isOpen) {
return {
......
......@@ -40,10 +40,10 @@ export class RichEditBrackets implements IRichEditBrackets {
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.textIsBracket[b.open.toLowerCase()] = b;
this.textIsBracket[b.close.toLowerCase()] = b;
this.textIsOpenBracket[b.open.toLowerCase()] = true;
this.textIsOpenBracket[b.close.toLowerCase()] = false;
this.maxBracketLength = Math.max(this.maxBracketLength, b.open.length);
this.maxBracketLength = Math.max(this.maxBracketLength, b.close.length);
});
......
......@@ -187,6 +187,8 @@ class TokenScanner {
let bracketIsOpen: boolean = false;
if (nextBracket) {
let bracketText = this._currentLineText.substring(nextBracket.startColumn - 1, nextBracket.endColumn - 1);
bracketText = bracketText.toLowerCase();
bracketData = this._currentModeBrackets.textIsBracket[bracketText];
bracketIsOpen = this._currentModeBrackets.textIsOpenBracket[bracketText];
}
......
......@@ -297,7 +297,34 @@ suite('TextModelWithTokens regression tests', () => {
model.dispose();
});
// test('Microsoft/monaco-editor#133: Error: Cannot read property \'modeId\' of undefined', () => {
test('Microsoft/monaco-editor#133: Error: Cannot read property \'modeId\' of undefined', () => {
class BracketMode extends MockMode {
constructor() {
super();
LanguageConfigurationRegistry.register(this.getId(), {
brackets: [
['module','end module'],
['sub','end sub']
]
});
}
}
// });
let model = Model.createFromString([
'Imports System',
'Imports System.Collections.Generic',
'',
'Module m1',
'',
'\tSub Main()',
'\tEnd Sub',
'',
'End Module',
].join('\n'), undefined, new BracketMode());
let actual = model.matchBracket(new Position(4,1));
assert.deepEqual(actual, [new Range(4,1,4,7), new Range(9,1,9,11)]);
model.dispose();
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册