Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
443d914e
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,发现更多精彩内容 >>
提交
443d914e
编写于
1月 07, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
speed up getWordAtPosSlow, #2312
上级
3887f75d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
35 addition
and
33 deletion
+35
-33
src/vs/editor/common/model/wordHelper.ts
src/vs/editor/common/model/wordHelper.ts
+35
-33
未找到文件。
src/vs/editor/common/model/wordHelper.ts
浏览文件 @
443d914e
...
@@ -63,6 +63,12 @@ function reverse(str: string): string {
...
@@ -63,6 +63,12 @@ function reverse(str: string): string {
}
}
function
getWordAtPosFast
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
function
getWordAtPosFast
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
// matches at the desired column, once to right
// and once to the left. The latter is achived
// by reversing the string. Falls back to getWordAtPosSlow
// when a word is longer than 100 characters. Will
// not work with regular expressions that check the
// shape of a word, like /aabb/
let
pos
=
column
-
1
-
textOffset
;
let
pos
=
column
-
1
-
textOffset
;
wordDefinition
.
lastIndex
=
pos
;
wordDefinition
.
lastIndex
=
pos
;
...
@@ -83,13 +89,10 @@ function getWordAtPosFast(column: number, wordDefinition: RegExp, text: string,
...
@@ -83,13 +89,10 @@ function getWordAtPosFast(column: number, wordDefinition: RegExp, text: string,
}
else
if
(
wordDefinition
.
lastIndex
===
100
)
{
}
else
if
(
wordDefinition
.
lastIndex
===
100
)
{
// |W*100 -> very long word
// |W*100 -> very long word
wordDefinition
.
lastIndex
=
0
;
// reset!
return
getWordAtPosSlow
(
column
,
wordDefinition
,
text
,
textOffset
);
return
getWordAtTextSlow
(
column
,
wordDefinition
,
text
,
textOffset
);
}
}
}
}
wordDefinition
.
lastIndex
=
0
;
//reset!
if
(
!
rightMatch
&&
!
leftMatch
)
{
if
(
!
rightMatch
&&
!
leftMatch
)
{
// nothing matched
// nothing matched
return
null
;
return
null
;
...
@@ -118,40 +121,39 @@ function getWordAtPosFast(column: number, wordDefinition: RegExp, text: string,
...
@@ -118,40 +121,39 @@ function getWordAtPosFast(column: number, wordDefinition: RegExp, text: string,
};
};
}
}
export
function
getWordAtTextSlow
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
function
getWordAtPosSlow
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
// matches all words starting at the beginning
// of the input until it finds a match that encloses
// the desired column. slow but correct
var
words
=
text
.
match
(
wordDefinition
),
let
pos
=
column
-
1
-
textOffset
;
k
:
number
,
wordDefinition
.
lastIndex
=
0
;
startWord
:
number
,
endWord
:
number
,
startColumn
:
number
,
endColumn
:
number
,
word
:
string
;
if
(
words
)
{
let
match
:
RegExpMatchArray
;
for
(
k
=
0
;
k
<
words
.
length
;
k
++
)
{
while
(
match
=
wordDefinition
.
exec
(
text
))
{
word
=
words
[
k
].
trim
();
if
(
word
.
length
>
0
)
{
startWord
=
text
.
indexOf
(
word
,
endWord
);
endWord
=
startWord
+
word
.
length
;
startColumn
=
textOffset
+
startWord
+
1
;
if
(
match
.
index
>
pos
)
{
endColumn
=
textOffset
+
endWord
+
1
;
// |nW -> matched only after the pos
return
null
;
if
(
startColumn
<=
column
&&
column
<=
endColumn
)
{
}
else
if
(
wordDefinition
.
lastIndex
>=
pos
)
{
// W|W -> match encloses pos
return
{
return
{
word
:
word
,
word
:
match
[
0
]
,
startColumn
:
startColumn
,
startColumn
:
textOffset
+
1
+
match
.
index
,
endColumn
:
endColumn
endColumn
:
textOffset
+
1
+
wordDefinition
.
lastIndex
};
};
}
}
}
}
}
}
return
null
;
return
null
;
}
}
export
function
getWordAtText
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
export
function
getWordAtText
(
column
:
number
,
wordDefinition
:
RegExp
,
text
:
string
,
textOffset
:
number
):
IWordAtPosition
{
return
getWordAtPosFast
(
column
,
wordDefinition
,
text
,
textOffset
);
const
result
=
getWordAtPosFast
(
column
,
wordDefinition
,
text
,
textOffset
);
// both (getWordAtPosFast and getWordAtPosSlow) leave the wordDefinition-RegExp
// in an undefined state and to not confuse other users of the wordDefinition
// we reset the lastIndex
wordDefinition
.
lastIndex
=
0
;
return
result
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录