Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
3e3d88d1
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,发现更多精彩内容 >>
提交
3e3d88d1
编写于
8月 29, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes Microsoft/monaco-editor#122: Clear all tokenization data when resetting tokenization state
上级
b5c999e3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
76 addition
and
11 deletion
+76
-11
src/vs/editor/common/model/modelLine.ts
src/vs/editor/common/model/modelLine.ts
+6
-0
src/vs/editor/common/model/textModelWithTokens.ts
src/vs/editor/common/model/textModelWithTokens.ts
+8
-11
src/vs/editor/test/common/model/textModelWithTokens.test.ts
src/vs/editor/test/common/model/textModelWithTokens.test.ts
+62
-0
未找到文件。
src/vs/editor/common/model/modelLine.ts
浏览文件 @
3e3d88d1
...
...
@@ -160,6 +160,12 @@ export class ModelLine {
// --- BEGIN STATE
public
resetTokenizationState
():
void
{
this
.
_state
=
null
;
this
.
_modeTransitions
=
null
;
this
.
_lineTokens
=
null
;
}
public
setState
(
state
:
IState
):
void
{
this
.
_state
=
state
;
}
...
...
src/vs/editor/common/model/textModelWithTokens.ts
浏览文件 @
3e3d88d1
...
...
@@ -354,19 +354,9 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
this
.
_scheduleRetokenizeNow
.
cancel
();
this
.
_clearTimers
();
for
(
var
i
=
0
;
i
<
this
.
_lines
.
length
;
i
++
)
{
this
.
_lines
[
i
].
setState
(
null
);
this
.
_lines
[
i
].
resetTokenizationState
(
);
}
this
.
_initializeTokenizationState
();
}
private
_clearTimers
():
void
{
if
(
this
.
_revalidateTokensTimeout
!==
-
1
)
{
clearTimeout
(
this
.
_revalidateTokensTimeout
);
this
.
_revalidateTokensTimeout
=
-
1
;
}
}
private
_initializeTokenizationState
():
void
{
// Initialize tokenization states
var
initialState
:
IState
=
null
;
if
(
this
.
_mode
.
tokenizationSupport
)
{
...
...
@@ -389,6 +379,13 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
this
.
_beginBackgroundTokenization
();
}
private
_clearTimers
():
void
{
if
(
this
.
_revalidateTokensTimeout
!==
-
1
)
{
clearTimeout
(
this
.
_revalidateTokensTimeout
);
this
.
_revalidateTokensTimeout
=
-
1
;
}
}
public
getLineTokens
(
lineNumber
:
number
,
inaccurateTokensAcceptable
:
boolean
=
false
):
editorCommon
.
ILineTokens
{
if
(
lineNumber
<
1
||
lineNumber
>
this
.
getLineCount
())
{
throw
new
Error
(
'
Illegal value
'
+
lineNumber
+
'
for `lineNumber`
'
);
...
...
src/vs/editor/test/common/model/textModelWithTokens.test.ts
0 → 100644
浏览文件 @
3e3d88d1
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
{
Model
}
from
'
vs/editor/common/model/model
'
;
import
{
ViewLineToken
}
from
'
vs/editor/common/core/viewLineToken
'
;
import
{
ITokenizationSupport
}
from
'
vs/editor/common/modes
'
;
import
{
MockMode
}
from
'
vs/editor/test/common/mocks/mockMode
'
;
suite
(
'
TextModelWithTokens
'
,
()
=>
{
function
assertViewLineTokens
(
model
:
Model
,
lineNumber
:
number
,
forceTokenization
:
boolean
,
expected
:
ViewLineToken
[]):
void
{
let
actual
=
model
.
getLineTokens
(
lineNumber
,
!
forceTokenization
).
inflate
();
assert
.
deepEqual
(
actual
,
expected
);
}
test
(
'
Microsoft/monaco-editor#122: Unhandled Exception: TypeError: Unable to get property
\'
replace
\'
of undefined or null reference
'
,
()
=>
{
let
_tokenId
=
0
;
class
IndicisiveMode
extends
MockMode
{
public
tokenizationSupport
:
ITokenizationSupport
;
constructor
()
{
super
();
this
.
tokenizationSupport
=
{
getInitialState
:
()
=>
{
return
null
;
},
tokenize
:
(
line
,
state
,
offsetDelta
,
stopAtOffset
)
=>
{
let
myId
=
++
_tokenId
;
return
{
tokens
:
[{
startIndex
:
0
,
type
:
'
custom.
'
+
myId
}],
actualStopOffset
:
line
.
length
,
endState
:
null
,
modeTransitions
:
[],
retokenize
:
null
};
}
};
}
}
let
model
=
Model
.
createFromString
(
'
A model with
\n
two lines
'
);
assertViewLineTokens
(
model
,
1
,
true
,
[
new
ViewLineToken
(
0
,
''
)]);
assertViewLineTokens
(
model
,
2
,
true
,
[
new
ViewLineToken
(
0
,
''
)]);
model
.
setMode
(
new
IndicisiveMode
());
assertViewLineTokens
(
model
,
1
,
true
,
[
new
ViewLineToken
(
0
,
'
custom.1
'
)]);
assertViewLineTokens
(
model
,
2
,
true
,
[
new
ViewLineToken
(
0
,
'
custom.2
'
)]);
model
.
setMode
(
new
IndicisiveMode
());
assertViewLineTokens
(
model
,
1
,
false
,
[
new
ViewLineToken
(
0
,
''
)]);
assertViewLineTokens
(
model
,
2
,
false
,
[
new
ViewLineToken
(
0
,
''
)]);
model
.
dispose
();
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录