Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
40479e9d
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,发现更多精彩内容 >>
提交
40479e9d
编写于
6月 28, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add TextModel.getLineIndentGuide
上级
f97350e0
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
163 addition
and
2 deletion
+163
-2
src/vs/editor/common/editorCommon.ts
src/vs/editor/common/editorCommon.ts
+5
-0
src/vs/editor/common/model/textModel.ts
src/vs/editor/common/model/textModel.ts
+25
-2
src/vs/editor/test/common/model/textModel.test.ts
src/vs/editor/test/common/model/textModel.test.ts
+133
-0
未找到文件。
src/vs/editor/common/editorCommon.ts
浏览文件 @
40479e9d
...
...
@@ -1574,6 +1574,11 @@ export interface ITextModel {
*/
getIndentRanges
():
IndentRange
[];
/**
* @internal
*/
getLineIndentGuide
(
lineNumber
:
number
):
number
;
/**
* Get the text for all lines.
*/
...
...
src/vs/editor/common/model/textModel.ts
浏览文件 @
40479e9d
...
...
@@ -480,11 +480,34 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
this
.
_indentRanges
=
null
;
}
p
ublic
getIndentRanges
():
IndentRange
[]
{
p
rivate
_
getIndentRanges
():
IndentRange
[]
{
if
(
!
this
.
_indentRanges
)
{
this
.
_indentRanges
=
computeRanges
(
this
);
}
return
IndentRange
.
deepCloneArr
(
this
.
_indentRanges
);
return
this
.
_indentRanges
;
}
public
getIndentRanges
():
IndentRange
[]
{
let
indentRanges
=
this
.
_getIndentRanges
();
return
IndentRange
.
deepCloneArr
(
indentRanges
);
}
public
getLineIndentGuide
(
lineNumber
:
number
):
number
{
if
(
lineNumber
<
1
||
lineNumber
>
this
.
getLineCount
())
{
throw
new
Error
(
'
Illegal value
'
+
lineNumber
+
'
for `lineNumber`
'
);
}
let
indentRanges
=
this
.
_getIndentRanges
();
for
(
let
i
=
indentRanges
.
length
-
1
;
i
>=
0
;
i
--
)
{
let
rng
=
indentRanges
[
i
];
if
(
rng
.
startLineNumber
<
lineNumber
&&
lineNumber
<=
rng
.
endLineNumber
)
{
return
1
+
Math
.
floor
(
rng
.
indent
/
this
.
_options
.
tabSize
);
}
}
return
0
;
}
public
getLinesContent
():
string
[]
{
...
...
src/vs/editor/test/common/model/textModel.test.ts
浏览文件 @
40479e9d
...
...
@@ -556,3 +556,136 @@ suite('Editor Model - TextModel', () => {
model
.
dispose
();
});
});
suite
(
'
TextModel.getLineIndentGuide
'
,
()
=>
{
function
assertIndentGuides
(
lines
:[
number
,
string
][]):
void
{
let
text
=
lines
.
map
(
l
=>
l
[
1
]).
join
(
'
\n
'
);
let
model
=
new
TextModel
([],
TextModel
.
toRawText
(
text
,
TextModel
.
DEFAULT_CREATION_OPTIONS
));
let
actual
:
[
number
,
string
][]
=
[];
for
(
let
line
=
1
;
line
<=
model
.
getLineCount
();
line
++
)
{
actual
[
line
-
1
]
=
[
model
.
getLineIndentGuide
(
line
),
model
.
getLineContent
(
line
)];
}
// let expected = lines.map(l => l[0]);
assert
.
deepEqual
(
actual
,
lines
);
model
.
dispose
();
}
test
(
'
getLineIndentGuide one level
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
]);
});
test
(
'
getLineIndentGuide two levels
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
]);
});
test
(
'
getLineIndentGuide three levels
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
A
'
],
[
1
,
'
A
'
],
[
1
,
'
A
'
],
[
2
,
'
A
'
],
[
0
,
'
A
'
],
]);
});
test
(
'
getLineIndentGuide decreasing indent
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
A
'
],
[
0
,
'
A
'
],
[
0
,
'
A
'
],
]);
});
test
(
'
getLineIndentGuide Java
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
class A {
'
],
[
1
,
'
void foo() {
'
],
[
1
,
'
console.log(1);
'
],
[
1
,
'
console.log(2);
'
],
[
1
,
'
}
'
],
[
1
,
''
],
[
1
,
'
void bar() {
'
],
[
1
,
'
console.log(3);
'
],
[
1
,
'
}
'
],
[
0
,
'
}
'
],
[
0
,
'
interface B {
'
],
[
1
,
'
void bar();
'
],
[
0
,
'
}
'
],
]);
});
test
(
'
getLineIndentGuide Javadoc
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
/**
'
],
[
1
,
'
* Comment
'
],
[
1
,
'
*/
'
],
[
0
,
'
class A {
'
],
[
1
,
'
void foo() {
'
],
[
1
,
'
}
'
],
[
0
,
'
}
'
],
]);
});
test
(
'
getLineIndentGuide Whitespace
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
class A {
'
],
[
1
,
''
],
[
1
,
'
void foo() {
'
],
[
1
,
'
'
],
[
1
,
'
return 1;
'
],
[
1
,
'
}
'
],
[
1
,
'
'
],
[
0
,
'
}
'
],
]);
});
test
(
'
getLineIndentGuide Tabs
'
,
()
=>
{
assertIndentGuides
([
[
0
,
'
class A {
'
],
[
1
,
'
\t\t
'
],
[
1
,
'
\t
void foo() {
'
],
[
2
,
'
\t
\t
//hello
'
],
[
2
,
'
\t
return 2;
'
],
[
1
,
'
\t
}
'
],
[
1
,
'
'
],
[
0
,
'
}
'
],
]);
});
test
(
'
getLineIndentGuide checker.ts
'
,
()
=>
{
assertIndentGuides
([
/* 1*/
[
0
,
'
/// <reference path="binder.ts"/>
'
],
/* 2*/
[
0
,
''
],
/* 3*/
[
0
,
'
/* @internal */
'
],
/* 4*/
[
0
,
'
namespace ts {
'
],
/* 5*/
[
1
,
'
let nextSymbolId = 1;
'
],
/* 6*/
[
1
,
'
let nextNodeId = 1;
'
],
/* 7*/
[
1
,
'
let nextMergeId = 1;
'
],
/* 8*/
[
1
,
'
let nextFlowId = 1;
'
],
/* 9*/
[
1
,
''
],
/*10*/
[
1
,
'
export function getNodeId(node: Node): number {
'
],
/*11*/
[
2
,
'
if (!node.id) {
'
],
/*12*/
[
3
,
'
node.id = nextNodeId;
'
],
/*13*/
[
3
,
'
nextNodeId++;
'
],
/*14*/
[
2
,
'
}
'
],
/*15*/
[
2
,
'
return node.id;
'
],
/*16*/
[
1
,
'
}
'
],
/*17*/
[
0
,
'
}
'
],
]);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录