Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
87191950
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,发现更多精彩内容 >>
提交
87191950
编写于
11月 28, 2018
作者:
A
Andre Weinand
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refetch Source content on changed events; fixes #41362
上级
62e90329
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
51 addition
and
4 deletion
+51
-4
src/vs/workbench/parts/debug/browser/debugContentProvider.ts
src/vs/workbench/parts/debug/browser/debugContentProvider.ts
+47
-4
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
+4
-0
未找到文件。
src/vs/workbench/parts/debug/browser/debugContentProvider.ts
浏览文件 @
87191950
...
...
@@ -13,6 +13,9 @@ import { ITextModelService, ITextModelContentProvider } from 'vs/editor/common/s
import
{
IWorkbenchContribution
}
from
'
vs/workbench/common/contributions
'
;
import
{
DEBUG_SCHEME
,
IDebugService
,
IDebugSession
}
from
'
vs/workbench/parts/debug/common/debug
'
;
import
{
Source
}
from
'
vs/workbench/parts/debug/common/debugSource
'
;
import
{
IEditorWorkerService
}
from
'
vs/editor/common/services/editorWorkerService
'
;
import
{
EditOperation
}
from
'
vs/editor/common/core/editOperation
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
/**
* Debug URI format
...
...
@@ -29,16 +32,43 @@ import { Source } from 'vs/workbench/parts/debug/common/debugSource';
*/
export
class
DebugContentProvider
implements
IWorkbenchContribution
,
ITextModelContentProvider
{
private
static
INSTANCE
:
DebugContentProvider
;
constructor
(
@
ITextModelService
textModelResolverService
:
ITextModelService
,
@
IDebugService
private
debugService
:
IDebugService
,
@
IModelService
private
modelService
:
IModelService
,
@
IModeService
private
modeService
:
IModeService
@
IModeService
private
modeService
:
IModeService
,
@
IEditorWorkerService
private
editorWorkerService
:
IEditorWorkerService
)
{
textModelResolverService
.
registerTextModelContentProvider
(
DEBUG_SCHEME
,
this
);
DebugContentProvider
.
INSTANCE
=
this
;
}
provideTextContent
(
resource
:
uri
):
Promise
<
ITextModel
>
{
return
this
.
createOrUpdateContentModel
(
resource
,
true
);
}
/**
* Reload the model content of the given resource.
* If there is no model for the given resource, this method does nothing.
*/
static
refreshDebugContent
(
resource
:
uri
):
void
{
if
(
DebugContentProvider
.
INSTANCE
)
{
DebugContentProvider
.
INSTANCE
.
createOrUpdateContentModel
(
resource
,
false
);
}
}
/**
* Create or reload the model content of the given resource.
*/
private
createOrUpdateContentModel
(
resource
:
uri
,
createIfNotExists
:
boolean
):
Promise
<
ITextModel
>
{
const
model
=
this
.
modelService
.
getModel
(
resource
);
if
(
!
model
&&
!
createIfNotExists
)
{
// nothing to do
return
undefined
;
}
let
session
:
IDebugSession
;
...
...
@@ -67,9 +97,22 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC
return
session
.
loadSource
(
resource
).
then
(
response
=>
{
if
(
response
&&
response
.
body
)
{
const
mime
=
response
.
body
.
mimeType
||
guessMimeTypes
(
resource
.
path
)[
0
];
const
languageSelection
=
this
.
modeService
.
create
(
mime
);
return
this
.
modelService
.
createModel
(
response
.
body
.
content
,
languageSelection
,
resource
);
if
(
model
)
{
// update text model
return
this
.
editorWorkerService
.
computeMoreMinimalEdits
(
model
.
uri
,
[{
text
:
response
.
body
.
content
,
range
:
model
.
getFullModelRange
()
}]).
then
(
edits
=>
{
if
(
edits
.
length
>
0
)
{
// use the evil-edit as these models show in readonly-editor only
model
.
applyEdits
(
edits
.
map
(
edit
=>
EditOperation
.
replace
(
Range
.
lift
(
edit
.
range
),
edit
.
text
)));
}
return
model
;
});
}
else
{
// create text model
const
mime
=
response
.
body
.
mimeType
||
guessMimeTypes
(
resource
.
path
)[
0
];
const
languageSelection
=
this
.
modeService
.
create
(
mime
);
return
this
.
modelService
.
createModel
(
response
.
body
.
content
,
languageSelection
,
resource
);
}
}
return
createErrModel
();
...
...
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
浏览文件 @
87191950
...
...
@@ -28,6 +28,7 @@ import { ltrim } from 'vs/base/common/strings';
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
import
{
ResourceLabel
,
IResourceLabel
,
IResourceLabelOptions
}
from
'
vs/workbench/browser/labels
'
;
import
{
FileKind
}
from
'
vs/platform/files/common/files
'
;
import
{
DebugContentProvider
}
from
'
vs/workbench/parts/debug/browser/debugContentProvider
'
;
const
SMART
=
true
;
...
...
@@ -433,6 +434,9 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
sessionRoot
.
addPath
(
event
.
source
);
nextRefreshIsRecursive
=
true
;
refreshScheduler
.
schedule
();
if
(
event
.
reason
===
'
changed
'
)
{
DebugContentProvider
.
refreshDebugContent
(
event
.
source
.
uri
);
}
break
;
case
'
removed
'
:
sessionRoot
=
root
.
find
(
session
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录