Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
a0d62edb
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
未验证
提交
a0d62edb
编写于
10月 25, 2021
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
💄
上级
31662e1e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
7 deletion
+19
-7
src/vs/editor/common/services/getSemanticTokens.ts
src/vs/editor/common/services/getSemanticTokens.ts
+19
-7
未找到文件。
src/vs/editor/common/services/getSemanticTokens.ts
浏览文件 @
a0d62edb
...
...
@@ -14,7 +14,7 @@ import { assertType } from 'vs/base/common/types';
import
{
VSBuffer
}
from
'
vs/base/common/buffer
'
;
import
{
encodeSemanticTokensDto
}
from
'
vs/editor/common/services/semanticTokensDto
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
Emitter
,
Event
}
from
'
vs/base/common/event
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
DisposableStore
}
from
'
vs/base/common/lifecycle
'
;
export
function
isSemanticTokens
(
v
:
SemanticTokens
|
SemanticTokensEdits
):
v
is
SemanticTokens
{
...
...
@@ -43,10 +43,16 @@ export function getDocumentSemanticTokens(model: ITextModel, lastResultId: strin
}
class
CompositeDocumentSemanticTokensProvider
implements
DocumentSemanticTokensProvider
{
private
disposables
=
new
DisposableStore
();
private
didChangeEmitter
=
new
Emitter
<
void
>
();
private
readonly
disposables
=
new
DisposableStore
();
private
readonly
didChangeEmitter
=
this
.
disposables
.
add
(
new
Emitter
<
void
>
());
public
readonly
onDidChange
=
this
.
didChangeEmitter
.
event
;
private
lastUsedProvider
:
DocumentSemanticTokensProvider
|
undefined
=
undefined
;
private
static
providerToLastResult
=
new
WeakMap
<
DocumentSemanticTokensProvider
,
string
>
();
constructor
(
model
:
ITextModel
,
private
readonly
providerGroup
:
DocumentSemanticTokensProvider
[])
{
// Lifetime of this provider is tied to the text model
model
.
onWillDispose
(()
=>
this
.
disposables
.
clear
());
...
...
@@ -58,6 +64,7 @@ class CompositeDocumentSemanticTokensProvider implements DocumentSemanticTokensP
}
});
}
public
async
provideDocumentSemanticTokens
(
model
:
ITextModel
,
lastResultId
:
string
|
null
,
token
:
CancellationToken
):
Promise
<
SemanticTokens
|
SemanticTokensEdits
|
null
|
undefined
>
{
// Get tokens from the group all at the same time. Return the first
// that actually returned tokens
...
...
@@ -87,12 +94,11 @@ class CompositeDocumentSemanticTokensProvider implements DocumentSemanticTokensP
this
.
lastUsedProvider
=
this
.
providerGroup
[
hasTokensIndex
];
return
list
[
hasTokensIndex
];
}
public
get
onDidChange
():
Event
<
void
>
{
return
this
.
didChangeEmitter
.
event
;
}
public
getLegend
():
SemanticTokensLegend
{
return
this
.
lastUsedProvider
?.
getLegend
()
||
this
.
providerGroup
[
0
].
getLegend
();
}
public
releaseDocumentSemanticTokens
(
resultId
:
string
|
undefined
):
void
{
this
.
providerGroup
.
forEach
(
p
=>
{
// If this result is for this provider, release it
...
...
@@ -110,8 +116,13 @@ class CompositeDocumentSemanticTokensProvider implements DocumentSemanticTokensP
}
class
CompositeDocumentRangeSemanticTokensProvider
implements
DocumentRangeSemanticTokensProvider
{
private
lastUsedProvider
:
DocumentRangeSemanticTokensProvider
|
undefined
=
undefined
;
constructor
(
private
readonly
providerGroup
:
DocumentRangeSemanticTokensProvider
[])
{
}
constructor
(
private
readonly
providerGroup
:
DocumentRangeSemanticTokensProvider
[]
)
{
}
public
async
provideDocumentRangeSemanticTokens
(
model
:
ITextModel
,
range
:
Range
,
token
:
CancellationToken
):
Promise
<
SemanticTokens
|
null
|
undefined
>
{
// Get tokens from the group all at the same time. Return the first
// that actually returned tokens
...
...
@@ -130,6 +141,7 @@ class CompositeDocumentRangeSemanticTokensProvider implements DocumentRangeSeman
this
.
lastUsedProvider
=
this
.
providerGroup
[
hasTokensIndex
];
return
list
[
hasTokensIndex
];
}
getLegend
():
SemanticTokensLegend
{
return
this
.
lastUsedProvider
?.
getLegend
()
||
this
.
providerGroup
[
0
].
getLegend
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录