Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
ea2c3d89
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,发现更多精彩内容 >>
提交
ea2c3d89
编写于
5月 31, 2016
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improve nearestReference search by using common prefix len, #5893
上级
3b1e28db
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
18 deletion
+60
-18
src/vs/editor/contrib/referenceSearch/browser/referencesModel.ts
...editor/contrib/referenceSearch/browser/referencesModel.ts
+20
-18
src/vs/editor/contrib/referenceSearch/test/browser/referencesModel.test.ts
...trib/referenceSearch/test/browser/referencesModel.test.ts
+40
-0
未找到文件。
src/vs/editor/contrib/referenceSearch/browser/referencesModel.ts
浏览文件 @
ea2c3d89
...
...
@@ -203,28 +203,30 @@ export class ReferencesModel {
}
public
nearestReference
(
resource
:
URI
,
position
:
IPosition
):
OneReference
{
let
candidate
:
OneReference
;
let
candiateDist
:
number
;
for
(
let
ref
of
this
.
_references
)
{
if
(
ref
.
uri
.
toString
()
!==
resource
.
toString
())
{
continue
;
}
if
(
Range
.
containsPosition
(
ref
.
range
,
position
))
{
// best match (!)
return
ref
;
const
nearest
=
this
.
_references
.
map
((
ref
,
idx
)
=>
{
return
{
idx
,
prefixLen
:
strings
.
commonPrefixLength
(
ref
.
uri
.
toString
(),
resource
.
toString
()),
offsetDist
:
Math
.
abs
(
ref
.
range
.
startLineNumber
-
position
.
lineNumber
)
*
100
+
Math
.
abs
(
ref
.
range
.
startColumn
-
position
.
column
)
};
}).
sort
((
a
,
b
)
=>
{
if
(
a
.
prefixLen
>
b
.
prefixLen
)
{
return
-
1
;
}
else
if
(
a
.
prefixLen
<
b
.
prefixLen
)
{
return
1
;
}
else
if
(
a
.
offsetDist
<
b
.
offsetDist
)
{
return
-
1
;
}
else
if
(
a
.
offsetDist
>
b
.
offsetDist
)
{
return
1
;
}
else
{
return
0
;
}
})[
0
];
let
dist
=
(
Math
.
abs
(
ref
.
range
.
startLineNumber
-
position
.
lineNumber
)
*
100
)
+
Math
.
abs
(
ref
.
range
.
startColumn
-
position
.
column
);
if
(
!
candidate
||
dist
<=
candiateDist
)
{
candidate
=
ref
;
candiateDist
=
dist
;
}
if
(
nearest
)
{
return
this
.
_references
[
nearest
.
idx
];
}
return
candidate
||
this
.
_references
[
0
];
}
private
static
_compareReferences
(
a
:
Location
,
b
:
Location
):
number
{
...
...
src/vs/editor/contrib/referenceSearch/test/browser/referencesModel.test.ts
0 → 100644
浏览文件 @
ea2c3d89
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
URI
from
'
vs/base/common/uri
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
ReferencesModel
}
from
'
vs/editor/contrib/referenceSearch/browser/referencesModel
'
;
suite
(
'
references
'
,
function
()
{
test
(
'
neartestReference
'
,
function
()
{
const
model
=
new
ReferencesModel
([{
uri
:
URI
.
file
(
'
/out/obj/can
'
),
range
:
new
Range
(
1
,
1
,
1
,
1
)
},
{
uri
:
URI
.
file
(
'
/out/obj/can2
'
),
range
:
new
Range
(
1
,
1
,
1
,
1
)
},
{
uri
:
URI
.
file
(
'
/src/can
'
),
range
:
new
Range
(
1
,
1
,
1
,
1
)
}]);
let
ref
=
model
.
nearestReference
(
URI
.
file
(
'
/src/can
'
),
new
Position
(
1
,
1
));
assert
.
equal
(
ref
.
uri
.
fsPath
,
'
/src/can
'
);
ref
=
model
.
nearestReference
(
URI
.
file
(
'
/src/someOtherFileInSrc
'
),
new
Position
(
1
,
1
));
assert
.
equal
(
ref
.
uri
.
fsPath
,
'
/src/can
'
);
ref
=
model
.
nearestReference
(
URI
.
file
(
'
/out/someOtherFile
'
),
new
Position
(
1
,
1
));
assert
.
equal
(
ref
.
uri
.
fsPath
,
'
/out/obj/can
'
);
ref
=
model
.
nearestReference
(
URI
.
file
(
'
/out/obj/can2222
'
),
new
Position
(
1
,
1
));
assert
.
equal
(
ref
.
uri
.
fsPath
,
'
/out/obj/can2
'
);
});
});
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录