Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
c4c74eb8
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,发现更多精彩内容 >>
提交
c4c74eb8
编写于
12月 22, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Invalidate tokens correctly
上级
3ee7787d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
34 addition
and
17 deletion
+34
-17
src/vs/editor/common/model/editableTextModel.ts
src/vs/editor/common/model/editableTextModel.ts
+4
-0
src/vs/editor/common/model/modelLine.ts
src/vs/editor/common/model/modelLine.ts
+27
-4
src/vs/editor/common/model/textBuffer.ts
src/vs/editor/common/model/textBuffer.ts
+1
-4
src/vs/editor/common/model/textModelWithTokens.ts
src/vs/editor/common/model/textModelWithTokens.ts
+1
-8
src/vs/editor/test/common/model/model.modes.test.ts
src/vs/editor/test/common/model/model.modes.test.ts
+1
-1
未找到文件。
src/vs/editor/common/model/editableTextModel.ts
浏览文件 @
c4c74eb8
...
...
@@ -202,6 +202,10 @@ export class EditableTextModel extends TextModelWithDecorations implements edito
);
}
if
(
this
.
_tokens
.
hasLinesToTokenize
(
this
.
_buffer
))
{
this
.
_beginBackgroundTokenization
();
}
return
result
.
reverseEdits
;
}
...
...
src/vs/editor/common/model/modelLine.ts
浏览文件 @
c4c74eb8
...
...
@@ -257,12 +257,10 @@ export class ModelLinesTokens {
return
(
this
.
_invalidLineStartIndex
<
buffer
.
getLineCount
());
}
public
invalidateLine
(
buffer
:
TextBuffer
,
lineIndex
:
number
):
void
{
public
invalidateLine
(
lineIndex
:
number
):
void
{
this
.
_setIsInvalid
(
lineIndex
,
true
);
if
(
lineIndex
<
this
.
_invalidLineStartIndex
)
{
if
(
this
.
_invalidLineStartIndex
<
buffer
.
getLineCount
())
{
this
.
_setIsInvalid
(
this
.
_invalidLineStartIndex
,
true
);
}
this
.
_setIsInvalid
(
this
.
_invalidLineStartIndex
,
true
);
this
.
_invalidLineStartIndex
=
lineIndex
;
}
}
...
...
@@ -323,7 +321,32 @@ export class ModelLinesTokens {
//#region Editing
// TODO: simplify
public
applyEdits
(
range
:
Range
,
lines
:
string
[]):
void
{
const
deletingLinesCnt
=
range
.
endLineNumber
-
range
.
startLineNumber
;
const
insertingLinesCnt
=
(
lines
?
lines
.
length
-
1
:
0
);
const
editingLinesCnt
=
Math
.
min
(
deletingLinesCnt
,
insertingLinesCnt
);
// Iterating descending to overlap with previous op
// in case there are common lines being edited in both
for
(
let
j
=
editingLinesCnt
;
j
>=
0
;
j
--
)
{
const
editLineNumber
=
range
.
startLineNumber
+
j
;
this
.
invalidateLine
(
editLineNumber
-
1
);
}
if
(
editingLinesCnt
<
deletingLinesCnt
)
{
// Must delete some lines
const
spliceStartLineNumber
=
range
.
startLineNumber
+
editingLinesCnt
;
this
.
invalidateLine
(
spliceStartLineNumber
-
1
);
}
if
(
editingLinesCnt
<
insertingLinesCnt
)
{
// Must insert some lines
const
spliceLineNumber
=
range
.
startLineNumber
+
editingLinesCnt
;
this
.
invalidateLine
(
spliceLineNumber
-
1
);
}
this
.
_acceptDeleteRange
(
range
);
this
.
_acceptInsertText
(
new
Position
(
range
.
startLineNumber
,
range
.
startColumn
),
lines
);
}
...
...
src/vs/editor/common/model/textBuffer.ts
浏览文件 @
c4c74eb8
...
...
@@ -464,6 +464,7 @@ export class TextBuffer {
};
}
// TODO: simplify
private
_doApplyEdits
(
operations
:
IValidatedEditOperation
[]):
[
ModelRawChange
[],
IInternalModelContentChange
[]]
{
// Sort operations descending
...
...
@@ -499,7 +500,6 @@ export class TextBuffer {
continue
;
}
// this._invalidateLine(currentLineNumber - 1); //TODO@TextBuffer
this
.
_lines
[
currentLineNumber
-
1
]
=
applyLineEdits
(
this
.
_lines
[
currentLineNumber
-
1
],
lineEditsQueue
.
slice
(
currentLineNumberStart
,
i
)
...
...
@@ -513,7 +513,6 @@ export class TextBuffer {
currentLineNumberStart
=
i
;
}
// this._invalidateLine(currentLineNumber - 1); //TODO@TextBuffer
this
.
_lines
[
currentLineNumber
-
1
]
=
applyLineEdits
(
this
.
_lines
[
currentLineNumber
-
1
],
lineEditsQueue
.
slice
(
currentLineNumberStart
,
lineEditsQueue
.
length
)
...
...
@@ -573,7 +572,6 @@ export class TextBuffer {
const
[
t1
,
t2
]
=
splitLine
(
this
.
_lines
[
endLineNumber
-
1
],
endColumn
);
this
.
_lines
[
endLineNumber
-
1
]
=
t1
;
const
endLineRemains
=
t2
;
// this._invalidateLine(spliceStartLineNumber - 1); //TODO@TextBuffer
const
spliceCnt
=
endLineNumber
-
spliceStartLineNumber
;
...
...
@@ -613,7 +611,6 @@ export class TextBuffer {
rawContentChanges
.
push
(
new
ModelRawLineChanged
(
spliceLineNumber
,
this
.
_lines
[
spliceLineNumber
-
1
])
);
// this._invalidateLine(spliceLineNumber - 1); //TODO@TextBuffer
// Lines in the middle
let
newLines
:
string
[]
=
[];
...
...
src/vs/editor/common/model/textModelWithTokens.ts
浏览文件 @
c4c74eb8
...
...
@@ -193,14 +193,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
return
lineTokens
.
getLanguageId
(
lineTokens
.
findTokenIndexAtOffset
(
column
-
1
));
}
protected
_invalidateLine
(
lineIndex
:
number
):
void
{
this
.
_tokens
.
invalidateLine
(
this
.
_buffer
,
lineIndex
);
if
(
this
.
_tokens
.
hasLinesToTokenize
(
this
.
_buffer
))
{
this
.
_beginBackgroundTokenization
();
}
}
private
_beginBackgroundTokenization
():
void
{
protected
_beginBackgroundTokenization
():
void
{
if
(
this
.
_shouldAutoTokenize
()
&&
this
.
_revalidateTokensTimeout
===
-
1
)
{
this
.
_revalidateTokensTimeout
=
setTimeout
(()
=>
{
this
.
_revalidateTokensTimeout
=
-
1
;
...
...
src/vs/editor/test/common/model/model.modes.test.ts
浏览文件 @
c4c74eb8
...
...
@@ -201,7 +201,7 @@ suite('Editor Model - Model Modes 2', () => {
for
(
i
=
0
;
i
<
len
;
i
++
)
{
stateEqual
(
model
.
_tokens
.
_getState
(
i
),
states
[
i
]);
}
stateEqual
((
<
any
>
model
).
_lastState
,
states
[
len
]);
stateEqual
((
<
any
>
model
).
_
tokens
.
_
lastState
,
states
[
len
]);
}
let
thisModel
:
Model
=
null
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录