Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
206c06b5
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
206c06b5
编写于
6月 18, 2020
作者:
I
IllusionMH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Step over surrogate pairs on zero-lenth matches (fixes #100134)
上级
6eb26040
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
31 addition
and
2 deletion
+31
-2
src/vs/editor/common/model/textModelSearch.ts
src/vs/editor/common/model/textModelSearch.ts
+6
-2
src/vs/editor/test/common/model/textModelSearch.test.ts
src/vs/editor/test/common/model/textModelSearch.test.ts
+25
-0
未找到文件。
src/vs/editor/common/model/textModelSearch.ts
浏览文件 @
206c06b5
...
...
@@ -548,8 +548,12 @@ export class Searcher {
if
(
matchStartIndex
===
this
.
_prevMatchStartIndex
&&
matchLength
===
this
.
_prevMatchLength
)
{
if
(
matchLength
===
0
)
{
// the search result is an empty string and won't advance `regex.lastIndex`, so `regex.exec` will stuck here
// we attempt to recover from that by advancing by one
this
.
_searchRegex
.
lastIndex
+=
1
;
// we attempt to recover from that by advancing by two if surrogate pair found and by one otherwise
if
(
strings
.
getNextCodePoint
(
text
,
textLength
,
this
.
_searchRegex
.
lastIndex
)
>
0xFFFF
)
{
this
.
_searchRegex
.
lastIndex
+=
2
;
}
else
{
this
.
_searchRegex
.
lastIndex
+=
1
;
}
continue
;
}
// Exit early if the regex matches the same range twice
...
...
src/vs/editor/test/common/model/textModelSearch.test.ts
浏览文件 @
206c06b5
...
...
@@ -781,4 +781,29 @@ suite('TextModelSearch', () => {
model
.
dispose
();
});
test
(
'
issue #100134. Zero-length matches should properly step over surrogate pairs
'
,
()
=>
{
// 1[Laptop]1 - there shoud be no matches inside of [Laptop] emoji
assertFindMatches
(
'
1
\
uD83D
\
uDCBB1
'
,
'
()
'
,
true
,
false
,
null
,
[
[
1
,
1
,
1
,
1
],
[
1
,
2
,
1
,
2
],
[
1
,
4
,
1
,
4
],
[
1
,
5
,
1
,
5
],
]
);
// 1[Hacker Cat]1 = 1[Cat Face][ZWJ][Laptop]1 - there shoud be matches between emoji and ZWJ
// there shoud be no matches inside of [Cat Face] and [Laptop] emoji
assertFindMatches
(
'
1
\
uD83D
\
uDC31
\
u200D
\
uD83D
\
uDCBB1
'
,
'
()
'
,
true
,
false
,
null
,
[
[
1
,
1
,
1
,
1
],
[
1
,
2
,
1
,
2
],
[
1
,
4
,
1
,
4
],
[
1
,
5
,
1
,
5
],
[
1
,
7
,
1
,
7
],
[
1
,
8
,
1
,
8
]
]
);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录