Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
a9f87e7c
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,发现更多精彩内容 >>
提交
a9f87e7c
编写于
9月 25, 2020
作者:
R
rebornix
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
diff outputs instead of replacing the whole outputs array.
上级
5d73637a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
4 deletion
+38
-4
src/vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel.ts
...h/contrib/notebook/browser/viewModel/codeCellViewModel.ts
+3
-1
src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts
...kbench/contrib/notebook/common/model/notebookTextModel.ts
+35
-3
未找到文件。
src/vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel.ts
浏览文件 @
a9f87e7c
...
...
@@ -74,7 +74,9 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
)
{
super
(
viewType
,
model
,
UUID
.
generateUuid
(),
configurationService
);
this
.
_register
(
this
.
model
.
onDidChangeOutputs
((
splices
)
=>
{
this
.
_outputCollection
=
new
Array
(
this
.
model
.
outputs
.
length
);
splices
.
reverse
().
forEach
(
splice
=>
{
this
.
_outputCollection
.
splice
(
splice
[
0
],
splice
[
1
],
...
splice
[
2
].
map
(()
=>
0
));
});
this
.
_outputsTop
=
null
;
this
.
_onDidChangeOutputs
.
fire
(
splices
);
}));
...
...
src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts
浏览文件 @
a9f87e7c
...
...
@@ -8,13 +8,15 @@ import { Emitter, Event } from 'vs/base/common/event';
import
{
Disposable
,
dispose
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
NotebookCellTextModel
}
from
'
vs/workbench/contrib/notebook/common/model/notebookCellTextModel
'
;
import
{
INotebookTextModel
,
NotebookCellOutputsSplice
,
NotebookDocumentMetadata
,
NotebookCellMetadata
,
ICellEditOperation
,
CellEditType
,
CellUri
,
notebookDocumentMetadataDefaults
,
diff
,
NotebookCellsChangeType
,
ICellDto2
,
TransientOptions
,
NotebookTextModelChangedEvent
,
NotebookRawContentEvent
}
from
'
vs/workbench/contrib/notebook/common/notebookCommon
'
;
import
{
INotebookTextModel
,
NotebookCellOutputsSplice
,
NotebookDocumentMetadata
,
NotebookCellMetadata
,
ICellEditOperation
,
CellEditType
,
CellUri
,
notebookDocumentMetadataDefaults
,
diff
,
NotebookCellsChangeType
,
ICellDto2
,
TransientOptions
,
NotebookTextModelChangedEvent
,
NotebookRawContentEvent
,
IProcessedOutput
,
CellOutputKind
}
from
'
vs/workbench/contrib/notebook/common/notebookCommon
'
;
import
{
ITextSnapshot
}
from
'
vs/editor/common/model
'
;
import
{
IUndoRedoService
,
UndoRedoElementType
,
IUndoRedoElement
,
IResourceUndoRedoElement
}
from
'
vs/platform/undoRedo/common/undoRedo
'
;
import
{
MoveCellEdit
,
SpliceCellsEdit
,
CellMetadataEdit
}
from
'
vs/workbench/contrib/notebook/common/model/cellEdit
'
;
import
{
ITextModelService
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IModeService
}
from
'
vs/editor/common/services/modeService
'
;
import
{
IRange
}
from
'
vs/editor/common/core/range
'
;
import
{
ISequence
,
LcsDiff
}
from
'
vs/base/common/diff/diff
'
;
import
{
hash
}
from
'
vs/base/common/hash
'
;
export
class
NotebookTextModelSnapshot
implements
ITextSnapshot
{
...
...
@@ -329,8 +331,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
//TODO@joh,@rebornix no event, no undo stop (?)
this
.
_assertIndex
(
edit
.
index
);
const
cell
=
this
.
_cells
[
edit
.
index
];
// TODO@rebornix, we should do diff first
this
.
_spliceNotebookCellOutputs
(
cell
.
handle
,
[[
0
,
cell
.
outputs
.
length
,
edit
.
outputs
]],
computeUndoRedo
);
this
.
_spliceNotebookCellOutputs2
(
cell
.
handle
,
edit
.
outputs
,
computeUndoRedo
);
break
;
case
CellEditType
.
OutputsSplice
:
{
...
...
@@ -645,6 +646,18 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
this
.
_eventEmitter
.
emit
({
kind
:
NotebookCellsChangeType
.
ChangeLanguage
,
index
:
this
.
_cells
.
indexOf
(
cell
),
language
:
languageId
,
transient
:
false
},
true
);
}
private
_spliceNotebookCellOutputs2
(
cellHandle
:
number
,
outputs
:
IProcessedOutput
[],
computeUndoRedo
:
boolean
):
void
{
const
cell
=
this
.
_mapping
.
get
(
cellHandle
);
if
(
!
cell
)
{
return
;
}
const
diff
=
new
LcsDiff
(
new
OutputSequence
(
cell
.
outputs
),
new
OutputSequence
(
outputs
));
const
diffResult
=
diff
.
ComputeDiff
(
false
);
const
splices
:
NotebookCellOutputsSplice
[]
=
diffResult
.
changes
.
map
(
change
=>
[
change
.
originalStart
,
change
.
originalLength
,
outputs
.
slice
(
change
.
modifiedStart
,
change
.
modifiedStart
+
change
.
modifiedLength
)]);
this
.
_spliceNotebookCellOutputs
(
cellHandle
,
splices
,
computeUndoRedo
);
}
private
_spliceNotebookCellOutputs
(
cellHandle
:
number
,
splices
:
NotebookCellOutputsSplice
[],
computeUndoRedo
:
boolean
):
void
{
const
cell
=
this
.
_mapping
.
get
(
cellHandle
);
if
(
cell
)
{
...
...
@@ -695,3 +708,22 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
}
}
}
class
OutputSequence
implements
ISequence
{
constructor
(
readonly
outputs
:
IProcessedOutput
[])
{
}
getElements
():
Int32Array
|
number
[]
|
string
[]
{
return
this
.
outputs
.
map
(
output
=>
{
switch
(
output
.
outputKind
)
{
case
CellOutputKind
.
Rich
:
return
hash
([
output
.
outputKind
,
output
.
metadata
,
output
.
data
]);
case
CellOutputKind
.
Error
:
return
hash
([
output
.
outputKind
,
output
.
ename
,
output
.
evalue
,
output
.
traceback
]);
case
CellOutputKind
.
Text
:
return
hash
([
output
.
outputKind
,
output
.
text
]);
}
});
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录