Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
fe17a6d6
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fe17a6d6
编写于
9月 21, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Prefer matching brackets to the right of the position (part 1)
上级
c996984b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
50 deletion
+60
-50
src/vs/editor/common/model/textModelWithTokens.ts
src/vs/editor/common/model/textModelWithTokens.ts
+15
-1
src/vs/editor/test/common/model/textModelWithTokens.test.ts
src/vs/editor/test/common/model/textModelWithTokens.test.ts
+45
-49
未找到文件。
src/vs/editor/common/model/textModelWithTokens.ts
浏览文件 @
fe17a6d6
...
...
@@ -566,9 +566,23 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
// limit search to not go after `maxBracketLength`
const
searchEndOffset
=
Math
.
min
(
currentToken
.
endOffset
,
position
.
column
-
1
+
currentModeBrackets
.
maxBracketLength
);
// first, check if there is a bracket to the right of `position`
let
foundBracket
=
BracketsUtils
.
findNextBracketInToken
(
currentModeBrackets
.
forwardRegex
,
lineNumber
,
lineText
,
position
.
column
-
1
,
searchEndOffset
);
if
(
foundBracket
&&
foundBracket
.
startColumn
===
position
.
column
)
{
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
if
(
r
)
{
return
r
;
}
}
// it might still be the case that [currentTokenStart -> currentTokenEnd] contains multiple brackets
while
(
true
)
{
let
foundBracket
=
BracketsUtils
.
findNextBracketInT
ext
(
currentModeBrackets
.
forwardRegex
,
lineNumber
,
lineText
.
substring
(
searchStartOffset
,
searchEndOffset
),
searchStart
Offset
);
let
foundBracket
=
BracketsUtils
.
findNextBracketInT
oken
(
currentModeBrackets
.
forwardRegex
,
lineNumber
,
lineText
,
searchStartOffset
,
searchEnd
Offset
);
if
(
!
foundBracket
)
{
// there are no brackets in this text
break
;
...
...
src/vs/editor/test/common/model/textModelWithTokens.test.ts
浏览文件 @
fe17a6d6
...
...
@@ -153,12 +153,9 @@ suite('TextModelWithTokens - bracket matching', () => {
assert
.
equal
(
match
,
null
,
'
is not matching brackets at
'
+
lineNumber
+
'
,
'
+
column
);
}
function
isBracket
(
model
:
Model
,
lineNumber1
:
number
,
column11
:
number
,
column12
:
number
,
lineNumber2
:
number
,
column21
:
number
,
column22
:
number
)
{
let
match
=
model
.
matchBracket
(
new
Position
(
lineNumber1
,
column11
));
assert
.
deepEqual
(
match
,
[
new
Range
(
lineNumber1
,
column11
,
lineNumber1
,
column12
),
new
Range
(
lineNumber2
,
column21
,
lineNumber2
,
column22
)
],
'
is matching brackets at
'
+
lineNumber1
+
'
,
'
+
column11
);
function
isBracket2
(
model
:
Model
,
testPosition
:
Position
,
expected
:[
Range
,
Range
]):
void
{
let
actual
=
model
.
matchBracket
(
testPosition
);
assert
.
deepEqual
(
actual
,
expected
,
'
matches brackets at
'
+
testPosition
);
}
const
LANGUAGE_ID
=
'
bracketMode1
'
;
...
...
@@ -180,15 +177,15 @@ suite('TextModelWithTokens - bracket matching', () => {
isNotABracket
(
model
,
1
,
1
);
isNotABracket
(
model
,
1
,
2
);
isNotABracket
(
model
,
1
,
3
);
isBracket
(
model
,
1
,
4
,
5
,
2
,
3
,
4
);
isBracket
(
model
,
1
,
5
,
4
,
2
,
3
,
4
);
isBracket
(
model
,
1
,
6
,
5
,
2
,
2
,
3
);
isBracket
(
model
,
1
,
7
,
6
,
2
,
1
,
2
);
isBracket
(
model
,
2
,
1
,
2
,
1
,
6
,
7
);
isBracket
(
model
,
2
,
2
,
1
,
1
,
6
,
7
);
isBracket
(
model
,
2
,
3
,
2
,
1
,
5
,
6
);
isBracket
(
model
,
2
,
4
,
3
,
1
,
4
,
5
);
isBracket
2
(
model
,
new
Position
(
1
,
4
),
[
new
Range
(
1
,
4
,
1
,
5
),
new
Range
(
2
,
3
,
2
,
4
)]
);
isBracket
2
(
model
,
new
Position
(
1
,
5
),
[
new
Range
(
1
,
5
,
1
,
6
),
new
Range
(
2
,
2
,
2
,
3
)]
);
isBracket
2
(
model
,
new
Position
(
1
,
6
),
[
new
Range
(
1
,
6
,
1
,
7
),
new
Range
(
2
,
1
,
2
,
2
)]
);
isBracket
2
(
model
,
new
Position
(
1
,
7
),
[
new
Range
(
1
,
6
,
1
,
7
),
new
Range
(
2
,
1
,
2
,
2
)]
);
isBracket
2
(
model
,
new
Position
(
2
,
1
),
[
new
Range
(
2
,
1
,
2
,
2
),
new
Range
(
1
,
6
,
1
,
7
)]
);
isBracket
2
(
model
,
new
Position
(
2
,
2
),
[
new
Range
(
2
,
2
,
2
,
3
),
new
Range
(
1
,
5
,
1
,
6
)]
);
isBracket
2
(
model
,
new
Position
(
2
,
3
),
[
new
Range
(
2
,
3
,
2
,
4
),
new
Range
(
1
,
4
,
1
,
5
)]
);
isBracket
2
(
model
,
new
Position
(
2
,
4
),
[
new
Range
(
2
,
3
,
2
,
4
),
new
Range
(
1
,
4
,
1
,
5
)]
);
isNotABracket
(
model
,
2
,
5
);
isNotABracket
(
model
,
2
,
6
);
isNotABracket
(
model
,
2
,
7
);
...
...
@@ -205,44 +202,43 @@ suite('TextModelWithTokens - bracket matching', () => {
'
}]}}
'
;
let
model
=
Model
.
createFromString
(
text
,
undefined
,
LANGUAGE_ID
);
let
brackets
=
[
[
1
,
11
,
12
,
5
,
4
,
5
],
[
1
,
12
,
11
,
5
,
4
,
5
],
[
5
,
5
,
4
,
1
,
11
,
12
],
[
2
,
6
,
7
,
3
,
1
,
2
],
[
2
,
7
,
6
,
3
,
1
,
2
],
[
3
,
1
,
2
,
2
,
6
,
7
],
[
3
,
2
,
1
,
2
,
6
,
7
],
[
3
,
9
,
10
,
5
,
3
,
4
],
[
3
,
10
,
9
,
5
,
3
,
4
],
[
5
,
4
,
3
,
3
,
9
,
10
],
[
3
,
17
,
18
,
5
,
2
,
3
],
[
3
,
18
,
17
,
5
,
2
,
3
],
[
5
,
3
,
2
,
3
,
17
,
18
],
[
3
,
19
,
18
,
4
,
1
,
2
],
[
4
,
2
,
1
,
3
,
18
,
19
],
[
4
,
1
,
2
,
3
,
18
,
19
],
[
4
,
4
,
5
,
5
,
1
,
2
],
[
4
,
5
,
4
,
5
,
1
,
2
],
[
5
,
2
,
1
,
4
,
4
,
5
],
[
5
,
1
,
2
,
4
,
4
,
5
]
let
brackets
:[
Position
,
Range
,
Range
][]
=
[
[
new
Position
(
1
,
11
),
new
Range
(
1
,
11
,
1
,
12
),
new
Range
(
5
,
4
,
5
,
5
)],
[
new
Position
(
1
,
12
),
new
Range
(
1
,
11
,
1
,
12
),
new
Range
(
5
,
4
,
5
,
5
)],
[
new
Position
(
2
,
6
),
new
Range
(
2
,
6
,
2
,
7
),
new
Range
(
3
,
1
,
3
,
2
)],
[
new
Position
(
2
,
7
),
new
Range
(
2
,
6
,
2
,
7
),
new
Range
(
3
,
1
,
3
,
2
)],
[
new
Position
(
3
,
1
),
new
Range
(
3
,
1
,
3
,
2
),
new
Range
(
2
,
6
,
2
,
7
)],
[
new
Position
(
3
,
2
),
new
Range
(
3
,
1
,
3
,
2
),
new
Range
(
2
,
6
,
2
,
7
)],
[
new
Position
(
3
,
9
),
new
Range
(
3
,
9
,
3
,
10
),
new
Range
(
5
,
3
,
5
,
4
)],
[
new
Position
(
3
,
10
),
new
Range
(
3
,
9
,
3
,
10
),
new
Range
(
5
,
3
,
5
,
4
)],
[
new
Position
(
3
,
17
),
new
Range
(
3
,
17
,
3
,
18
),
new
Range
(
5
,
2
,
5
,
3
)],
[
new
Position
(
3
,
18
),
new
Range
(
3
,
18
,
3
,
19
),
new
Range
(
4
,
1
,
4
,
2
)],
[
new
Position
(
3
,
19
),
new
Range
(
3
,
18
,
3
,
19
),
new
Range
(
4
,
1
,
4
,
2
)],
[
new
Position
(
4
,
1
),
new
Range
(
4
,
1
,
4
,
2
),
new
Range
(
3
,
18
,
3
,
19
)],
[
new
Position
(
4
,
2
),
new
Range
(
4
,
1
,
4
,
2
),
new
Range
(
3
,
18
,
3
,
19
)],
[
new
Position
(
4
,
4
),
new
Range
(
4
,
4
,
4
,
5
),
new
Range
(
5
,
1
,
5
,
2
)],
[
new
Position
(
4
,
5
),
new
Range
(
4
,
4
,
4
,
5
),
new
Range
(
5
,
1
,
5
,
2
)],
[
new
Position
(
5
,
1
),
new
Range
(
5
,
1
,
5
,
2
),
new
Range
(
4
,
4
,
4
,
5
)],
[
new
Position
(
5
,
2
),
new
Range
(
5
,
2
,
5
,
3
),
new
Range
(
3
,
17
,
3
,
18
)],
[
new
Position
(
5
,
3
),
new
Range
(
5
,
3
,
5
,
4
),
new
Range
(
3
,
9
,
3
,
10
)],
[
new
Position
(
5
,
4
),
new
Range
(
5
,
4
,
5
,
5
),
new
Range
(
1
,
11
,
1
,
12
)],
[
new
Position
(
5
,
5
),
new
Range
(
5
,
4
,
5
,
5
),
new
Range
(
1
,
11
,
1
,
12
)],
];
let
i
,
len
,
b
,
isABracket
=
{
1
:{},
2
:{},
3
:{},
4
:{},
5
:{}};
for
(
i
=
0
,
len
=
brackets
.
length
;
i
<
len
;
i
++
)
{
b
=
brackets
[
i
];
isBracket
(
model
,
b
[
0
],
b
[
1
],
b
[
2
],
b
[
3
],
b
[
4
],
b
[
5
]);
isABracket
[
b
[
0
]][
b
[
1
]]
=
true
;
let
isABracket
=
{
1
:{},
2
:{},
3
:{},
4
:{},
5
:{}};
for
(
let
i
=
0
,
len
=
brackets
.
length
;
i
<
len
;
i
++
)
{
let
[
testPos
,
b1
,
b2
]
=
brackets
[
i
];
isBracket2
(
model
,
testPos
,
[
b1
,
b2
]);
isABracket
[
testPos
.
lineNumber
][
testPos
.
column
]
=
true
;
}
for
(
i
=
1
,
len
=
model
.
getLineCount
();
i
<=
len
;
i
++
)
{
let
line
=
model
.
getLineContent
(
i
)
,
j
,
lenJ
;
for
(
j
=
1
,
lenJ
=
line
.
length
+
1
;
j
<=
lenJ
;
j
++
)
{
for
(
let
i
=
1
,
len
=
model
.
getLineCount
();
i
<=
len
;
i
++
)
{
let
line
=
model
.
getLineContent
(
i
);
for
(
let
j
=
1
,
lenJ
=
line
.
length
+
1
;
j
<=
lenJ
;
j
++
)
{
if
(
!
isABracket
[
i
].
hasOwnProperty
(
j
))
{
isNotABracket
(
model
,
i
,
j
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录