Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
e3244b74
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,发现更多精彩内容 >>
提交
e3244b74
编写于
12月 04, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Eliminate markerIdToRangeId map (#15743)
上级
c1b10743
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
48 addition
and
62 deletion
+48
-62
src/vs/editor/common/controller/cursor.ts
src/vs/editor/common/controller/cursor.ts
+2
-2
src/vs/editor/common/controller/oneCursor.ts
src/vs/editor/common/controller/oneCursor.ts
+1
-1
src/vs/editor/common/editorCommon.ts
src/vs/editor/common/editorCommon.ts
+1
-1
src/vs/editor/common/model/modelLine.ts
src/vs/editor/common/model/modelLine.ts
+2
-1
src/vs/editor/common/model/textModelWithMarkers.ts
src/vs/editor/common/model/textModelWithMarkers.ts
+4
-3
src/vs/editor/common/model/textModelWithTrackedRanges.ts
src/vs/editor/common/model/textModelWithTrackedRanges.ts
+33
-49
src/vs/editor/test/common/commands/sideEditing.test.ts
src/vs/editor/test/common/commands/sideEditing.test.ts
+1
-1
src/vs/editor/test/common/model/editableTextModel.test.ts
src/vs/editor/test/common/model/editableTextModel.test.ts
+1
-1
src/vs/editor/test/common/model/model.line.test.ts
src/vs/editor/test/common/model/model.line.test.ts
+3
-3
未找到文件。
src/vs/editor/common/controller/cursor.ts
浏览文件 @
e3244b74
...
...
@@ -495,8 +495,8 @@ export class Cursor extends EventEmitter {
}
var
l
=
ctx
.
selectionStartMarkers
.
length
;
ctx
.
selectionStartMarkers
[
l
]
=
this
.
model
.
_addMarker
(
selection
.
selectionStartLineNumber
,
selection
.
selectionStartColumn
,
selectionMarkerStickToPreviousCharacter
);
ctx
.
positionMarkers
[
l
]
=
this
.
model
.
_addMarker
(
selection
.
positionLineNumber
,
selection
.
positionColumn
,
positionMarkerStickToPreviousCharacter
);
ctx
.
selectionStartMarkers
[
l
]
=
this
.
model
.
_addMarker
(
null
,
selection
.
selectionStartLineNumber
,
selection
.
selectionStartColumn
,
selectionMarkerStickToPreviousCharacter
);
ctx
.
positionMarkers
[
l
]
=
this
.
model
.
_addMarker
(
null
,
selection
.
positionLineNumber
,
selection
.
positionColumn
,
positionMarkerStickToPreviousCharacter
);
return
l
.
toString
();
};
...
...
src/vs/editor/common/controller/oneCursor.ts
浏览文件 @
e3244b74
...
...
@@ -221,7 +221,7 @@ export class OneCursor implements IOneCursor {
private
_ensureMarker
(
markerId
:
string
,
lineNumber
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
string
{
if
(
!
markerId
)
{
return
this
.
model
.
_addMarker
(
lineNumber
,
column
,
stickToPreviousCharacter
);
return
this
.
model
.
_addMarker
(
null
,
lineNumber
,
column
,
stickToPreviousCharacter
);
}
else
{
this
.
model
.
_changeMarker
(
markerId
,
lineNumber
,
column
);
this
.
model
.
_changeMarkerStickiness
(
markerId
,
stickToPreviousCharacter
);
...
...
src/vs/editor/common/editorCommon.ts
浏览文件 @
e3244b74
...
...
@@ -1958,7 +1958,7 @@ export interface ITextModelWithMarkers extends ITextModel {
/**
* @internal
*/
_addMarker
(
lineNumber
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
string
;
_addMarker
(
rangeId
:
string
,
lineNumber
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
string
;
/**
* @internal
*/
...
...
src/vs/editor/common/model/modelLine.ts
浏览文件 @
e3244b74
...
...
@@ -28,8 +28,9 @@ export class LineMarker {
public
stickToPreviousCharacter
:
boolean
;
public
line
:
ModelLine
;
constructor
(
id
:
string
,
column
:
number
,
stickToPreviousCharacter
:
boolean
)
{
constructor
(
id
:
string
,
rangeId
:
string
,
column
:
number
,
stickToPreviousCharacter
:
boolean
)
{
this
.
id
=
id
;
this
.
rangeId
=
rangeId
;
this
.
column
=
column
;
this
.
stickToPreviousCharacter
=
stickToPreviousCharacter
;
this
.
line
=
null
;
...
...
src/vs/editor/common/model/textModelWithMarkers.ts
浏览文件 @
e3244b74
...
...
@@ -15,6 +15,7 @@ export interface IMarkerIdToMarkerMap {
}
export
interface
INewMarker
{
rangeId
:
string
;
lineNumber
:
number
;
column
:
number
;
stickToPreviousCharacter
:
boolean
;
...
...
@@ -44,10 +45,10 @@ export class TextModelWithMarkers extends TextModelWithTokens implements ITextMo
this
.
_markerIdToMarker
=
{};
}
_addMarker
(
lineNumber
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
string
{
_addMarker
(
rangeId
:
string
,
lineNumber
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
string
{
var
pos
=
this
.
validatePosition
(
new
Position
(
lineNumber
,
column
));
var
marker
=
new
LineMarker
(
this
.
_markerIdGenerator
.
nextId
(),
pos
.
column
,
stickToPreviousCharacter
);
var
marker
=
new
LineMarker
(
this
.
_markerIdGenerator
.
nextId
(),
rangeId
,
pos
.
column
,
stickToPreviousCharacter
);
this
.
_markerIdToMarker
[
marker
.
id
]
=
marker
;
this
.
_lines
[
pos
.
lineNumber
-
1
].
addMarker
(
marker
);
...
...
@@ -64,7 +65,7 @@ export class TextModelWithMarkers extends TextModelWithTokens implements ITextMo
for
(
let
i
=
0
,
len
=
newMarkers
.
length
;
i
<
len
;
i
++
)
{
let
newMarker
=
newMarkers
[
i
];
let
marker
=
new
LineMarker
(
this
.
_markerIdGenerator
.
nextId
(),
newMarker
.
column
,
newMarker
.
stickToPreviousCharacter
);
let
marker
=
new
LineMarker
(
this
.
_markerIdGenerator
.
nextId
(),
newMarker
.
rangeId
,
newMarker
.
column
,
newMarker
.
stickToPreviousCharacter
);
this
.
_markerIdToMarker
[
marker
.
id
]
=
marker
;
if
(
!
addMarkersPerLine
[
newMarker
.
lineNumber
])
{
...
...
src/vs/editor/common/model/textModelWithTrackedRanges.ts
浏览文件 @
e3244b74
...
...
@@ -21,14 +21,10 @@ interface ITrackedRangesMap {
[
key
:
string
]:
ITrackedRange
;
}
interface
IMarkerIdToRangeIdMap
{
[
key
:
string
]:
string
;
}
class
TrackedRange
implements
ITrackedRange
{
id
:
string
;
startMarkerId
:
string
;
endMarkerId
:
string
;
public
readonly
id
:
string
;
public
readonly
startMarkerId
:
string
;
public
readonly
endMarkerId
:
string
;
constructor
(
id
:
string
,
startMarkedId
:
string
,
endMarkerId
:
string
)
{
this
.
id
=
id
;
...
...
@@ -43,20 +39,17 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
private
_rangeIdGenerator
:
IdGenerator
;
private
_ranges
:
ITrackedRangesMap
;
private
_markerIdToRangeId
:
IMarkerIdToRangeIdMap
;
private
_multiLineTrackedRanges
:
{
[
key
:
string
]:
boolean
;
};
constructor
(
allowedEventTypes
:
string
[],
rawText
:
editorCommon
.
IRawText
,
languageId
:
string
)
{
super
(
allowedEventTypes
,
rawText
,
languageId
);
this
.
_rangeIdGenerator
=
new
IdGenerator
((
++
_INSTANCE_COUNT
)
+
'
;
'
);
this
.
_ranges
=
{};
this
.
_markerIdToRangeId
=
{};
this
.
_multiLineTrackedRanges
=
{};
}
public
dispose
():
void
{
this
.
_ranges
=
null
;
this
.
_markerIdToRangeId
=
null
;
this
.
_multiLineTrackedRanges
=
null
;
super
.
dispose
();
}
...
...
@@ -66,7 +59,6 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
// Destroy all my tracked ranges
this
.
_ranges
=
{};
this
.
_markerIdToRangeId
=
{};
this
.
_multiLineTrackedRanges
=
{};
}
...
...
@@ -97,19 +89,19 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
return
Object
.
keys
(
this
.
_ranges
).
length
;
}
public
addTrackedRange
(
textRange
:
editorCommon
.
IRange
,
stickiness
:
editorCommon
.
TrackedRangeStickiness
):
string
{
textRange
=
this
.
validateRange
(
textRange
);
public
addTrackedRange
(
_textRange
:
editorCommon
.
IRange
,
stickiness
:
editorCommon
.
TrackedRangeStickiness
):
string
{
let
textRange
=
this
.
validateRange
(
_textRange
);
let
startMarkerSticksToPreviousCharacter
=
this
.
_shouldStartMarkerSticksToPreviousCharacter
(
stickiness
);
let
endMarkerSticksToPreviousCharacter
=
this
.
_shouldEndMarkerSticksToPreviousCharacter
(
stickiness
);
var
startMarkerSticksToPreviousCharacter
=
this
.
_shouldStartMarkerSticksToPreviousCharacter
(
stickiness
);
var
endMarkerSticksToPreviousCharacter
=
this
.
_shouldEndMarkerSticksToPreviousCharacter
(
stickiness
);
let
rangeId
=
this
.
_rangeIdGenerator
.
nextId
();
var
startMarkerId
=
this
.
_addMarker
(
textRange
.
startLineNumber
,
textRange
.
startColumn
,
startMarkerSticksToPreviousCharacter
);
var
endMarkerId
=
this
.
_addMarker
(
textRange
.
endLineNumber
,
textRange
.
endColumn
,
endMarkerSticksToPreviousCharacter
);
let
startMarkerId
=
this
.
_addMarker
(
rangeId
,
textRange
.
startLineNumber
,
textRange
.
startColumn
,
startMarkerSticksToPreviousCharacter
);
let
endMarkerId
=
this
.
_addMarker
(
rangeId
,
textRange
.
endLineNumber
,
textRange
.
endColumn
,
endMarkerSticksToPreviousCharacter
);
var
range
=
new
TrackedRange
(
this
.
_rangeIdGenerator
.
nextId
()
,
startMarkerId
,
endMarkerId
);
let
range
=
new
TrackedRange
(
rangeId
,
startMarkerId
,
endMarkerId
);
this
.
_ranges
[
range
.
id
]
=
range
;
this
.
_markerIdToRangeId
[
startMarkerId
]
=
range
.
id
;
this
.
_markerIdToRangeId
[
endMarkerId
]
=
range
.
id
;
this
.
_setRangeIsMultiLine
(
range
.
id
,
(
textRange
.
startLineNumber
!==
textRange
.
endLineNumber
));
...
...
@@ -118,20 +110,26 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
protected
_addTrackedRanges
(
textRanges
:
editorCommon
.
IRange
[],
stickinessArr
:
editorCommon
.
TrackedRangeStickiness
[]):
string
[]
{
let
addMarkers
:
INewMarker
[]
=
[];
let
addRangeId
:
string
[]
=
[];
for
(
let
i
=
0
,
len
=
textRanges
.
length
;
i
<
len
;
i
++
)
{
let
textRange
=
textRanges
[
i
];
let
stickiness
=
stickinessArr
[
i
];
let
rangeId
=
this
.
_rangeIdGenerator
.
nextId
();
addMarkers
.
push
({
rangeId
:
rangeId
,
lineNumber
:
textRange
.
startLineNumber
,
column
:
textRange
.
startColumn
,
stickToPreviousCharacter
:
this
.
_shouldStartMarkerSticksToPreviousCharacter
(
stickiness
)
});
addMarkers
.
push
({
rangeId
:
rangeId
,
lineNumber
:
textRange
.
endLineNumber
,
column
:
textRange
.
endColumn
,
stickToPreviousCharacter
:
this
.
_shouldEndMarkerSticksToPreviousCharacter
(
stickiness
)
});
addRangeId
.
push
(
rangeId
);
}
let
markerIds
=
this
.
_addMarkers
(
addMarkers
);
...
...
@@ -142,10 +140,8 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
let
startMarkerId
=
markerIds
[
2
*
i
];
let
endMarkerId
=
markerIds
[
2
*
i
+
1
];
let
range
=
new
TrackedRange
(
this
.
_rangeIdGenerator
.
nextId
()
,
startMarkerId
,
endMarkerId
);
let
range
=
new
TrackedRange
(
addRangeId
[
i
]
,
startMarkerId
,
endMarkerId
);
this
.
_ranges
[
range
.
id
]
=
range
;
this
.
_markerIdToRangeId
[
startMarkerId
]
=
range
.
id
;
this
.
_markerIdToRangeId
[
endMarkerId
]
=
range
.
id
;
this
.
_setRangeIsMultiLine
(
range
.
id
,
(
textRange
.
startLineNumber
!==
textRange
.
endLineNumber
));
...
...
@@ -191,8 +187,6 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
this
.
_setRangeIsMultiLine
(
range
.
id
,
false
);
delete
this
.
_ranges
[
range
.
id
];
delete
this
.
_markerIdToRangeId
[
range
.
startMarkerId
];
delete
this
.
_markerIdToRangeId
[
range
.
endMarkerId
];
}
}
...
...
@@ -213,8 +207,6 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
this
.
_setRangeIsMultiLine
(
range
.
id
,
false
);
delete
this
.
_ranges
[
range
.
id
];
delete
this
.
_markerIdToRangeId
[
range
.
startMarkerId
];
delete
this
.
_markerIdToRangeId
[
range
.
endMarkerId
];
}
if
(
removeMarkers
.
length
>
0
)
{
...
...
@@ -272,31 +264,23 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
}
public
getLinesTrackedRanges
(
startLineNumber
:
number
,
endLineNumber
:
number
):
editorCommon
.
IModelTrackedRange
[]
{
var
result
=
this
.
_getMultiLineTrackedRanges
(
startLineNumber
,
endLineNumber
),
resultMap
:
{
[
rangeId
:
string
]:
boolean
;
}
=
{},
lineMarkers
:
LineMarker
[],
lineMarker
:
LineMarker
,
rangeId
:
string
,
i
:
number
,
len
:
number
,
lineNumber
:
number
,
startMarker
:
Position
,
endMarker
:
Position
;
for
(
i
=
0
,
len
=
result
.
length
;
i
<
len
;
i
++
)
{
let
result
=
this
.
_getMultiLineTrackedRanges
(
startLineNumber
,
endLineNumber
);
let
resultMap
:
{
[
rangeId
:
string
]:
boolean
;
}
=
{};
for
(
let
i
=
0
,
len
=
result
.
length
;
i
<
len
;
i
++
)
{
resultMap
[
result
[
i
].
id
]
=
true
;
}
for
(
lineNumber
=
startLineNumber
;
lineNumber
<=
endLineNumber
;
lineNumber
++
)
{
lineMarkers
=
this
.
_getLineMarkers
(
lineNumber
);
for
(
i
=
0
,
len
=
lineMarkers
.
length
;
i
<
len
;
i
++
)
{
lineMarker
=
lineMarkers
[
i
];
for
(
l
et
l
ineNumber
=
startLineNumber
;
lineNumber
<=
endLineNumber
;
lineNumber
++
)
{
l
et
l
ineMarkers
=
this
.
_getLineMarkers
(
lineNumber
);
for
(
let
i
=
0
,
len
=
lineMarkers
.
length
;
i
<
len
;
i
++
)
{
l
et
l
ineMarker
=
lineMarkers
[
i
];
if
(
this
.
_markerIdToRangeId
.
hasOwnProperty
(
lineMarker
.
id
)
)
{
rangeId
=
this
.
_markerIdToRangeId
[
lineMarker
.
id
]
;
if
(
lineMarker
.
rangeId
!==
null
)
{
let
rangeId
=
lineMarker
.
rangeId
;
if
(
!
resultMap
.
hasOwnProperty
(
rangeId
))
{
startMarker
=
this
.
_getMarker
(
this
.
_ranges
[
rangeId
].
startMarkerId
);
endMarker
=
this
.
_getMarker
(
this
.
_ranges
[
rangeId
].
endMarkerId
);
let
startMarker
=
this
.
_getMarker
(
this
.
_ranges
[
rangeId
].
startMarkerId
);
let
endMarker
=
this
.
_getMarker
(
this
.
_ranges
[
rangeId
].
endMarkerId
);
result
.
push
({
id
:
rangeId
,
...
...
@@ -317,8 +301,8 @@ export class TextModelWithTrackedRanges extends TextModelWithMarkers implements
for
(
let
i
=
0
,
len
=
changedMarkers
.
length
;
i
<
len
;
i
++
)
{
let
marker
=
changedMarkers
[
i
];
if
(
this
.
_markerIdToRangeId
.
hasOwnProperty
(
marker
.
id
)
)
{
let
rangeId
=
this
.
_markerIdToRangeId
[
marker
.
id
]
;
if
(
marker
.
rangeId
!==
null
)
{
let
rangeId
=
marker
.
rangeId
;
changedRanges
[
changedRangesLen
++
]
=
rangeId
;
}
...
...
src/vs/editor/test/common/commands/sideEditing.test.ts
浏览文件 @
e3244b74
...
...
@@ -40,7 +40,7 @@ function testCommand(lines: string[], selection: Selection, edits: IIdentifiedSi
function
testLineEditMarker
(
text
:
string
,
column
:
number
,
stickToPreviousCharacter
:
boolean
,
edit
:
ILineEdit
,
expectedColumn
:
number
):
void
{
var
line
=
new
ModelLine
(
1
,
text
,
NO_TAB_SIZE
);
line
.
addMarker
(
new
LineMarker
(
'
1
'
,
column
,
stickToPreviousCharacter
));
line
.
addMarker
(
new
LineMarker
(
'
1
'
,
null
,
column
,
stickToPreviousCharacter
));
line
.
applyEdits
({},
[
edit
],
NO_TAB_SIZE
);
...
...
src/vs/editor/test/common/model/editableTextModel.test.ts
浏览文件 @
e3244b74
...
...
@@ -1585,7 +1585,7 @@ suite('EditorModel - EditableTextModel.applyEdits & markers', () => {
// Add markers
markers
.
forEach
((
m
)
=>
{
let
modelMarkerId
=
model
.
_addMarker
(
m
.
lineNumber
,
m
.
column
,
m
.
stickToPreviousCharacter
);
let
modelMarkerId
=
model
.
_addMarker
(
null
,
m
.
lineNumber
,
m
.
column
,
m
.
stickToPreviousCharacter
);
markerId2ModelMarkerId
[
m
.
id
]
=
modelMarkerId
;
});
...
...
src/vs/editor/test/common/model/model.line.test.ts
浏览文件 @
e3244b74
...
...
@@ -1045,7 +1045,7 @@ interface ILightWeightMarker {
suite
(
'
Editor Model - modelLine.applyEdits text & markers
'
,
()
=>
{
function
marker
(
id
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
LineMarker
{
return
new
LineMarker
(
String
(
id
),
column
,
stickToPreviousCharacter
);
return
new
LineMarker
(
String
(
id
),
null
,
column
,
stickToPreviousCharacter
);
}
function
toLightWeightMarker
(
marker
:
LineMarker
):
ILightWeightMarker
{
...
...
@@ -1861,7 +1861,7 @@ suite('Editor Model - modelLine.applyEdits text & markers', () => {
suite
(
'
Editor Model - modelLine.split text & markers
'
,
()
=>
{
function
marker
(
id
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
LineMarker
{
return
new
LineMarker
(
String
(
id
),
column
,
stickToPreviousCharacter
);
return
new
LineMarker
(
String
(
id
),
null
,
column
,
stickToPreviousCharacter
);
}
function
toLightWeightMarker
(
marker
:
LineMarker
):
ILightWeightMarker
{
...
...
@@ -2129,7 +2129,7 @@ suite('Editor Model - modelLine.split text & markers', () => {
suite
(
'
Editor Model - modelLine.append text & markers
'
,
()
=>
{
function
marker
(
id
:
number
,
column
:
number
,
stickToPreviousCharacter
:
boolean
):
LineMarker
{
return
new
LineMarker
(
String
(
id
),
column
,
stickToPreviousCharacter
);
return
new
LineMarker
(
String
(
id
),
null
,
column
,
stickToPreviousCharacter
);
}
function
toLightWeightMarker
(
marker
:
LineMarker
):
ILightWeightMarker
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录