Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MrYangLu
vscode
提交
56452dc7
V
vscode
项目概览
MrYangLu
/
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,发现更多精彩内容 >>
提交
56452dc7
编写于
4月 03, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
prefer longer seqeunces after good characters, #23643
上级
5e5e9e3b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
28 addition
and
19 deletion
+28
-19
src/vs/base/common/filters.ts
src/vs/base/common/filters.ts
+21
-12
src/vs/base/test/common/filters.test.ts
src/vs/base/test/common/filters.test.ts
+7
-7
未找到文件。
src/vs/base/common/filters.ts
浏览文件 @
56452dc7
...
...
@@ -503,21 +503,14 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] {
}
else
if
(
_seps
[
lastLowWordChar
])
{
score
=
5
;
}
else
if
(
j
===
i
)
{
score
=
3
;
}
else
{
score
=
1
;
}
if
(
i
>
1
&&
j
>
1
&&
_scores
[
i
-
1
][
j
-
1
]
>
score
)
{
score
=
_scores
[
i
-
1
][
j
-
1
];
}
}
_scores
[
i
][
j
]
=
score
;
let
diag
=
_table
[
i
-
1
][
j
-
1
]
+
score
;
let
diag
=
_table
[
i
-
1
][
j
-
1
]
+
(
score
>
1
?
1
:
score
)
;
let
top
=
_table
[
i
-
1
][
j
]
+
-
1
;
let
left
=
_table
[
i
][
j
-
1
]
+
-
1
;
...
...
@@ -578,24 +571,34 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] {
function
findAllMatches
(
patternLen
:
number
,
patternPos
:
number
,
wordPos
:
number
,
total
:
number
,
matches
:
number
[],
bucket
:
[
number
,
number
[]][],
lastMatched
:
boolean
):
void
{
let
simpleMatchCount
=
0
;
while
(
patternPos
>
0
&&
wordPos
>
0
)
{
let
score
=
_scores
[
patternPos
][
wordPos
];
let
arrow
=
_arrows
[
patternPos
][
wordPos
];
if
(
arrow
===
Arrow
.
Left
||
score
<
0
)
{
if
(
arrow
===
Arrow
.
Left
)
{
// left
wordPos
-=
1
;
if
(
lastMatched
)
{
total
-=
5
;
// gap penalty
total
-=
5
;
// new gap penalty
}
else
if
(
matches
.
length
!==
0
)
{
total
-=
1
;
// gap penalty after first match
}
lastMatched
=
false
;
simpleMatchCount
=
0
;
}
else
if
(
arrow
&
Arrow
.
Diag
)
{
if
(
arrow
&
Arrow
.
Left
)
{
// left
findAllMatches
(
patternLen
,
patternPos
,
wordPos
-
1
,
total
,
matches
.
slice
(
0
),
bucket
,
lastMatched
);
findAllMatches
(
patternLen
,
patternPos
,
wordPos
-
1
,
matches
.
length
!==
0
?
total
-
1
:
total
,
matches
.
slice
(
0
),
bucket
,
lastMatched
);
}
// diag
...
...
@@ -605,6 +608,13 @@ function findAllMatches(patternLen: number, patternPos: number, wordPos: number,
matches
.
unshift
(
wordPos
);
lastMatched
=
true
;
if
(
score
===
1
)
{
simpleMatchCount
+=
1
;
}
else
{
total
+=
simpleMatchCount
*
(
score
-
1
);
simpleMatchCount
=
0
;
}
}
else
{
return
undefined
;
}
...
...
@@ -621,7 +631,6 @@ function findAllMatches(patternLen: number, patternPos: number, wordPos: number,
}
total
-=
wordPos
>=
3
?
9
:
wordPos
*
3
;
// late start penalty
total
-=
(
1
+
matches
[
matches
.
length
-
1
])
-
patternLen
;
// penalty for all non matching characters between first and last
bucket
.
push
([
total
,
matches
]);
}
...
...
src/vs/base/test/common/filters.test.ts
浏览文件 @
56452dc7
...
...
@@ -211,7 +211,7 @@ suite('Filters', () => {
test
(
'
fuzzyScore, #23215
'
,
function
()
{
assertMatches
(
'
tit
'
,
'
win.tit
'
,
'
win.^t^i^t
'
,
fuzzyScore
);
assertMatches
(
'
title
'
,
'
win.title
'
,
'
win.^t^i^t^l^e
'
,
fuzzyScore
);
assertMatches
(
'
WordCla
'
,
'
WordCharacterClassifier
'
,
'
^W^o^r^d
^Character
C^l^assifier
'
,
fuzzyScore
);
assertMatches
(
'
WordCla
'
,
'
WordCharacterClassifier
'
,
'
^W^o^r^d
Character^
C^l^assifier
'
,
fuzzyScore
);
assertMatches
(
'
WordCCla
'
,
'
WordCharacterClassifier
'
,
'
^W^o^r^d^Character^C^l^assifier
'
,
fuzzyScore
);
});
...
...
@@ -253,13 +253,13 @@ suite('Filters', () => {
assertMatches
(
'
LLL
'
,
'
SVisualLoggerLogsList
'
,
'
SVisual^Logger^Logs^List
'
,
fuzzyScore
);
assertMatches
(
'
LLLL
'
,
'
SVilLoLosLi
'
,
undefined
,
fuzzyScore
);
assertMatches
(
'
LLLL
'
,
'
SVisualLoggerLogsList
'
,
undefined
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEdit
'
,
'
^T
^ext
E^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEditor
'
,
'
^T
^ext
E^d^i^tor
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEdit
'
,
'
^T
ext^
E^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEditor
'
,
'
^T
ext^
E^d^i^tor
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
Textedit
'
,
'
^T^exte^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
text_edit
'
,
'
^t
^ext_
e^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEditDit
'
,
'
TextEditorDecorationType
'
,
'
^T
^ext
E^d^i^tor^Decorat^ion^Type
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEditorDecorationType
'
,
'
^T
^ext
E^d^i^torDecorationType
'
,
fuzzyScore
);
assertMatches
(
'
Tedit
'
,
'
TextEdit
'
,
'
^T
^ext
E^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
text_edit
'
,
'
^t
ext_^
e^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
TEditDit
'
,
'
TextEditorDecorationType
'
,
'
^T
ext^
E^d^i^tor^Decorat^ion^Type
'
,
fuzzyScore
);
assertMatches
(
'
TEdit
'
,
'
TextEditorDecorationType
'
,
'
^T
ext^
E^d^i^torDecorationType
'
,
fuzzyScore
);
assertMatches
(
'
Tedit
'
,
'
TextEdit
'
,
'
^T
ext^
E^d^i^t
'
,
fuzzyScore
);
assertMatches
(
'
ba
'
,
'
?AB?
'
,
undefined
,
fuzzyScore
);
assertMatches
(
'
bkn
'
,
'
the_black_knight
'
,
'
the_^black_^k^night
'
,
fuzzyScore
);
assertMatches
(
'
bt
'
,
'
the_black_knight
'
,
'
the_^black_knigh^t
'
,
fuzzyScore
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录