Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
69c9edeb
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 搜索 >>
提交
69c9edeb
编写于
8月 18, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
prefix stack with extension id, #32766
上级
d30567bd
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
68 addition
and
28 deletion
+68
-28
src/vs/base/common/errors.ts
src/vs/base/common/errors.ts
+18
-0
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+1
-25
src/vs/workbench/api/node/extHostExtensionService.ts
src/vs/workbench/api/node/extHostExtensionService.ts
+28
-1
src/vs/workbench/node/extensionHostMain.ts
src/vs/workbench/node/extensionHostMain.ts
+21
-2
未找到文件。
src/vs/base/common/errors.ts
浏览文件 @
69c9edeb
...
...
@@ -168,6 +168,24 @@ export function transformErrorForSerialization(error: any): any {
return
error
;
}
// see https://github.com/v8/v8/wiki/Stack%20Trace%20API#basic-stack-traces
export
interface
V8CallSite
{
getThis
():
any
;
getTypeName
():
string
;
getFunction
():
string
;
getFunctionName
():
string
;
getMethodName
():
string
;
getFileName
():
string
;
getLineNumber
():
number
;
getColumnNumber
():
number
;
getEvalOrigin
():
string
;
isToplevel
():
boolean
;
isEval
():
boolean
;
isNative
():
boolean
;
isConstructor
():
boolean
;
toString
():
string
;
}
const
canceledName
=
'
Canceled
'
;
/**
...
...
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
69c9edeb
...
...
@@ -47,7 +47,6 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import
{
CancellationTokenSource
}
from
'
vs/base/common/cancellation
'
;
import
*
as
vscode
from
'
vscode
'
;
import
*
as
paths
from
'
vs/base/common/paths
'
;
import
{
realpath
}
from
'
fs
'
;
import
{
MainContext
,
ExtHostContext
,
IInitData
}
from
'
./extHost.protocol
'
;
import
*
as
languageConfiguration
from
'
vs/editor/common/modes/languageConfiguration
'
;
import
{
TextEditorCursorStyle
}
from
'
vs/editor/common/config/editorOptions
'
;
...
...
@@ -621,30 +620,7 @@ class Extension<T> implements vscode.Extension<T> {
}
export
function
initializeExtensionApi
(
extensionService
:
ExtHostExtensionService
,
apiFactory
:
IExtensionApiFactory
):
TPromise
<
void
>
{
return
createExtensionPathIndex
(
extensionService
).
then
(
trie
=>
defineAPI
(
apiFactory
,
trie
));
}
function
createExtensionPathIndex
(
extensionService
:
ExtHostExtensionService
):
TPromise
<
TrieMap
<
IExtensionDescription
>>
{
// create trie to enable fast 'filename -> extension id' look up
const
trie
=
new
TrieMap
<
IExtensionDescription
>
();
const
extensions
=
extensionService
.
getAllExtensionDescriptions
().
map
(
ext
=>
{
if
(
!
ext
.
main
)
{
return
undefined
;
}
return
new
TPromise
((
resolve
,
reject
)
=>
{
realpath
(
ext
.
extensionFolderPath
,
(
err
,
path
)
=>
{
if
(
err
)
{
reject
(
err
);
}
else
{
trie
.
insert
(
path
,
ext
);
resolve
(
void
0
);
}
});
});
});
return
TPromise
.
join
(
extensions
).
then
(()
=>
trie
);
return
extensionService
.
getExtensionPathIndex
().
then
(
trie
=>
defineAPI
(
apiFactory
,
trie
));
}
function
defineAPI
(
factory
:
IExtensionApiFactory
,
extensionPaths
:
TrieMap
<
IExtensionDescription
>
):
void
{
...
...
src/vs/workbench/api/node/extHostExtensionService.ts
浏览文件 @
69c9edeb
...
...
@@ -18,6 +18,8 @@ import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironm
import
{
IExtensionMemento
,
ExtensionsActivator
,
ActivatedExtension
,
IExtensionAPI
,
IExtensionContext
,
EmptyExtension
,
IExtensionModule
}
from
"
vs/workbench/api/node/extHostExtensionActivator
"
;
import
{
Barrier
}
from
"
vs/workbench/services/extensions/node/barrier
"
;
import
{
ExtHostThreadService
}
from
"
vs/workbench/services/thread/node/extHostThreadService
"
;
import
{
realpath
}
from
'
fs
'
;
import
{
TrieMap
}
from
"
vs/base/common/map
"
;
class
ExtensionMemento
implements
IExtensionMemento
{
...
...
@@ -115,7 +117,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
private
readonly
_storagePath
:
ExtensionStoragePath
;
private
readonly
_proxy
:
MainThreadExtensionServiceShape
;
private
_activator
:
ExtensionsActivator
;
private
_extensionPathIndex
:
TPromise
<
TrieMap
<
IExtensionDescription
>>
;
/**
* This class is constructed manually because it is a service, so it doesn't use any ctor injection
*/
...
...
@@ -202,6 +204,31 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
}
}
// create trie to enable fast 'filename -> extension id' look up
public
getExtensionPathIndex
():
TPromise
<
TrieMap
<
IExtensionDescription
>>
{
if
(
!
this
.
_extensionPathIndex
)
{
const
trie
=
new
TrieMap
<
IExtensionDescription
>
();
const
extensions
=
this
.
getAllExtensionDescriptions
().
map
(
ext
=>
{
if
(
!
ext
.
main
)
{
return
undefined
;
}
return
new
TPromise
((
resolve
,
reject
)
=>
{
realpath
(
ext
.
extensionFolderPath
,
(
err
,
path
)
=>
{
if
(
err
)
{
reject
(
err
);
}
else
{
trie
.
insert
(
path
,
ext
);
resolve
(
void
0
);
}
});
});
});
this
.
_extensionPathIndex
=
TPromise
.
join
(
extensions
).
then
(()
=>
trie
);
}
return
this
.
_extensionPathIndex
;
}
public
deactivate
(
extensionId
:
string
):
TPromise
<
void
>
{
let
result
:
TPromise
<
void
>
=
TPromise
.
as
(
void
0
);
...
...
src/vs/workbench/node/extensionHostMain.ts
浏览文件 @
69c9edeb
...
...
@@ -12,6 +12,7 @@ import { join } from 'path';
import
{
RPCProtocol
}
from
'
vs/workbench/services/extensions/node/rpcProtocol
'
;
import
{
ExtHostExtensionService
}
from
'
vs/workbench/api/node/extHostExtensionService
'
;
import
{
ExtHostThreadService
}
from
'
vs/workbench/services/thread/node/extHostThreadService
'
;
import
{
IExtensionDescription
}
from
"
vs/platform/extensions/common/extensions
"
;
import
{
QueryType
,
ISearchQuery
}
from
'
vs/platform/search/common/search
'
;
import
{
DiskSearch
}
from
'
vs/workbench/services/search/node/searchService
'
;
import
{
RemoteTelemetryService
}
from
'
vs/workbench/api/node/extHostTelemetry
'
;
...
...
@@ -49,9 +50,27 @@ export class ExtensionHostMain {
const
telemetryService
=
new
RemoteTelemetryService
(
'
pluginHostTelemetry
'
,
threadService
);
this
.
_extensionService
=
new
ExtHostExtensionService
(
initData
,
threadService
,
telemetryService
);
// Error forwarding
// error forwarding and stack trace scanning
this
.
_extensionService
.
getExtensionPathIndex
().
then
(
map
=>
{
(
<
any
>
Error
).
prepareStackTrace
=
(
error
:
Error
,
stackTrace
:
errors
.
V8CallSite
[])
=>
{
let
stackTraceMessage
=
''
;
let
extension
:
IExtensionDescription
;
for
(
const
call
of
stackTrace
)
{
stackTraceMessage
+=
`\n\tat
${
call
.
toString
()}
`
;
extension
=
extension
||
map
.
findSubstr
(
stackTrace
[
0
].
getFileName
());
}
let
name
=
error
.
name
||
'
Error
'
;
if
(
extension
)
{
name
=
`[
${
extension
.
id
}
]
${
name
}
`
;
}
return
`
${
name
}
:
${
error
.
message
}${
stackTraceMessage
}
`
;
};
});
const
mainThreadErrors
=
threadService
.
get
(
MainContext
.
MainThreadErrors
);
errors
.
setUnexpectedErrorHandler
(
err
=>
mainThreadErrors
.
$onUnexpectedExtHostError
(
errors
.
transformErrorForSerialization
(
err
)));
errors
.
setUnexpectedErrorHandler
(
err
=>
{
const
data
=
errors
.
transformErrorForSerialization
(
err
);
mainThreadErrors
.
$onUnexpectedExtHostError
(
data
);
});
// Configure the watchdog to kill our process if the JS event loop is unresponsive for more than 10s
if
(
!
initData
.
environment
.
isExtensionDevelopmentDebug
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录