Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
effd983f
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,体验更适合开发者的 AI 搜索 >>
提交
effd983f
编写于
5月 30, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improve perf of findId and getElementById, #50575
上级
c5160aad
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
6 deletion
+25
-6
src/vs/workbench/parts/outline/electron-browser/outlineModel.ts
.../workbench/parts/outline/electron-browser/outlineModel.ts
+25
-6
未找到文件。
src/vs/workbench/parts/outline/electron-browser/outlineModel.ts
浏览文件 @
effd983f
...
...
@@ -13,6 +13,7 @@ import { IPosition } from 'vs/editor/common/core/position';
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
first
,
size
}
from
'
vs/base/common/collections
'
;
import
{
isFalsyOrEmpty
}
from
'
vs/base/common/arrays
'
;
import
{
commonPrefixLength
}
from
'
vs/base/common/strings
'
;
export
type
FuzzyScore
=
[
number
,
number
[]];
...
...
@@ -21,20 +22,38 @@ export abstract class TreeElement {
abstract
children
:
{
[
id
:
string
]:
TreeElement
};
abstract
parent
:
TreeElement
|
any
;
static
findId
(
candidate
:
string
,
container
:
TreeElement
):
string
{
static
findId
(
candidate
:
SymbolInformation
|
string
,
container
:
TreeElement
):
string
{
// complex id-computation which contains the origin/extension,
// the parent path, and some dedupe logic when names collide
let
id
=
container
.
id
+
candidate
;
for
(
let
i
=
1
;
container
.
children
[
id
]
!==
void
0
;
i
++
)
{
id
=
container
.
id
+
candidate
+
i
;
let
candidateId
:
string
;
if
(
typeof
candidate
===
'
string
'
)
{
candidateId
=
`
${
container
.
id
}
/
${
candidate
}
`
;
}
else
{
candidateId
=
`
${
container
.
id
}
/
${
candidate
.
name
}
`
;
if
(
container
.
children
[
candidateId
]
!==
void
0
)
{
candidateId
=
`
${
container
.
id
}
/
${
candidate
.
name
}
_
${
candidate
.
definingRange
.
startLineNumber
}
_
${
candidate
.
definingRange
.
startColumn
}
`
;
}
}
let
id
=
candidateId
;
for
(
let
i
=
0
;
container
.
children
[
id
]
!==
void
0
;
i
++
)
{
id
=
`
${
candidateId
}
_
${
i
}
`
;
}
return
id
;
}
static
getElementById
(
id
:
string
,
element
:
TreeElement
):
TreeElement
{
if
(
element
.
id
===
id
)
{
if
(
!
id
)
{
return
undefined
;
}
let
len
=
commonPrefixLength
(
id
,
element
.
id
);
if
(
len
===
id
.
length
)
{
return
element
;
}
if
(
len
<
element
.
id
.
length
)
{
return
undefined
;
}
for
(
const
key
in
element
.
children
)
{
let
candidate
=
TreeElement
.
getElementById
(
id
,
element
.
children
[
key
]);
if
(
candidate
)
{
...
...
@@ -174,7 +193,7 @@ export class OutlineModel extends TreeElement {
}
private
static
_makeOutlineElement
(
info
:
SymbolInformation
,
container
:
OutlineGroup
|
OutlineElement
):
void
{
let
id
=
TreeElement
.
findId
(
info
.
name
,
container
);
let
id
=
TreeElement
.
findId
(
info
,
container
);
let
res
=
new
OutlineElement
(
id
,
container
,
info
);
if
(
info
.
children
)
{
for
(
const
childInfo
of
info
.
children
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录