Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c0cb5cd5
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,发现更多精彩内容 >>
提交
c0cb5cd5
编写于
2月 01, 2018
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Defer quick fix all ts call
Fixes #42764
上级
ae07ba0b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
58 addition
and
34 deletion
+58
-34
extensions/typescript/src/features/quickFixProvider.ts
extensions/typescript/src/features/quickFixProvider.ts
+58
-34
未找到文件。
extensions/typescript/src/features/quickFixProvider.ts
浏览文件 @
c0cb5cd5
...
...
@@ -32,6 +32,49 @@ class ApplyCodeActionCommand implements Command {
}
}
class
ApplyFixAllCodeAction
implements
Command
{
public
static
readonly
ID
=
'
_typescript.applyFixAllCodeAction
'
;
public
readonly
id
=
ApplyFixAllCodeAction
.
ID
;
constructor
(
private
readonly
client
:
ITypeScriptServiceClient
)
{
}
public
async
execute
(
file
:
string
,
tsAction
:
Proto
.
CodeFixAction
,
):
Promise
<
void
>
{
if
(
!
tsAction
.
fixId
)
{
return
;
}
const
args
:
Proto
.
GetCombinedCodeFixRequestArgs
=
{
scope
:
{
type
:
'
file
'
,
args
:
{
file
}
},
fixId
:
tsAction
.
fixId
};
try
{
const
combinedCodeFixesResponse
=
await
this
.
client
.
execute
(
'
getCombinedCodeFix
'
,
args
);
if
(
!
combinedCodeFixesResponse
.
body
)
{
return
;
}
const
edit
=
createWorkspaceEditFromFileCodeEdits
(
this
.
client
,
combinedCodeFixesResponse
.
body
.
changes
);
await
vscode
.
workspace
.
applyEdit
(
edit
);
if
(
combinedCodeFixesResponse
.
command
)
{
await
vscode
.
commands
.
executeCommand
(
ApplyCodeActionCommand
.
ID
,
combinedCodeFixesResponse
.
command
);
}
}
catch
{
// noop
}
}
}
class
SupportedCodeActionProvider
{
private
_supportedCodeActions
?:
Thenable
<
Set
<
number
>>
;
...
...
@@ -66,6 +109,8 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv
private
readonly
diagnosticsManager
:
DiagnosticsManager
)
{
commandManager
.
register
(
new
ApplyCodeActionCommand
(
client
));
commandManager
.
register
(
new
ApplyFixAllCodeAction
(
client
));
this
.
supportedCodeActionProvider
=
new
SupportedCodeActionProvider
(
client
);
}
...
...
@@ -112,7 +157,7 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv
if
(
codeFixesResponse
.
body
)
{
const
results
:
vscode
.
CodeAction
[]
=
[];
for
(
const
tsCodeFix
of
codeFixesResponse
.
body
)
{
results
.
push
(...
await
this
.
getAllFixesForTsCodeAction
(
document
,
file
,
diagnostic
,
tsCodeFix
,
token
));
results
.
push
(...
await
this
.
getAllFixesForTsCodeAction
(
document
,
file
,
diagnostic
,
tsCodeFix
));
}
return
results
;
}
...
...
@@ -123,11 +168,10 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv
document
:
vscode
.
TextDocument
,
file
:
string
,
diagnostic
:
vscode
.
Diagnostic
,
tsAction
:
Proto
.
CodeFixAction
,
token
:
vscode
.
CancellationToken
tsAction
:
Proto
.
CodeFixAction
):
Promise
<
Iterable
<
vscode
.
CodeAction
>>
{
const
singleFix
=
this
.
getSingleFixForTsCodeAction
(
diagnostic
,
tsAction
);
const
fixAll
=
await
this
.
getFixAllForTsCodeAction
(
document
,
file
,
diagnostic
,
tsAction
,
token
);
const
fixAll
=
await
this
.
getFixAllForTsCodeAction
(
document
,
file
,
diagnostic
,
tsAction
);
return
fixAll
?
[
singleFix
,
fixAll
]
:
[
singleFix
];
}
...
...
@@ -153,7 +197,6 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv
file
:
string
,
diagnostic
:
vscode
.
Diagnostic
,
tsAction
:
Proto
.
CodeFixAction
,
token
:
vscode
.
CancellationToken
):
Promise
<
vscode
.
CodeAction
|
undefined
>
{
if
(
!
tsAction
.
fixId
||
!
this
.
client
.
apiVersion
.
has270Features
())
{
return
undefined
;
...
...
@@ -164,35 +207,16 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv
return
;
}
const
args
:
Proto
.
GetCombinedCodeFixRequestArgs
=
{
scope
:
{
type
:
'
file
'
,
args
:
{
file
}
},
fixId
:
tsAction
.
fixId
};
try
{
const
combinedCodeFixesResponse
=
await
this
.
client
.
execute
(
'
getCombinedCodeFix
'
,
args
,
token
);
if
(
!
combinedCodeFixesResponse
.
body
)
{
return
undefined
;
}
const
action
=
new
vscode
.
CodeAction
(
localize
(
'
fixAllInFileLabel
'
,
'
{0} (Fix all in file)
'
,
tsAction
.
description
),
vscode
.
CodeActionKind
.
QuickFix
);
action
.
diagnostics
=
[
diagnostic
];
const
codeAction
=
new
vscode
.
CodeAction
(
localize
(
'
fixAllInFileLabel
'
,
'
{0} (Fix all in file)
'
,
tsAction
.
description
),
vscode
.
CodeActionKind
.
QuickFix
);
codeAction
.
edit
=
createWorkspaceEditFromFileCodeEdits
(
this
.
client
,
combinedCodeFixesResponse
.
body
.
changes
);
codeAction
.
diagnostics
=
[
diagnostic
];
if
(
tsAction
.
commands
)
{
codeAction
.
command
=
{
command
:
ApplyCodeActionCommand
.
ID
,
arguments
:
[
tsAction
],
title
:
tsAction
.
description
};
}
return
codeAction
;
}
catch
{
return
undefined
;
}
action
.
command
=
{
command
:
ApplyFixAllCodeAction
.
ID
,
arguments
:
[
file
,
tsAction
],
title
:
''
};
return
action
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录