Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
a7cc7fe2
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 搜索 >>
提交
a7cc7fe2
编写于
11月 17, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge the two change event types into one
上级
d6cc5fef
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
89 addition
and
54 deletion
+89
-54
src/vs/editor/common/model/editableTextModel.ts
src/vs/editor/common/model/editableTextModel.ts
+17
-25
src/vs/editor/common/model/textModel.ts
src/vs/editor/common/model/textModel.ts
+62
-21
src/vs/editor/common/model/textModelEvents.ts
src/vs/editor/common/model/textModelEvents.ts
+10
-8
未找到文件。
src/vs/editor/common/model/editableTextModel.ts
浏览文件 @
a7cc7fe2
...
...
@@ -12,11 +12,10 @@ import { TextModelWithDecorations, ModelDecorationOptions } from 'vs/editor/comm
import
*
as
strings
from
'
vs/base/common/strings
'
;
import
*
as
arrays
from
'
vs/base/common/arrays
'
;
import
{
Selection
}
from
'
vs/editor/common/core/selection
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
LanguageIdentifier
}
from
'
vs/editor/common/modes
'
;
import
{
ITextSource
,
IRawTextSource
,
RawTextSource
}
from
'
vs/editor/common/model/textSource
'
;
import
{
TextModel
}
from
'
vs/editor/common/model/textModel
'
;
import
{
ModelRawContentChangedEvent
,
TextModelEventType
,
IModelContentChangedEvent
,
ModelRawChange
,
IModelContentChange
,
ModelRawLineChanged
,
ModelRawLinesDeleted
,
ModelRawLinesInserted
}
from
'
vs/editor/common/model/textModelEvents
'
;
import
{
ModelRawContentChangedEvent
,
ModelRawChange
,
IModelContentChange
,
ModelRawLineChanged
,
ModelRawLinesDeleted
,
ModelRawLinesInserted
}
from
'
vs/editor/common/model/textModelEvents
'
;
export
interface
IValidatedEditOperation
{
sortIndex
:
number
;
...
...
@@ -39,13 +38,6 @@ export class EditableTextModel extends TextModelWithDecorations implements edito
return
new
EditableTextModel
(
RawTextSource
.
fromString
(
text
),
options
,
languageIdentifier
);
}
public
onDidChangeRawContent
(
listener
:
(
e
:
ModelRawContentChangedEvent
)
=>
void
):
IDisposable
{
return
this
.
_eventEmitter
.
addListener
(
TextModelEventType
.
ModelRawContentChanged2
,
listener
);
}
public
onDidChangeContent
(
listener
:
(
e
:
IModelContentChangedEvent
)
=>
void
):
IDisposable
{
return
this
.
_eventEmitter
.
addListener
(
TextModelEventType
.
ModelContentChanged
,
listener
);
}
private
_commandManager
:
EditStack
;
// for extra details about change events:
...
...
@@ -649,22 +641,22 @@ export class EditableTextModel extends TextModelWithDecorations implements edito
if
(
rawContentChanges
.
length
!==
0
||
contentChanges
.
length
!==
0
)
{
this
.
_increaseVersionId
();
this
.
_emit
ModelRawContentChangedEvent
(
new
ModelRaw
ContentChangedEvent
(
rawContentChanges
,
this
.
getVersionId
()
,
this
.
_isUndoing
,
this
.
_isRedoing
));
const
e
:
IModelContentChangedEvent
=
{
changes
:
contentChanges
,
eol
:
this
.
_EOL
,
versionId
:
this
.
getVersionId
(),
isUndoing
:
this
.
_isUndoing
,
isRedoing
:
this
.
_isRedoing
,
isFlush
:
false
};
this
.
_eventEmitter
.
emit
(
TextModelEventType
.
ModelContentChanged
,
e
);
this
.
_emitContentChangedEvent
(
new
ModelRawContentChangedEvent
(
rawContentChanges
,
this
.
getVersionId
()
,
this
.
_isUndoing
,
this
.
_isRedoing
),
{
changes
:
contentChanges
,
eol
:
this
.
_EOL
,
versionId
:
this
.
getVersionId
(),
isUndoing
:
this
.
_isUndoing
,
isRedoing
:
this
.
_isRedoing
,
isFlush
:
false
}
);
}
}
...
...
src/vs/editor/common/model/textModel.ts
浏览文件 @
a7cc7fe2
...
...
@@ -17,8 +17,8 @@ import { EDITOR_MODEL_DEFAULTS } from 'vs/editor/common/config/editorOptions';
import
{
PrefixSumComputer
}
from
'
vs/editor/common/viewModel/prefixSumComputer
'
;
import
{
TextModelSearch
,
SearchParams
}
from
'
vs/editor/common/model/textModelSearch
'
;
import
{
TextSource
,
ITextSource
,
IRawTextSource
,
RawTextSource
}
from
'
vs/editor/common/model/textSource
'
;
import
{
TextModelEventType
,
IModelContentChangedEvent
,
ModelRawContentChangedEvent
,
ModelRawFlush
,
ModelRawEOLChanged
,
IModelOptionsChanged
Event
}
from
'
vs/editor/common/model/textModelEvents
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IModelContentChangedEvent
,
ModelRawContentChangedEvent
,
ModelRawFlush
,
ModelRawEOLChanged
,
IModelOptionsChangedEvent
,
InternalModelContentChange
Event
}
from
'
vs/editor/common/model/textModelEvents
'
;
import
{
Disposable
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
const
LIMIT_FIND_COUNT
=
999
;
export
const
LONG_LINE_BOUNDARY
=
10000
;
...
...
@@ -28,6 +28,8 @@ export interface ITextModelCreationData {
readonly
options
:
editorCommon
.
TextModelResolvedOptions
;
}
const
ContentChangeEventName
:
string
=
'
contentChange
'
;
export
class
TextModel
extends
Disposable
implements
editorCommon
.
ITextModel
{
private
static
MODEL_SYNC_LIMIT
=
50
*
1024
*
1024
;
// 50 MB
private
static
MODEL_TOKENIZATION_LIMIT
=
20
*
1024
*
1024
;
// 20 MB
...
...
@@ -75,7 +77,17 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
private
readonly
_onDidChangeOptions
:
Emitter
<
IModelOptionsChangedEvent
>
=
this
.
_register
(
new
Emitter
<
IModelOptionsChangedEvent
>
());
public
readonly
onDidChangeOptions
:
Event
<
IModelOptionsChangedEvent
>
=
this
.
_onDidChangeOptions
.
event
;
protected
readonly
_eventEmitter
:
OrderGuaranteeEventEmitter
;
protected
readonly
_eventEmitter
:
OrderGuaranteeEventEmitter
=
this
.
_register
(
new
OrderGuaranteeEventEmitter
());
// protected readonly _eventEmitter: DidChangeContentEmitter = this._register(new DidChangeContentEmitter());
public
onDidChangeRawContent
(
listener
:
(
e
:
ModelRawContentChangedEvent
)
=>
void
):
IDisposable
{
return
this
.
_eventEmitter
.
addListener
(
ContentChangeEventName
,
(
e
:
InternalModelContentChangeEvent
)
=>
listener
(
e
.
rawContentChangedEvent
));
// return this._eventEmitter.event((e: InternalModelContentChangeEvent) => listener(e.rawContentChangedEvent));
}
public
onDidChangeContent
(
listener
:
(
e
:
IModelContentChangedEvent
)
=>
void
):
IDisposable
{
return
this
.
_eventEmitter
.
addListener
(
ContentChangeEventName
,
(
e
:
InternalModelContentChangeEvent
)
=>
listener
(
e
.
contentChangedEvent
));
// return this._eventEmitter.event((e: InternalModelContentChangeEvent) => listener(e.contentChangedEvent));
}
/*protected*/
_lines
:
IModelLine
[];
protected
_EOL
:
string
;
...
...
@@ -98,7 +110,6 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
constructor
(
rawTextSource
:
IRawTextSource
,
creationOptions
:
editorCommon
.
ITextModelCreationOptions
)
{
super
();
this
.
_eventEmitter
=
new
OrderGuaranteeEventEmitter
();
const
textModelData
=
TextModel
.
resolveCreationData
(
rawTextSource
,
creationOptions
);
...
...
@@ -297,13 +308,11 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
this
.
_EOL
=
null
;
this
.
_BOM
=
null
;
this
.
_eventEmitter
.
dispose
();
super
.
dispose
();
}
private
_
emitContentChanged2
(
startLineNumber
:
number
,
startColumn
:
number
,
endLineNumber
:
number
,
endColumn
:
number
,
rangeLength
:
number
,
text
:
string
,
isUndoing
:
boolean
,
isRedoing
:
boolean
,
isFlush
:
boolean
):
void
{
const
e
:
IModelContentChangedEvent
=
{
private
_
createContentChanged2
(
startLineNumber
:
number
,
startColumn
:
number
,
endLineNumber
:
number
,
endColumn
:
number
,
rangeLength
:
number
,
text
:
string
,
isUndoing
:
boolean
,
isRedoing
:
boolean
,
isFlush
:
boolean
):
IModelContentChangedEvent
{
return
{
changes
:
[{
range
:
new
Range
(
startLineNumber
,
startColumn
,
endLineNumber
,
endColumn
),
rangeLength
:
rangeLength
,
...
...
@@ -315,9 +324,6 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
isRedoing
:
isRedoing
,
isFlush
:
isFlush
};
if
(
!
this
.
_isDisposing
)
{
this
.
_eventEmitter
.
emit
(
TextModelEventType
.
ModelContentChanged
,
e
);
}
}
protected
_resetValue
(
newValue
:
ITextSource
):
void
{
...
...
@@ -367,7 +373,7 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
this
.
_resetValue
(
newValue
);
this
.
_emit
ModelRaw
ContentChangedEvent
(
this
.
_emitContentChangedEvent
(
new
ModelRawContentChangedEvent
(
[
new
ModelRawFlush
()
...
...
@@ -375,10 +381,9 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
this
.
_versionId
,
false
,
false
)
),
this
.
_createContentChanged2
(
1
,
1
,
endLineNumber
,
endColumn
,
oldModelValueLength
,
this
.
getValue
(),
false
,
false
,
true
)
);
this
.
_emitContentChanged2
(
1
,
1
,
endLineNumber
,
endColumn
,
oldModelValueLength
,
this
.
getValue
(),
false
,
false
,
true
);
}
public
getValue
(
eol
?:
editorCommon
.
EndOfLinePreference
,
preserveBOM
:
boolean
=
false
):
string
{
...
...
@@ -522,7 +527,7 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
this
.
_increaseVersionId
();
this
.
_onAfterEOLChange
();
this
.
_emit
ModelRaw
ContentChangedEvent
(
this
.
_emitContentChangedEvent
(
new
ModelRawContentChangedEvent
(
[
new
ModelRawEOLChanged
()
...
...
@@ -530,10 +535,9 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
this
.
_versionId
,
false
,
false
)
),
this
.
_createContentChanged2
(
1
,
1
,
endLineNumber
,
endColumn
,
oldModelValueLength
,
this
.
getValue
(),
false
,
false
,
false
)
);
this
.
_emitContentChanged2
(
1
,
1
,
endLineNumber
,
endColumn
,
oldModelValueLength
,
this
.
getValue
(),
false
,
false
,
false
);
}
public
getLineMinColumn
(
lineNumber
:
number
):
number
{
...
...
@@ -742,12 +746,13 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
return
new
Range
(
1
,
1
,
lineCount
,
this
.
getLineMaxColumn
(
lineCount
));
}
protected
_emit
ModelRawContentChangedEvent
(
e
:
ModelRaw
ContentChangedEvent
):
void
{
protected
_emit
ContentChangedEvent
(
rawChange
:
ModelRawContentChangedEvent
,
change
:
IModel
ContentChangedEvent
):
void
{
if
(
this
.
_isDisposing
)
{
// Do not confuse listeners by emitting any event after disposing
return
;
}
this
.
_eventEmitter
.
emit
(
TextModelEventType
.
ModelRawContentChanged2
,
e
);
this
.
_eventEmitter
.
emit
(
ContentChangeEventName
,
new
InternalModelContentChangeEvent
(
rawChange
,
change
));
// this._eventEmitter.fire(new InternalModelContentChangeEvent(rawChange, change));
}
private
_constructLines
(
textSource
:
ITextSource
):
void
{
...
...
@@ -812,3 +817,39 @@ export class TextModel extends Disposable implements editorCommon.ITextModel {
return
TextModelSearch
.
findPreviousMatch
(
this
,
new
SearchParams
(
searchString
,
isRegex
,
matchCase
,
wordSeparators
),
searchStart
,
captureMatches
);
}
}
export
class
DidChangeContentEmitter
extends
Disposable
{
private
readonly
_actual
:
Emitter
<
InternalModelContentChangeEvent
>
=
this
.
_register
(
new
Emitter
<
InternalModelContentChangeEvent
>
({
guaranteeEventOrder
:
true
}));
public
readonly
event
:
Event
<
InternalModelContentChangeEvent
>
=
this
.
_actual
.
event
;
private
_deferredCnt
:
number
;
private
_deferredEvents
:
InternalModelContentChangeEvent
[];
constructor
()
{
super
();
this
.
_deferredCnt
=
0
;
this
.
_deferredEvents
=
[];
}
public
beginDeferredEmit
():
void
{
this
.
_deferredCnt
++
;
}
public
endDeferredEmit
():
void
{
this
.
_deferredCnt
--
;
if
(
this
.
_deferredCnt
===
0
)
{
while
(
this
.
_deferredEvents
.
length
>
0
)
{
this
.
_actual
.
fire
(
this
.
_deferredEvents
.
shift
());
}
}
}
public
fire
(
e
:
InternalModelContentChangeEvent
):
void
{
if
(
this
.
_deferredCnt
>
0
)
{
this
.
_deferredEvents
.
push
(
e
);
return
;
}
this
.
_actual
.
fire
(
e
);
}
}
src/vs/editor/common/model/textModelEvents.ts
浏览文件 @
a7cc7fe2
...
...
@@ -7,14 +7,6 @@
import
{
IRange
}
from
'
vs/editor/common/core/range
'
;
/**
* @internal
*/
export
const
TextModelEventType
=
{
ModelContentChanged
:
'
contentChanged
'
,
ModelRawContentChanged2
:
'
rawContentChanged2
'
,
};
/**
* An event describing that the current mode associated with a model has changed.
*/
...
...
@@ -243,3 +235,13 @@ export class ModelRawContentChangedEvent {
return
false
;
}
}
/**
* @internal
*/
export
class
InternalModelContentChangeEvent
{
constructor
(
public
readonly
rawContentChangedEvent
:
ModelRawContentChangedEvent
,
public
readonly
contentChangedEvent
:
IModelContentChangedEvent
,
)
{
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录