Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c2114abf
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 搜索 >>
提交
c2114abf
编写于
3月 14, 2019
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix strict null checks in extHostTerminalService
Fixes #70415
上级
d0e0aa2d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
30 deletion
+40
-30
src/tsconfig.strictNullChecks.json
src/tsconfig.strictNullChecks.json
+1
-0
src/vs/workbench/api/node/extHost.protocol.ts
src/vs/workbench/api/node/extHost.protocol.ts
+1
-1
src/vs/workbench/api/node/extHostTerminalService.ts
src/vs/workbench/api/node/extHostTerminalService.ts
+38
-29
未找到文件。
src/tsconfig.strictNullChecks.json
浏览文件 @
c2114abf
...
@@ -118,6 +118,7 @@
...
@@ -118,6 +118,7 @@
"./vs/workbench/api/node/extHostStatusBar.ts"
,
"./vs/workbench/api/node/extHostStatusBar.ts"
,
"./vs/workbench/api/node/extHostStorage.ts"
,
"./vs/workbench/api/node/extHostStorage.ts"
,
//
"./vs/workbench/api/node/extHostTask.ts"
,
//
"./vs/workbench/api/node/extHostTask.ts"
,
"./vs/workbench/api/node/extHostTerminalService.ts"
,
"./vs/workbench/api/node/extHostTextEditor.ts"
,
"./vs/workbench/api/node/extHostTextEditor.ts"
,
"./vs/workbench/api/node/extHostTextEditors.ts"
,
"./vs/workbench/api/node/extHostTextEditors.ts"
,
"./vs/workbench/api/node/extHostTypeConverters.ts"
,
"./vs/workbench/api/node/extHostTypeConverters.ts"
,
...
...
src/vs/workbench/api/node/extHost.protocol.ts
浏览文件 @
c2114abf
...
@@ -370,7 +370,7 @@ export interface MainThreadProgressShape extends IDisposable {
...
@@ -370,7 +370,7 @@ export interface MainThreadProgressShape extends IDisposable {
}
}
export
interface
MainThreadTerminalServiceShape
extends
IDisposable
{
export
interface
MainThreadTerminalServiceShape
extends
IDisposable
{
$createTerminal
(
name
?:
string
,
shellPath
?:
string
,
shellArgs
?:
string
[],
cwd
?:
string
|
UriComponents
,
env
?:
{
[
key
:
string
]:
string
},
waitOnExit
?:
boolean
,
strictEnv
?:
boolean
):
Promise
<
{
id
:
number
,
name
:
string
}
>
;
$createTerminal
(
name
?:
string
,
shellPath
?:
string
,
shellArgs
?:
string
[],
cwd
?:
string
|
UriComponents
,
env
?:
{
[
key
:
string
]:
string
|
null
},
waitOnExit
?:
boolean
,
strictEnv
?:
boolean
):
Promise
<
{
id
:
number
,
name
:
string
}
>
;
$createTerminalRenderer
(
name
:
string
):
Promise
<
number
>
;
$createTerminalRenderer
(
name
:
string
):
Promise
<
number
>
;
$dispose
(
terminalId
:
number
):
void
;
$dispose
(
terminalId
:
number
):
void
;
$hide
(
terminalId
:
number
):
void
;
$hide
(
terminalId
:
number
):
void
;
...
...
src/vs/workbench/api/node/extHostTerminalService.ts
浏览文件 @
c2114abf
...
@@ -74,9 +74,9 @@ export class BaseExtHostTerminal {
...
@@ -74,9 +74,9 @@ export class BaseExtHostTerminal {
}
}
export
class
ExtHostTerminal
extends
BaseExtHostTerminal
implements
vscode
.
Terminal
{
export
class
ExtHostTerminal
extends
BaseExtHostTerminal
implements
vscode
.
Terminal
{
private
_pidPromise
:
Promise
<
number
>
;
private
_pidPromise
:
Promise
<
number
|
undefined
>
;
private
_pidPromiseComplete
:
(
value
:
number
)
=>
any
;
private
_cols
:
number
|
undefined
;
private
_cols
:
number
|
undefined
;
private
_pidPromiseComplete
:
((
value
:
number
|
undefined
)
=>
any
)
|
null
;
private
_rows
:
number
|
undefined
;
private
_rows
:
number
|
undefined
;
private
readonly
_onData
=
new
Emitter
<
string
>
();
private
readonly
_onData
=
new
Emitter
<
string
>
();
...
@@ -90,7 +90,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -90,7 +90,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
constructor
(
constructor
(
proxy
:
MainThreadTerminalServiceShape
,
proxy
:
MainThreadTerminalServiceShape
,
private
_name
:
string
,
private
_name
?
:
string
,
id
?:
number
,
id
?:
number
,
pid
?:
number
pid
?:
number
)
{
)
{
...
@@ -108,7 +108,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -108,7 +108,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
shellPath
?:
string
,
shellPath
?:
string
,
shellArgs
?:
string
[],
shellArgs
?:
string
[],
cwd
?:
string
|
URI
,
cwd
?:
string
|
URI
,
env
?:
{
[
key
:
string
]:
string
},
env
?:
{
[
key
:
string
]:
string
|
null
},
waitOnExit
?:
boolean
,
waitOnExit
?:
boolean
,
strictEnv
?:
boolean
strictEnv
?:
boolean
):
void
{
):
void
{
...
@@ -119,7 +119,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -119,7 +119,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
}
}
public
get
name
():
string
{
public
get
name
():
string
{
return
this
.
_name
;
return
this
.
_name
||
''
;
}
}
public
set
name
(
name
:
string
)
{
public
set
name
(
name
:
string
)
{
...
@@ -127,7 +127,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -127,7 +127,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
}
}
public
get
dimensions
():
vscode
.
TerminalDimensions
|
undefined
{
public
get
dimensions
():
vscode
.
TerminalDimensions
|
undefined
{
if
(
this
.
_cols
===
undefined
&&
this
.
_rows
===
undefined
)
{
if
(
this
.
_cols
===
undefined
||
this
.
_rows
===
undefined
)
{
return
undefined
;
return
undefined
;
}
}
return
{
return
{
...
@@ -146,7 +146,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -146,7 +146,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
return
true
;
return
true
;
}
}
public
get
processId
():
Promise
<
number
>
{
public
get
processId
():
Promise
<
number
|
undefined
>
{
return
this
.
_pidPromise
;
return
this
.
_pidPromise
;
}
}
...
@@ -165,7 +165,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
...
@@ -165,7 +165,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
this
.
_queueApiRequest
(
this
.
_proxy
.
$hide
,
[]);
this
.
_queueApiRequest
(
this
.
_proxy
.
$hide
,
[]);
}
}
public
_setProcessId
(
processId
:
number
):
void
{
public
_setProcessId
(
processId
:
number
|
undefined
):
void
{
// The event may fire 2 times when the panel is restored
// The event may fire 2 times when the panel is restored
if
(
this
.
_pidPromiseComplete
)
{
if
(
this
.
_pidPromiseComplete
)
{
this
.
_pidPromiseComplete
(
processId
);
this
.
_pidPromiseComplete
(
processId
);
...
@@ -203,15 +203,15 @@ export class ExtHostTerminalRenderer extends BaseExtHostTerminal implements vsco
...
@@ -203,15 +203,15 @@ export class ExtHostTerminalRenderer extends BaseExtHostTerminal implements vsco
}
}
private
_dimensions
:
vscode
.
TerminalDimensions
|
undefined
;
private
_dimensions
:
vscode
.
TerminalDimensions
|
undefined
;
public
get
dimensions
():
vscode
.
TerminalDimensions
{
return
this
.
_dimensions
;
}
public
get
dimensions
():
vscode
.
TerminalDimensions
|
undefined
{
return
this
.
_dimensions
;
}
public
set
dimensions
(
dimensions
:
vscode
.
TerminalDimensions
)
{
public
set
dimensions
(
dimensions
:
vscode
.
TerminalDimensions
|
undefined
)
{
this
.
_checkDisposed
();
this
.
_checkDisposed
();
this
.
_dimensions
=
dimensions
;
this
.
_dimensions
=
dimensions
;
this
.
_queueApiRequest
(
this
.
_proxy
.
$terminalRendererSetDimensions
,
[
dimensions
]);
this
.
_queueApiRequest
(
this
.
_proxy
.
$terminalRendererSetDimensions
,
[
dimensions
]);
}
}
private
_maximumDimensions
:
vscode
.
TerminalDimensions
;
private
_maximumDimensions
:
vscode
.
TerminalDimensions
|
undefined
;
public
get
maximumDimensions
():
vscode
.
TerminalDimensions
{
public
get
maximumDimensions
():
vscode
.
TerminalDimensions
|
undefined
{
if
(
!
this
.
_maximumDimensions
)
{
if
(
!
this
.
_maximumDimensions
)
{
return
undefined
;
return
undefined
;
}
}
...
@@ -259,20 +259,21 @@ export class ExtHostTerminalRenderer extends BaseExtHostTerminal implements vsco
...
@@ -259,20 +259,21 @@ export class ExtHostTerminalRenderer extends BaseExtHostTerminal implements vsco
if
(
this
.
_maximumDimensions
&&
this
.
_maximumDimensions
.
columns
===
columns
&&
this
.
_maximumDimensions
.
rows
===
rows
)
{
if
(
this
.
_maximumDimensions
&&
this
.
_maximumDimensions
.
columns
===
columns
&&
this
.
_maximumDimensions
.
rows
===
rows
)
{
return
;
return
;
}
}
this
.
_maximumDimensions
=
{
columns
,
rows
};
const
newValue
=
{
columns
,
rows
};
this
.
_onDidChangeMaximumDimensions
.
fire
(
this
.
maximumDimensions
);
this
.
_maximumDimensions
=
newValue
;
this
.
_onDidChangeMaximumDimensions
.
fire
(
newValue
);
}
}
}
}
export
class
ExtHostTerminalService
implements
ExtHostTerminalServiceShape
{
export
class
ExtHostTerminalService
implements
ExtHostTerminalServiceShape
{
private
_proxy
:
MainThreadTerminalServiceShape
;
private
_proxy
:
MainThreadTerminalServiceShape
;
private
_activeTerminal
:
ExtHostTerminal
;
private
_activeTerminal
:
ExtHostTerminal
|
undefined
;
private
_terminals
:
ExtHostTerminal
[]
=
[];
private
_terminals
:
ExtHostTerminal
[]
=
[];
private
_terminalProcesses
:
{
[
id
:
number
]:
TerminalProcess
}
=
{};
private
_terminalProcesses
:
{
[
id
:
number
]:
TerminalProcess
}
=
{};
private
_terminalRenderers
:
ExtHostTerminalRenderer
[]
=
[];
private
_terminalRenderers
:
ExtHostTerminalRenderer
[]
=
[];
private
_getTerminalPromises
:
{
[
id
:
number
]:
Promise
<
ExtHostTerminal
>
}
=
{};
private
_getTerminalPromises
:
{
[
id
:
number
]:
Promise
<
ExtHostTerminal
>
}
=
{};
public
get
activeTerminal
():
ExtHostTerminal
{
return
this
.
_activeTerminal
;
}
public
get
activeTerminal
():
ExtHostTerminal
|
undefined
{
return
this
.
_activeTerminal
;
}
public
get
terminals
():
ExtHostTerminal
[]
{
return
this
.
_terminals
;
}
public
get
terminals
():
ExtHostTerminal
[]
{
return
this
.
_terminals
;
}
private
readonly
_onDidCloseTerminal
:
Emitter
<
vscode
.
Terminal
>
=
new
Emitter
<
vscode
.
Terminal
>
();
private
readonly
_onDidCloseTerminal
:
Emitter
<
vscode
.
Terminal
>
=
new
Emitter
<
vscode
.
Terminal
>
();
...
@@ -326,6 +327,9 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -326,6 +327,9 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
}
}
const
terminal
=
this
.
_getTerminalById
(
id
);
const
terminal
=
this
.
_getTerminalById
(
id
);
if
(
!
terminal
)
{
throw
new
Error
(
`Cannot resolve terminal renderer for terminal id
${
id
}
`
);
}
const
renderer
=
new
ExtHostTerminalRenderer
(
this
.
_proxy
,
terminal
.
name
,
terminal
,
terminal
.
_id
);
const
renderer
=
new
ExtHostTerminalRenderer
(
this
.
_proxy
,
terminal
.
name
,
terminal
,
terminal
.
_id
);
this
.
_terminalRenderers
.
push
(
renderer
);
this
.
_terminalRenderers
.
push
(
renderer
);
...
@@ -339,6 +343,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -339,6 +343,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
if
(
original
!==
this
.
_activeTerminal
)
{
if
(
original
!==
this
.
_activeTerminal
)
{
this
.
_onDidChangeActiveTerminal
.
fire
(
this
.
_activeTerminal
);
this
.
_onDidChangeActiveTerminal
.
fire
(
this
.
_activeTerminal
);
}
}
return
;
}
}
this
.
_performTerminalIdAction
(
id
,
terminal
=>
{
this
.
_performTerminalIdAction
(
id
,
terminal
=>
{
if
(
terminal
)
{
if
(
terminal
)
{
...
@@ -364,7 +369,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -364,7 +369,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
if
(
terminal
.
setDimensions
(
cols
,
rows
))
{
if
(
terminal
.
setDimensions
(
cols
,
rows
))
{
this
.
_onDidChangeTerminalDimensions
.
fire
({
this
.
_onDidChangeTerminalDimensions
.
fire
({
terminal
:
terminal
,
terminal
:
terminal
,
dimensions
:
terminal
.
dimensions
dimensions
:
terminal
.
dimensions
as
vscode
.
TerminalDimensions
});
});
}
}
}
}
...
@@ -449,8 +454,8 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -449,8 +454,8 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
// this._configHelper.mergeDefaultShellPathAndArgs(shellLaunchConfig);
// this._configHelper.mergeDefaultShellPathAndArgs(shellLaunchConfig);
const
platformKey
=
platform
.
isWindows
?
'
windows
'
:
platform
.
isMacintosh
?
'
osx
'
:
'
linux
'
;
const
platformKey
=
platform
.
isWindows
?
'
windows
'
:
platform
.
isMacintosh
?
'
osx
'
:
'
linux
'
;
const
shellConfigValue
:
string
=
terminalConfig
.
get
(
`shell.
${
platformKey
}
`
);
const
shellConfigValue
:
string
|
undefined
=
terminalConfig
.
get
(
`shell.
${
platformKey
}
`
);
const
shellArgsConfigValue
:
string
=
terminalConfig
.
get
(
`shellArgs.
${
platformKey
}
`
);
const
shellArgsConfigValue
:
string
|
undefined
=
terminalConfig
.
get
(
`shellArgs.
${
platformKey
}
`
);
shellLaunchConfig
.
executable
=
shellConfigValue
;
shellLaunchConfig
.
executable
=
shellConfigValue
;
shellLaunchConfig
.
args
=
shellArgsConfigValue
;
shellLaunchConfig
.
args
=
shellArgsConfigValue
;
...
@@ -470,20 +475,24 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -470,20 +475,24 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
// Merge process env with the env from config
// Merge process env with the env from config
const
env
=
{
...
process
.
env
};
const
env
=
{
...
process
.
env
};
terminalEnvironment
.
mergeEnvironments
(
env
,
envFromConfig
);
Object
.
keys
(
env
).
filter
(
k
=>
env
[
k
]
===
undefined
).
forEach
(
k
=>
{
terminalEnvironment
.
mergeEnvironments
(
env
,
shellLaunchConfig
.
env
);
delete
env
[
k
];
});
const
castedEnv
=
env
as
platform
.
IProcessEnvironment
;
terminalEnvironment
.
mergeEnvironments
(
castedEnv
,
envFromConfig
);
terminalEnvironment
.
mergeEnvironments
(
castedEnv
,
shellLaunchConfig
.
env
);
// Sanitize the environment, removing any undesirable VS Code and Electron environment
// Sanitize the environment, removing any undesirable VS Code and Electron environment
// variables
// variables
sanitizeProcessEnvironment
(
e
nv
,
'
VSCODE_IPC_HOOK_CLI
'
);
sanitizeProcessEnvironment
(
castedE
nv
,
'
VSCODE_IPC_HOOK_CLI
'
);
// Continue env initialization, merging in the env from the launch
// Continue env initialization, merging in the env from the launch
// config and adding keys that are needed to create the process
// config and adding keys that are needed to create the process
terminalEnvironment
.
addTerminalEnvironmentKeys
(
env
,
pkg
.
version
,
platform
.
locale
,
terminalConfig
.
get
(
'
setLocaleVariables
'
)
);
terminalEnvironment
.
addTerminalEnvironmentKeys
(
castedEnv
,
pkg
.
version
,
platform
.
locale
,
terminalConfig
.
get
(
'
setLocaleVariables
'
)
as
boolean
);
// Fork the process and listen for messages
// Fork the process and listen for messages
this
.
_logService
.
debug
(
`Terminal process launching on ext host`
,
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
e
nv
);
this
.
_logService
.
debug
(
`Terminal process launching on ext host`
,
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
castedE
nv
);
const
p
=
new
TerminalProcess
(
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
env
,
terminalConfig
.
get
(
'
windowsEnableConpty
'
)
);
const
p
=
new
TerminalProcess
(
shellLaunchConfig
,
initialCwd
,
cols
,
rows
,
castedEnv
,
terminalConfig
.
get
(
'
windowsEnableConpty
'
)
as
boolean
);
p
.
onProcessIdReady
(
pid
=>
this
.
_proxy
.
$sendProcessPid
(
id
,
pid
));
p
.
onProcessIdReady
(
pid
=>
this
.
_proxy
.
$sendProcessPid
(
id
,
pid
));
p
.
onProcessTitleChanged
(
title
=>
this
.
_proxy
.
$sendProcessTitle
(
id
,
title
));
p
.
onProcessTitleChanged
(
title
=>
this
.
_proxy
.
$sendProcessTitle
(
id
,
title
));
p
.
onProcessData
(
data
=>
this
.
_proxy
.
$sendProcessData
(
id
,
data
));
p
.
onProcessData
(
data
=>
this
.
_proxy
.
$sendProcessData
(
id
,
data
));
...
@@ -560,20 +569,20 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
...
@@ -560,20 +569,20 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
});
});
}
}
private
_getTerminalById
(
id
:
number
):
ExtHostTerminal
{
private
_getTerminalById
(
id
:
number
):
ExtHostTerminal
|
null
{
return
this
.
_getTerminalObjectById
(
this
.
_terminals
,
id
);
return
this
.
_getTerminalObjectById
(
this
.
_terminals
,
id
);
}
}
private
_getTerminalRendererById
(
id
:
number
):
ExtHostTerminalRenderer
{
private
_getTerminalRendererById
(
id
:
number
):
ExtHostTerminalRenderer
|
null
{
return
this
.
_getTerminalObjectById
(
this
.
_terminalRenderers
,
id
);
return
this
.
_getTerminalObjectById
(
this
.
_terminalRenderers
,
id
);
}
}
private
_getTerminalObjectById
<
T
extends
ExtHostTerminal
|
ExtHostTerminalRenderer
>
(
array
:
T
[],
id
:
number
):
T
{
private
_getTerminalObjectById
<
T
extends
ExtHostTerminal
|
ExtHostTerminalRenderer
>
(
array
:
T
[],
id
:
number
):
T
|
null
{
const
index
=
this
.
_getTerminalObjectIndexById
(
array
,
id
);
const
index
=
this
.
_getTerminalObjectIndexById
(
array
,
id
);
return
index
!==
null
?
array
[
index
]
:
null
;
return
index
!==
null
?
array
[
index
]
:
null
;
}
}
private
_getTerminalObjectIndexById
<
T
extends
ExtHostTerminal
|
ExtHostTerminalRenderer
>
(
array
:
T
[],
id
:
number
):
number
{
private
_getTerminalObjectIndexById
<
T
extends
ExtHostTerminal
|
ExtHostTerminalRenderer
>
(
array
:
T
[],
id
:
number
):
number
|
null
{
let
index
:
number
|
null
=
null
;
let
index
:
number
|
null
=
null
;
array
.
some
((
item
,
i
)
=>
{
array
.
some
((
item
,
i
)
=>
{
const
thisId
=
item
.
_id
;
const
thisId
=
item
.
_id
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录