Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
19279ee3
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,发现更多精彩内容 >>
提交
19279ee3
编写于
2月 09, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extract methods around bracket handling
上级
65701cb9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
34 deletion
+49
-34
src/vs/editor/common/model/textModelWithTokens.ts
src/vs/editor/common/model/textModelWithTokens.ts
+49
-34
未找到文件。
src/vs/editor/common/model/textModelWithTokens.ts
浏览文件 @
19279ee3
...
...
@@ -861,6 +861,29 @@ export class TextModelWithTokens extends TextModel implements EditorCommon.IToke
return
BracketsHelper
.
matchBracket
(
this
,
this
.
validatePosition
(
position
),
inaccurateResultAcceptable
);
}
private
static
_findPrevBracketInToken
(
reversedBracketRegex
:
RegExp
,
lineNumber
:
number
,
lineText
:
string
,
currentTokenStart
:
number
,
currentTokenEnd
:
number
):
EditorCommon
.
IFoundBracket
{
// Because JS does not support backwards regex search, we search forwards in a reversed string ;)
let
currentTokenReversedText
=
''
;
for
(
let
index
=
currentTokenEnd
-
1
;
index
>=
currentTokenStart
;
index
--
)
{
currentTokenReversedText
+=
lineText
.
charAt
(
index
);
}
let
m
=
currentTokenReversedText
.
match
(
reversedBracketRegex
);
if
(
!
m
)
{
return
null
;
}
let
matchOffset
=
currentTokenReversedText
.
length
-
1
-
m
.
index
;
let
matchLength
=
m
[
0
].
length
;
let
absoluteMatchOffset
=
currentTokenStart
+
matchOffset
;
return
{
range
:
new
Range
(
lineNumber
,
absoluteMatchOffset
+
1
,
lineNumber
,
absoluteMatchOffset
+
1
+
matchLength
),
text
:
lineText
.
substr
(
absoluteMatchOffset
,
matchLength
)
};
}
public
findPrevBracket
(
_position
:
EditorCommon
.
IPosition
):
EditorCommon
.
IFoundBracket
{
if
(
this
.
_isDisposed
)
{
throw
new
Error
(
'
TextModelWithTokens.findPrevBracket: Model is disposed
'
);
...
...
@@ -879,7 +902,7 @@ export class TextModelWithTokens extends TextModel implements EditorCommon.IToke
let
currentTokenEnd
=
lineText
.
length
;
if
(
lineNumber
===
position
.
lineNumber
)
{
tokensLength
=
lineTokens
.
findIndexOfOffset
(
position
.
column
-
1
);
currentTokenEnd
=
Math
.
min
(
currentTokenEnd
,
position
.
column
-
1
)
;
currentTokenEnd
=
position
.
column
-
1
;
}
for
(
let
tokenIndex
=
tokensLength
;
tokenIndex
>=
0
;
tokenIndex
--
)
{
...
...
@@ -888,31 +911,34 @@ export class TextModelWithTokens extends TextModel implements EditorCommon.IToke
// let currentTokenType = getType(tokensMap, currentToken);
// TODO@Alex: skip comment, string, regex token types
// Because JS does not support backwards regex search, we search forwards in a reversed string ;)
let
currentTokenReversedText
=
''
;
for
(
let
index
=
currentTokenEnd
-
1
;
index
>=
currentTokenStart
;
index
--
)
{
currentTokenReversedText
+=
lineText
.
charAt
(
index
);
let
r
=
TextModelWithTokens
.
_findPrevBracketInToken
(
regex
,
lineNumber
,
lineText
,
currentTokenStart
,
currentTokenEnd
);
if
(
r
)
{
return
r
;
}
currentTokenEnd
=
currentTokenStart
;
}
}
let
m
=
currentTokenReversedText
.
match
(
regex
);
return
null
;
}
if
(
!
m
)
{
currentTokenEnd
=
currentTokenStart
;
continue
;
}
private
static
_findNextBracketInToken
(
bracketRegex
:
RegExp
,
lineNumber
:
number
,
lineText
:
string
,
currentTokenStart
:
number
,
currentTokenEnd
:
number
):
EditorCommon
.
IFoundBracket
{
let
currentTokenText
=
lineText
.
substring
(
currentTokenStart
,
currentTokenEnd
);
let
matchOffset
=
currentTokenReversedText
.
length
-
1
-
m
.
index
;
let
matchLength
=
m
[
0
].
length
;
let
absoluteMatchOffset
=
currentTokenStart
+
matchOffset
;
let
m
=
currentTokenText
.
match
(
bracketRegex
);
return
{
range
:
new
Range
(
lineNumber
,
absoluteMatchOffset
+
1
,
lineNumber
,
absoluteMatchOffset
+
1
+
matchLength
),
text
:
lineText
.
substr
(
absoluteMatchOffset
,
matchLength
)
};
}
if
(
!
m
)
{
return
null
;
}
return
null
;
let
matchOffset
=
m
.
index
;
let
matchLength
=
m
[
0
].
length
;
let
absoluteMatchOffset
=
currentTokenStart
+
matchOffset
;
return
{
range
:
new
Range
(
lineNumber
,
absoluteMatchOffset
+
1
,
lineNumber
,
absoluteMatchOffset
+
1
+
matchLength
),
text
:
lineText
.
substr
(
absoluteMatchOffset
,
matchLength
)
};
}
public
findNextBracket
(
_position
:
EditorCommon
.
IPosition
):
EditorCommon
.
IFoundBracket
{
...
...
@@ -942,23 +968,12 @@ export class TextModelWithTokens extends TextModel implements EditorCommon.IToke
// TODO@Alex: skip comment, string, regex token type
let
currentTokenEnd
=
tokenIndex
+
1
<
tokensLength
?
getStartIndex
(
tokens
[
tokenIndex
+
1
])
:
lineText
.
length
;
let
currentTokenText
=
lineText
.
substring
(
currentTokenStart
,
currentTokenEnd
);
let
m
=
currentTokenText
.
match
(
regex
);
if
(
!
m
)
{
currentTokenStart
=
currentTokenEnd
;
continue
;
let
r
=
TextModelWithTokens
.
_findNextBracketInToken
(
regex
,
lineNumber
,
lineText
,
currentTokenStart
,
currentTokenEnd
);
if
(
r
)
{
return
r
;
}
let
matchOffset
=
m
.
index
;
let
matchLength
=
m
[
0
].
length
;
let
absoluteMatchOffset
=
currentTokenStart
+
matchOffset
;
return
{
range
:
new
Range
(
lineNumber
,
absoluteMatchOffset
+
1
,
lineNumber
,
absoluteMatchOffset
+
1
+
matchLength
),
text
:
lineText
.
substr
(
absoluteMatchOffset
,
matchLength
)
};
currentTokenStart
=
currentTokenEnd
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录