|
7 | 7 | /// <reference path='syntax\incrementalParser.ts' />
|
8 | 8 | /// <reference path='outliningElementsCollector.ts' />
|
9 | 9 | /// <reference path='getScriptLexicalStructureWalker.ts' />
|
10 |
| -/// <reference path='braceMatcher.ts' /> |
11 | 10 | /// <reference path='breakpoints.ts' />
|
12 | 11 | /// <reference path='indentation.ts' />
|
13 | 12 | /// <reference path='formatting\formatting.ts' />
|
@@ -2111,7 +2110,7 @@ module ts {
|
2111 | 2110 | if (child.getFullStart() <= position && position < child.getEnd()) {
|
2112 | 2111 | current = child;
|
2113 | 2112 | continue outer;
|
2114 |
| - } |
| 2113 | + } |
2115 | 2114 | }
|
2116 | 2115 | return current;
|
2117 | 2116 | }
|
@@ -3759,14 +3758,61 @@ module ts {
|
3759 | 3758 | }
|
3760 | 3759 |
|
3761 | 3760 | function getBraceMatchingAtPosition(filename: string, position: number) {
|
3762 |
| - filename = TypeScript.switchToForwardSlashes(filename); |
3763 |
| - var syntaxTree = getSyntaxTree(filename); |
3764 |
| - return TypeScript.Services.BraceMatcher.getMatchSpans(syntaxTree, position); |
| 3761 | + var sourceFile = getCurrentSourceFile(filename); |
| 3762 | + var result: TypeScript.TextSpan[] = []; |
| 3763 | + |
| 3764 | + var token = getTokenAtPosition(sourceFile, position); |
| 3765 | + |
| 3766 | + if (token.getStart(sourceFile) === position) { |
| 3767 | + var matchKind = getMatchingTokenKind(token); |
| 3768 | + |
| 3769 | + // Ensure that there is a corresponding token to match ours. |
| 3770 | + if (matchKind) { |
| 3771 | + var parentElement = token.parent; |
| 3772 | + |
| 3773 | + var childNodes = parentElement.getChildren(sourceFile); |
| 3774 | + for (var i = 0, n = childNodes.length; i < n; i++) { |
| 3775 | + var current = childNodes[i]; |
| 3776 | + |
| 3777 | + if (current.kind === matchKind) { |
| 3778 | + var range1 = new TypeScript.TextSpan(token.getStart(sourceFile), token.getWidth(sourceFile)); |
| 3779 | + var range2 = new TypeScript.TextSpan(current.getStart(sourceFile), current.getWidth(sourceFile)); |
| 3780 | + |
| 3781 | + // We want to order the braces when we return the result. |
| 3782 | + if (range1.start() < range2.start()) { |
| 3783 | + result.push(range1, range2); |
| 3784 | + } |
| 3785 | + else { |
| 3786 | + result.push(range2, range1); |
| 3787 | + } |
| 3788 | + |
| 3789 | + break; |
| 3790 | + } |
| 3791 | + } |
| 3792 | + } |
| 3793 | + } |
| 3794 | + |
| 3795 | + return result; |
| 3796 | + |
| 3797 | + function getMatchingTokenKind(token: Node): ts.SyntaxKind { |
| 3798 | + switch (token.kind) { |
| 3799 | + case ts.SyntaxKind.OpenBraceToken: return ts.SyntaxKind.CloseBraceToken |
| 3800 | + case ts.SyntaxKind.OpenParenToken: return ts.SyntaxKind.CloseParenToken; |
| 3801 | + case ts.SyntaxKind.OpenBracketToken: return ts.SyntaxKind.CloseBracketToken; |
| 3802 | + case ts.SyntaxKind.LessThanToken: return ts.SyntaxKind.GreaterThanToken; |
| 3803 | + case ts.SyntaxKind.CloseBraceToken: return ts.SyntaxKind.OpenBraceToken |
| 3804 | + case ts.SyntaxKind.CloseParenToken: return ts.SyntaxKind.OpenParenToken; |
| 3805 | + case ts.SyntaxKind.CloseBracketToken: return ts.SyntaxKind.OpenBracketToken; |
| 3806 | + case ts.SyntaxKind.GreaterThanToken: return ts.SyntaxKind.LessThanToken; |
| 3807 | + } |
| 3808 | + |
| 3809 | + return undefined; |
| 3810 | + } |
3765 | 3811 | }
|
3766 | 3812 |
|
3767 | 3813 | function getIndentationAtPosition(filename: string, position: number, editorOptions: EditorOptions) {
|
3768 | 3814 | filename = TypeScript.switchToForwardSlashes(filename);
|
3769 |
| - |
| 3815 | + |
3770 | 3816 | var sourceFile = getCurrentSourceFile(filename);
|
3771 | 3817 | var options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter)
|
3772 | 3818 |
|
|
0 commit comments