Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
001cff3e
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,发现更多精彩内容 >>
提交
001cff3e
编写于
8月 23, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
know hover providers using command links, #29076
上级
e8f7ac78
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
41 addition
and
12 deletion
+41
-12
src/vs/base/common/htmlContent.ts
src/vs/base/common/htmlContent.ts
+14
-0
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+1
-1
src/vs/workbench/api/node/extHostLanguageFeatures.ts
src/vs/workbench/api/node/extHostLanguageFeatures.ts
+26
-11
未找到文件。
src/vs/base/common/htmlContent.ts
浏览文件 @
001cff3e
...
...
@@ -6,6 +6,7 @@
'
use strict
'
;
import
{
equals
}
from
'
vs/base/common/arrays
'
;
import
{
marked
}
from
'
vs/base/common/marked/marked
'
;
/**
* MarkedString can be used to render human readable text. It is either a markdown string
...
...
@@ -38,3 +39,16 @@ export function removeMarkdownEscapes(text: string): string {
}
return
text
.
replace
(
/
\\([\\
`*_{}[
\]
()#+
\-
.!
])
/g
,
'
$1
'
);
}
export
function
containsCommandLink
(
value
:
MarkedString
):
boolean
{
let
uses
=
false
;
const
renderer
=
new
marked
.
Renderer
();
renderer
.
link
=
(
href
,
title
,
text
):
string
=>
{
if
(
href
.
match
(
/^command:/i
))
{
uses
=
true
;
}
return
'
link
'
;
};
marked
(
value
,
{
renderer
});
return
uses
;
}
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
001cff3e
...
...
@@ -242,7 +242,7 @@ export function createApiFactory(
return
languageFeatures
.
registerTypeDefinitionProvider
(
selector
,
provider
);
},
registerHoverProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
HoverProvider
):
vscode
.
Disposable
{
return
languageFeatures
.
registerHoverProvider
(
selector
,
provider
);
return
languageFeatures
.
registerHoverProvider
(
selector
,
provider
,
extension
.
id
);
},
registerDocumentHighlightProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DocumentHighlightProvider
):
vscode
.
Disposable
{
return
languageFeatures
.
registerDocumentHighlightProvider
(
selector
,
provider
);
...
...
src/vs/workbench/api/node/extHostLanguageFeatures.ts
浏览文件 @
001cff3e
...
...
@@ -18,10 +18,13 @@ import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/node/extHos
import
{
ExtHostDiagnostics
}
from
'
vs/workbench/api/node/extHostDiagnostics
'
;
import
{
IWorkspaceSymbolProvider
}
from
'
vs/workbench/parts/search/common/search
'
;
import
{
asWinJsPromise
}
from
'
vs/base/common/async
'
;
import
{
MainContext
,
MainThreadLanguageFeaturesShape
,
ExtHostLanguageFeaturesShape
,
ObjectIdentifier
,
IRawColorInfo
,
IRawColorFormatMap
,
IMainContext
}
from
'
./extHost.protocol
'
;
import
{
MainContext
,
MainThread
TelemetryShape
,
MainThread
LanguageFeaturesShape
,
ExtHostLanguageFeaturesShape
,
ObjectIdentifier
,
IRawColorInfo
,
IRawColorFormatMap
,
IMainContext
}
from
'
./extHost.protocol
'
;
import
{
regExpLeadsToEndlessLoop
}
from
'
vs/base/common/strings
'
;
import
{
IPosition
}
from
'
vs/editor/common/core/position
'
;
import
{
IRange
}
from
'
vs/editor/common/core/range
'
;
import
{
containsCommandLink
}
from
'
vs/base/common/htmlContent
'
;
import
{
isFalsyOrEmpty
}
from
'
vs/base/common/arrays
'
;
import
{
once
}
from
'
vs/base/common/functional
'
;
// --- adapter
...
...
@@ -173,12 +176,12 @@ class TypeDefinitionAdapter {
class
HoverAdapter
{
private
_documents
:
ExtHostDocuments
;
private
_provider
:
vscode
.
HoverProvider
;
constructor
(
documents
:
ExtHostDocuments
,
provider
:
vscode
.
HoverProvider
)
{
this
.
_documents
=
documents
;
this
.
_provider
=
provider
;
constructor
(
private
readonly
_documents
:
ExtHostDocuments
,
private
readonly
_provider
:
vscode
.
HoverProvider
,
private
readonly
_telemetryLog
:
(
name
:
string
,
data
:
object
)
=>
void
,
)
{
//
}
public
provideHover
(
resource
:
URI
,
position
:
IPosition
):
TPromise
<
modes
.
Hover
>
{
...
...
@@ -187,7 +190,7 @@ class HoverAdapter {
let
pos
=
TypeConverters
.
toPosition
(
position
);
return
asWinJsPromise
(
token
=>
this
.
_provider
.
provideHover
(
doc
,
pos
,
token
)).
then
(
value
=>
{
if
(
!
value
)
{
if
(
!
value
||
isFalsyOrEmpty
(
value
.
contents
)
)
{
return
undefined
;
}
if
(
!
value
.
range
)
{
...
...
@@ -197,7 +200,14 @@ class HoverAdapter {
value
.
range
=
new
Range
(
pos
,
pos
);
}
return
TypeConverters
.
fromHover
(
value
);
const
result
=
TypeConverters
.
fromHover
(
value
);
// we wanna know which extension uses command links
// because that is a potential trick-attack on users
if
(
result
.
contents
.
some
(
containsCommandLink
))
{
this
.
_telemetryLog
(
'
usesCommandLink
'
,
{
from
:
'
hover
'
});
}
return
result
;
});
}
}
...
...
@@ -744,6 +754,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
private
static
_handlePool
:
number
=
0
;
private
_proxy
:
MainThreadLanguageFeaturesShape
;
private
_telemetry
:
MainThreadTelemetryShape
;
private
_documents
:
ExtHostDocuments
;
private
_commands
:
ExtHostCommands
;
private
_heapService
:
ExtHostHeapService
;
...
...
@@ -759,6 +770,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
diagnostics
:
ExtHostDiagnostics
)
{
this
.
_proxy
=
mainContext
.
get
(
MainContext
.
MainThreadLanguageFeatures
);
this
.
_telemetry
=
mainContext
.
get
(
MainContext
.
MainThreadTelemetry
);
this
.
_documents
=
documents
;
this
.
_commands
=
commands
;
this
.
_heapService
=
heapMonitor
;
...
...
@@ -860,9 +872,12 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
// --- extra info
registerHoverProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
HoverProvider
):
vscode
.
Disposable
{
registerHoverProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
HoverProvider
,
extensionId
?:
string
):
vscode
.
Disposable
{
const
handle
=
this
.
_nextHandle
();
this
.
_adapter
.
set
(
handle
,
new
HoverAdapter
(
this
.
_documents
,
provider
));
this
.
_adapter
.
set
(
handle
,
new
HoverAdapter
(
this
.
_documents
,
provider
,
once
((
name
,
data
)
=>
{
data
[
'
extension
'
]
=
extensionId
;
this
.
_telemetry
.
$publicLog
(
name
,
data
);
})));
this
.
_proxy
.
$registerHoverProvider
(
handle
,
selector
);
return
this
.
_createDisposable
(
handle
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录