Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
81557c5e
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,发现更多精彩内容 >>
提交
81557c5e
编写于
9月 06, 2016
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix #10887
上级
50487cf2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
93 addition
and
13 deletion
+93
-13
src/vs/editor/common/model/textModel.ts
src/vs/editor/common/model/textModel.ts
+13
-13
src/vs/editor/test/common/model/textModel.test.ts
src/vs/editor/test/common/model/textModel.test.ts
+80
-0
未找到文件。
src/vs/editor/common/model/textModel.ts
浏览文件 @
81557c5e
...
...
@@ -884,10 +884,11 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
}
private
_doFindNextMatchMultiline
(
searchStart
:
Position
,
searchRegex
:
RegExp
):
Range
{
let
deltaOffset
=
this
.
getOffsetAt
(
searchStart
);
let
text
=
this
.
getValueInRange
(
new
Range
(
searchStart
.
lineNumber
,
searchStart
.
column
,
this
.
getLineCount
(),
this
.
getLineMaxColumn
(
this
.
getLineCount
())));
private
_doFindNextMatchMultiline
(
searchStart
:
Position
,
searchRegex
:
RegExp
):
Range
{
let
searchTextStart
:
editorCommon
.
IPosition
=
{
lineNumber
:
searchStart
.
lineNumber
,
column
:
1
};
let
deltaOffset
=
this
.
getOffsetAt
(
searchTextStart
);
let
text
=
this
.
getValueInRange
(
new
Range
(
searchTextStart
.
lineNumber
,
searchTextStart
.
column
,
this
.
getLineCount
(),
this
.
getLineMaxColumn
(
this
.
getLineCount
())));
searchRegex
.
lastIndex
=
searchStart
.
column
-
1
;
let
m
=
searchRegex
.
exec
(
text
);
if
(
m
)
{
let
startOffset
=
deltaOffset
+
m
.
index
;
...
...
@@ -912,8 +913,8 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
let
r
:
Range
;
// Look in first line
text
=
this
.
_lines
[
startLineNumber
-
1
].
text
.
substring
(
searchStart
.
column
-
1
)
;
r
=
this
.
_findFirstMatchInLine
(
searchRegex
,
text
,
startLineNumber
,
searchStart
.
column
-
1
);
text
=
this
.
_lines
[
startLineNumber
-
1
].
text
;
r
=
this
.
_findFirstMatchInLine
(
searchRegex
,
text
,
startLineNumber
,
searchStart
.
column
);
if
(
r
)
{
return
r
;
}
...
...
@@ -921,7 +922,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
for
(
let
i
=
1
;
i
<=
lineCount
;
i
++
)
{
let
lineIndex
=
(
startLineNumber
+
i
-
1
)
%
lineCount
;
text
=
this
.
_lines
[
lineIndex
].
text
;
r
=
this
.
_findFirstMatchInLine
(
searchRegex
,
text
,
lineIndex
+
1
,
0
);
r
=
this
.
_findFirstMatchInLine
(
searchRegex
,
text
,
lineIndex
+
1
,
1
);
if
(
r
)
{
return
r
;
}
...
...
@@ -982,12 +983,11 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
return
null
;
}
private
_findFirstMatchInLine
(
searchRegex
:
RegExp
,
text
:
string
,
lineNumber
:
number
,
deltaOffset
:
number
):
Range
{
var
m
=
searchRegex
.
exec
(
text
);
if
(
!
m
)
{
return
null
;
}
return
new
Range
(
lineNumber
,
m
.
index
+
1
+
deltaOffset
,
lineNumber
,
m
.
index
+
1
+
m
[
0
].
length
+
deltaOffset
);
private
_findFirstMatchInLine
(
searchRegex
:
RegExp
,
text
:
string
,
lineNumber
:
number
,
fromColumn
:
number
):
Range
{
// Set regex to search from column
searchRegex
.
lastIndex
=
fromColumn
-
1
;
var
m
:
RegExpExecArray
=
searchRegex
.
exec
(
text
);
return
m
?
new
Range
(
lineNumber
,
m
.
index
+
1
,
lineNumber
,
m
.
index
+
1
+
m
[
0
].
length
)
:
null
;
}
private
_findLastMatchInLine
(
searchRegex
:
RegExp
,
text
:
string
,
lineNumber
:
number
):
Range
{
...
...
src/vs/editor/test/common/model/textModel.test.ts
浏览文件 @
81557c5e
...
...
@@ -555,6 +555,86 @@ suite('Editor Model - TextModel', () => {
model
.
dispose
();
});
test
(
'
findNextMatch without regex
'
,
()
=>
{
var
testObject
=
new
TextModel
([],
TextModel
.
toRawText
(
'
line line one
\n
line two
\n
three
'
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
=
testObject
.
findNextMatch
(
'
line
'
,
{
lineNumber
:
1
,
column
:
1
},
false
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line
'
,
actual
.
getEndPosition
(),
false
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
6
,
1
,
10
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line
'
,
{
lineNumber
:
1
,
column
:
3
},
false
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
6
,
1
,
10
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line
'
,
actual
.
getEndPosition
(),
false
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line
'
,
actual
.
getEndPosition
(),
false
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
});
test
(
'
findNextMatch with beginning boundary regex
'
,
()
=>
{
var
testObject
=
new
TextModel
([],
TextModel
.
toRawText
(
'
line one
\n
line two
\n
three
'
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
{
lineNumber
:
1
,
column
:
1
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
{
lineNumber
:
1
,
column
:
3
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
});
test
(
'
findNextMatch with beginning boundary regex and line has repetitive beginnings
'
,
()
=>
{
var
testObject
=
new
TextModel
([],
TextModel
.
toRawText
(
'
line line one
\n
line two
\n
three
'
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
{
lineNumber
:
1
,
column
:
1
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
{
lineNumber
:
1
,
column
:
3
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
1
,
5
).
toString
(),
actual
.
toString
());
});
test
(
'
findNextMatch with beginning boundary multiline regex and line has repetitive beginnings
'
,
()
=>
{
var
testObject
=
new
TextModel
([],
TextModel
.
toRawText
(
'
line line one
\n
line two
\n
line three
'
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
=
testObject
.
findNextMatch
(
'
^line.*
\\
nline
'
,
{
lineNumber
:
1
,
column
:
1
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line.*
\\
nline
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
1
,
2
,
5
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
^line.*
\\
nline
'
,
{
lineNumber
:
2
,
column
:
1
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
1
,
3
,
5
).
toString
(),
actual
.
toString
());
});
test
(
'
findNextMatch with ending boundary regex
'
,
()
=>
{
var
testObject
=
new
TextModel
([],
TextModel
.
toRawText
(
'
one line line
\n
two line
\n
three
'
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
=
testObject
.
findNextMatch
(
'
line$
'
,
{
lineNumber
:
1
,
column
:
1
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
10
,
1
,
14
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line$
'
,
{
lineNumber
:
1
,
column
:
4
},
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
10
,
1
,
14
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line$
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
2
,
5
,
2
,
9
).
toString
(),
actual
.
toString
());
actual
=
testObject
.
findNextMatch
(
'
line$
'
,
actual
.
getEndPosition
(),
true
,
false
,
false
);
assert
.
equal
(
new
Range
(
1
,
10
,
1
,
14
).
toString
(),
actual
.
toString
());
});
});
suite
(
'
TextModel.getLineIndentGuide
'
,
()
=>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录