Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
ea995be3
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,发现更多精彩内容 >>
提交
ea995be3
编写于
2月 14, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make sure we send correctly normalized stacks on errors
上级
ba19df41
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
30 deletion
+56
-30
extensions/typescript-language-features/src/tsServer/server.ts
...sions/typescript-language-features/src/tsServer/server.ts
+56
-30
未找到文件。
extensions/typescript-language-features/src/tsServer/server.ts
浏览文件 @
ea995be3
...
...
@@ -27,17 +27,63 @@ import { RequestItem, RequestQueue, RequestQueueingType } from './requestQueue';
class
TypeScriptServerError
extends
Error
{
public
static
create
(
version
:
TypeScriptVersion
,
response
:
Proto
.
Response
,
):
TypeScriptServerError
{
const
parsedResult
=
TypeScriptServerError
.
parseErrorText
(
version
,
response
);
return
new
TypeScriptServerError
(
version
,
response
,
parsedResult
?
parsedResult
.
message
:
undefined
,
parsedResult
?
parsedResult
.
stack
:
undefined
);
}
constructor
(
version
:
TypeScriptVersion
,
public
readonly
response
:
Proto
.
Response
,
private
readonly
response
:
Proto
.
Response
,
public
readonly
serverMessage
:
string
|
undefined
,
public
readonly
serverStack
:
string
|
undefined
,
)
{
super
(
`TypeScript Server Error (
${
version
.
versionString
}
)\n
${
TypeScriptServerError
.
normalizeMessageStack
(
version
,
response
.
message
)}
`
);
super
(
`TypeScript Server Error (
${
version
.
versionString
}
)\n
${
serverMessage
}
\n
${
serverStack
}
`
);
}
public
get
serverErrorText
()
{
return
this
.
response
.
message
;
}
public
get
serverCommand
()
{
return
this
.
response
.
command
;
}
/**
* Given a `errorText` from a tsserver request indicating failure in handling a request,
* prepares a payload for telemetry-logging.
*/
private
static
parseErrorText
(
version
:
TypeScriptVersion
,
response
:
Proto
.
Response
,
)
{
const
errorText
=
response
.
message
;
if
(
errorText
)
{
const
errorPrefix
=
'
Error processing request.
'
;
if
(
errorText
.
startsWith
(
errorPrefix
))
{
const
prefixFreeErrorText
=
errorText
.
substr
(
errorPrefix
.
length
);
const
newlineIndex
=
prefixFreeErrorText
.
indexOf
(
'
\n
'
);
if
(
newlineIndex
>=
0
)
{
// Newline expected between message and stack.
return
{
message
:
prefixFreeErrorText
.
substring
(
0
,
newlineIndex
),
stack
:
TypeScriptServerError
.
normalizeMessageStack
(
version
,
prefixFreeErrorText
.
substring
(
newlineIndex
+
1
))
};
}
}
}
return
undefined
;
}
/**
* Try to replace full TS Server paths with 'tsserver.js' so that we don't have to post process the data as much
*/
p
ublic
static
normalizeMessageStack
(
p
rivate
static
normalizeMessageStack
(
version
:
TypeScriptVersion
,
message
:
string
|
undefined
,
)
{
...
...
@@ -317,7 +363,7 @@ export class TypeScriptServer extends Disposable {
// Special case where response itself is successful but there is not any data to return.
callback
.
onSuccess
(
ServerResponse
.
NoContent
);
}
else
{
callback
.
onError
(
new
TypeScriptServerError
(
this
.
_version
,
response
));
callback
.
onError
(
TypeScriptServerError
.
create
(
this
.
_version
,
response
));
}
}
...
...
@@ -344,7 +390,6 @@ export class TypeScriptServer extends Disposable {
}).
catch
((
err
:
Error
)
=>
{
if
(
err
instanceof
TypeScriptServerError
)
{
if
(
!
executeInfo
.
token
||
!
executeInfo
.
token
.
isCancellationRequested
)
{
const
properties
=
this
.
parseErrorText
(
err
.
response
.
message
,
err
.
response
.
command
);
/* __GDPR__
"languageServiceErrorResponse" : {
"command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
...
...
@@ -356,7 +401,12 @@ export class TypeScriptServer extends Disposable {
]
}
*/
this
.
_telemetryReporter
.
logTelemetry
(
'
languageServiceErrorResponse
'
,
properties
);
this
.
_telemetryReporter
.
logTelemetry
(
'
languageServiceErrorResponse
'
,
{
command
:
err
.
serverCommand
,
message
:
err
.
serverMessage
||
''
,
stack
:
err
.
serverStack
||
''
,
errortext
:
err
.
serverErrorText
||
''
,
});
}
}
...
...
@@ -370,30 +420,6 @@ export class TypeScriptServer extends Disposable {
return
result
;
}
/**
* Given a `errorText` from a tsserver request indicating failure in handling a request,
* prepares a payload for telemetry-logging.
*/
private
parseErrorText
(
errorText
:
string
|
undefined
,
command
:
string
)
{
const
properties
:
ObjectMap
<
string
>
=
Object
.
create
(
null
);
properties
[
'
command
'
]
=
command
;
if
(
errorText
)
{
properties
[
'
errorText
'
]
=
errorText
;
const
errorPrefix
=
'
Error processing request.
'
;
if
(
errorText
.
startsWith
(
errorPrefix
))
{
const
prefixFreeErrorText
=
errorText
.
substr
(
errorPrefix
.
length
);
const
newlineIndex
=
prefixFreeErrorText
.
indexOf
(
'
\n
'
);
if
(
newlineIndex
>=
0
)
{
// Newline expected between message and stack.
properties
[
'
message
'
]
=
prefixFreeErrorText
.
substring
(
0
,
newlineIndex
);
properties
[
'
stack
'
]
=
TypeScriptServerError
.
normalizeMessageStack
(
this
.
_version
,
prefixFreeErrorText
.
substring
(
newlineIndex
+
1
));
}
}
}
return
properties
;
}
private
sendNextRequests
():
void
{
while
(
this
.
_pendingResponses
.
size
===
0
&&
this
.
_requestQueue
.
length
>
0
)
{
const
item
=
this
.
_requestQueue
.
dequeue
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录