Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
68f98da4
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,发现更多精彩内容 >>
提交
68f98da4
编写于
6月 21, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
outline - markers for every outline group, replace splice with inplace-coalesce
上级
fe27b591
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
99 addition
and
10 deletion
+99
-10
src/vs/base/common/arrays.ts
src/vs/base/common/arrays.ts
+19
-4
src/vs/base/test/common/arrays.test.ts
src/vs/base/test/common/arrays.test.ts
+38
-0
src/vs/editor/contrib/documentSymbols/outlineModel.ts
src/vs/editor/contrib/documentSymbols/outlineModel.ts
+9
-6
src/vs/editor/contrib/documentSymbols/test/outlineModel.test.ts
.../editor/contrib/documentSymbols/test/outlineModel.test.ts
+33
-0
未找到文件。
src/vs/base/common/arrays.ts
浏览文件 @
68f98da4
...
...
@@ -284,12 +284,27 @@ function topStep<T>(array: T[], compare: (a: T, b: T) => number, result: T[], i:
/**
* @returns a new array with all undefined or null values removed. The original array is not modified at all.
*/
export
function
coalesce
<
T
>
(
array
:
T
[]):
T
[]
{
export
function
coalesce
<
T
>
(
array
:
T
[]):
T
[];
export
function
coalesce
<
T
>
(
array
:
T
[],
inplace
:
true
):
void
;
export
function
coalesce
<
T
>
(
array
:
T
[],
inplace
?:
true
):
void
|
T
[]
{
if
(
!
array
)
{
return
array
;
if
(
!
inplace
)
{
return
array
;
}
}
if
(
!
inplace
)
{
return
array
.
filter
(
e
=>
!!
e
);
return
array
.
filter
(
e
=>
!!
e
);
}
else
{
let
to
=
0
;
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++
)
{
if
(
!!
array
[
i
])
{
array
[
to
]
=
array
[
i
];
to
+=
1
;
}
}
array
.
length
=
to
;
}
}
/**
...
...
@@ -486,4 +501,4 @@ export function pushToEnd<T>(arr: T[], value: T): void {
arr
.
splice
(
index
,
1
);
arr
.
push
(
value
);
}
}
\ No newline at end of file
}
src/vs/base/test/common/arrays.test.ts
浏览文件 @
68f98da4
...
...
@@ -304,5 +304,43 @@ suite('Arrays', () => {
sparse
=
arrays
.
coalesce
(
sparse
);
assert
.
equal
(
sparse
.
length
,
5
);
});
test
(
'
coalesce - inplace
'
,
function
()
{
let
a
=
[
null
,
1
,
null
,
2
,
3
];
arrays
.
coalesce
(
a
,
true
);
assert
.
equal
(
a
.
length
,
3
);
assert
.
equal
(
a
[
0
],
1
);
assert
.
equal
(
a
[
1
],
2
);
assert
.
equal
(
a
[
2
],
3
);
a
=
[
null
,
1
,
null
,
void
0
,
undefined
,
2
,
3
];
arrays
.
coalesce
(
a
,
true
);
assert
.
equal
(
a
.
length
,
3
);
assert
.
equal
(
a
[
0
],
1
);
assert
.
equal
(
a
[
1
],
2
);
assert
.
equal
(
a
[
2
],
3
);
let
b
=
[];
b
[
10
]
=
1
;
b
[
20
]
=
2
;
b
[
30
]
=
3
;
arrays
.
coalesce
(
b
,
true
);
assert
.
equal
(
b
.
length
,
3
);
assert
.
equal
(
b
[
0
],
1
);
assert
.
equal
(
b
[
1
],
2
);
assert
.
equal
(
b
[
2
],
3
);
let
sparse
=
[];
sparse
[
0
]
=
1
;
sparse
[
1
]
=
1
;
sparse
[
17
]
=
1
;
sparse
[
1000
]
=
1
;
sparse
[
1001
]
=
1
;
assert
.
equal
(
sparse
.
length
,
1002
);
arrays
.
coalesce
(
sparse
,
true
);
assert
.
equal
(
sparse
.
length
,
5
);
});
});
src/vs/editor/contrib/documentSymbols/outlineModel.ts
浏览文件 @
68f98da4
...
...
@@ -12,7 +12,7 @@ import { fuzzyScore, FuzzyScore } from 'vs/base/common/filters';
import
{
IPosition
}
from
'
vs/editor/common/core/position
'
;
import
{
Range
,
IRange
}
from
'
vs/editor/common/core/range
'
;
import
{
first
,
size
}
from
'
vs/base/common/collections
'
;
import
{
isFalsyOrEmpty
,
binarySearch
}
from
'
vs/base/common/arrays
'
;
import
{
isFalsyOrEmpty
,
binarySearch
,
coalesce
}
from
'
vs/base/common/arrays
'
;
import
{
commonPrefixLength
}
from
'
vs/base/common/strings
'
;
import
{
IMarker
,
MarkerSeverity
}
from
'
vs/platform/markers/common/markers
'
;
import
{
onUnexpectedExternalError
}
from
'
vs/base/common/errors
'
;
...
...
@@ -164,11 +164,12 @@ export class OutlineGroup extends TreeElement {
let
myMarkers
:
IMarker
[]
=
[];
let
myTopSev
:
MarkerSeverity
;
while
(
start
<
markers
.
length
&&
Range
.
areIntersecting
(
markers
[
start
],
item
.
symbol
.
range
)
)
{
for
(;
start
<
markers
.
length
&&
Range
.
areIntersecting
(
item
.
symbol
.
range
,
markers
[
start
]);
start
++
)
{
// remove markers intersecting with this outline element
// and store them in a 'private' array.
let
marker
=
markers
.
splice
(
start
,
1
)[
0
];
let
marker
=
markers
[
start
];
myMarkers
.
push
(
marker
);
markers
[
start
]
=
undefined
;
if
(
!
myTopSev
||
marker
.
severity
>
myTopSev
)
{
myTopSev
=
marker
.
severity
;
}
...
...
@@ -188,6 +189,8 @@ export class OutlineGroup extends TreeElement {
topSev
:
myTopSev
};
}
coalesce
(
markers
,
true
);
}
}
...
...
@@ -311,10 +314,10 @@ export class OutlineModel extends TreeElement {
readonly
id
=
'
root
'
;
readonly
parent
=
undefined
;
pr
ivate
_groups
:
{
[
id
:
string
]:
OutlineGroup
;
}
=
Object
.
create
(
null
);
pr
otected
_groups
:
{
[
id
:
string
]:
OutlineGroup
;
}
=
Object
.
create
(
null
);
children
:
{
[
id
:
string
]:
OutlineGroup
|
OutlineElement
;
}
=
Object
.
create
(
null
);
pr
ivate
constructor
(
readonly
textModel
:
ITextModel
)
{
pr
otected
constructor
(
readonly
textModel
:
ITextModel
)
{
super
();
}
...
...
@@ -376,7 +379,7 @@ export class OutlineModel extends TreeElement {
marker
.
sort
(
Range
.
compareRangesUsingStarts
);
for
(
const
key
in
this
.
_groups
)
{
this
.
_groups
[
key
].
updateMarker
(
marker
);
this
.
_groups
[
key
].
updateMarker
(
marker
.
slice
(
0
)
);
}
}
}
src/vs/editor/contrib/documentSymbols/test/outlineModel.test.ts
浏览文件 @
68f98da4
...
...
@@ -149,4 +149,37 @@ suite('OutlineModel', function () {
assert
.
equal
(
c1
.
marker
,
undefined
);
assert
.
equal
(
c2
.
marker
.
count
,
1
);
});
test
(
'
OutlineElement - updateMarker/multiple groups
'
,
function
()
{
let
model
=
new
class
extends
OutlineModel
{
constructor
()
{
super
(
null
);
}
readyForTesting
()
{
this
.
_groups
=
this
.
children
as
any
;
}
};
model
.
children
[
'
g1
'
]
=
new
OutlineGroup
(
'
g1
'
,
model
,
null
,
1
);
model
.
children
[
'
g1
'
].
children
[
'
c1
'
]
=
new
OutlineElement
(
'
c1
'
,
model
.
children
[
'
g1
'
],
fakeSymbolInformation
(
new
Range
(
1
,
1
,
11
,
1
)));
model
.
children
[
'
g2
'
]
=
new
OutlineGroup
(
'
g2
'
,
model
,
null
,
1
);
model
.
children
[
'
g2
'
].
children
[
'
c2
'
]
=
new
OutlineElement
(
'
c2
'
,
model
.
children
[
'
g2
'
],
fakeSymbolInformation
(
new
Range
(
1
,
1
,
7
,
1
)));
model
.
children
[
'
g2
'
].
children
[
'
c2
'
].
children
[
'
c2.1
'
]
=
new
OutlineElement
(
'
c2.1
'
,
model
.
children
[
'
g2
'
].
children
[
'
c2
'
],
fakeSymbolInformation
(
new
Range
(
1
,
3
,
2
,
19
)));
model
.
children
[
'
g2
'
].
children
[
'
c2
'
].
children
[
'
c2.2
'
]
=
new
OutlineElement
(
'
c2.2
'
,
model
.
children
[
'
g2
'
].
children
[
'
c2
'
],
fakeSymbolInformation
(
new
Range
(
4
,
1
,
6
,
10
)));
model
.
readyForTesting
();
const
data
=
[
fakeMarker
(
new
Range
(
1
,
1
,
2
,
8
)),
fakeMarker
(
new
Range
(
6
,
1
,
6
,
98
)),
];
model
.
updateMarker
(
data
);
assert
.
equal
(
model
.
children
[
'
g1
'
].
children
[
'
c1
'
].
marker
.
count
,
2
);
assert
.
equal
(
model
.
children
[
'
g2
'
].
children
[
'
c2
'
].
children
[
'
c2.1
'
].
marker
.
count
,
1
);
assert
.
equal
(
model
.
children
[
'
g2
'
].
children
[
'
c2
'
].
children
[
'
c2.2
'
].
marker
.
count
,
1
);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录