Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
004d0da5
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,发现更多精彩内容 >>
提交
004d0da5
编写于
10月 20, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #36090: JS: editor.autoIndent seems to be broken
上级
0a0033b8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
94 addition
and
0 deletion
+94
-0
src/vs/editor/common/controller/cursorTypeOperations.ts
src/vs/editor/common/controller/cursorTypeOperations.ts
+7
-0
src/vs/editor/test/common/controller/cursor.test.ts
src/vs/editor/test/common/controller/cursor.test.ts
+87
-0
未找到文件。
src/vs/editor/common/controller/cursorTypeOperations.ts
浏览文件 @
004d0da5
...
...
@@ -324,6 +324,13 @@ export class TypeOperations {
}
// no enter rules applied, we should check indentation rules then.
if
(
!
config
.
autoIndent
)
{
// Nothing special
let
lineText
=
model
.
getLineContent
(
range
.
startLineNumber
);
let
indentation
=
strings
.
getLeadingWhitespace
(
lineText
).
substring
(
0
,
range
.
startColumn
-
1
);
return
TypeOperations
.
_typeCommand
(
range
,
'
\n
'
+
config
.
normalizeIndentation
(
indentation
),
keepPosition
);
}
let
ir
=
LanguageConfigurationRegistry
.
getIndentForEnter
(
model
,
range
,
{
unshiftIndent
:
(
indent
)
=>
{
return
TypeOperations
.
unshiftIndent
(
config
,
indent
);
...
...
src/vs/editor/test/common/controller/cursor.test.ts
浏览文件 @
004d0da5
...
...
@@ -3106,6 +3106,93 @@ suite('Editor Controller - Indentation Rules', () => {
assert
.
equal
(
model
.
getLineContent
(
3
),
'
}
'
);
});
});
test
(
'
issue #36090: JS: editor.autoIndent seems to be broken
'
,
()
=>
{
class
JSMode
extends
MockMode
{
private
static
_id
=
new
LanguageIdentifier
(
'
indentRulesMode
'
,
4
);
constructor
()
{
super
(
JSMode
.
_id
);
this
.
_register
(
LanguageConfigurationRegistry
.
register
(
this
.
getLanguageIdentifier
(),
{
brackets
:
[
[
'
{
'
,
'
}
'
],
[
'
[
'
,
'
]
'
],
[
'
(
'
,
'
)
'
]
],
indentationRules
:
{
// ^(.*\*/)?\s*\}.*$
decreaseIndentPattern
:
/^
((?!
.*
?\/\*)
.*
\*\/)?\s
*
[\}\]\)]
.*$/
,
// ^.*\{[^}"']*$
increaseIndentPattern
:
/^
((?!\/\/)
.
)
*
(\{[^
}"'`
]
*|
\([^
)"'`
]
*|
\[[^\]
"'`
]
*
)
$/
},
onEnterRules
:
[
{
// e.g. /** | */
beforeText
:
/^
\s
*
\/\*\*(?!\/)([^\*]
|
\*(?!\/))
*$/
,
afterText
:
/^
\s
*
\*\/
$/
,
action
:
{
indentAction
:
IndentAction
.
IndentOutdent
,
appendText
:
'
*
'
}
},
{
// e.g. /** ...|
beforeText
:
/^
\s
*
\/\*\*(?!\/)([^\*]
|
\*(?!\/))
*$/
,
action
:
{
indentAction
:
IndentAction
.
None
,
appendText
:
'
*
'
}
},
{
// e.g. * ...|
beforeText
:
/^
(\t
|
(\ \ ))
*
\ \*(\ ([^\*]
|
\*(?!\/))
*
)?
$/
,
action
:
{
indentAction
:
IndentAction
.
None
,
appendText
:
'
*
'
}
},
{
// e.g. */|
beforeText
:
/^
(\t
|
(\ \ ))
*
\ \*\/\s
*$/
,
action
:
{
indentAction
:
IndentAction
.
None
,
removeText
:
1
}
},
{
// e.g. *-----*/|
beforeText
:
/^
(\t
|
(\ \ ))
*
\ \*[^/]
*
\*\/\s
*$/
,
action
:
{
indentAction
:
IndentAction
.
None
,
removeText
:
1
}
}
]
}));
}
}
let
mode
=
new
JSMode
();
let
model
=
Model
.
createFromString
(
[
'
class ItemCtrl {
'
,
'
getPropertiesByItemId(id) {
'
,
'
return this.fetchItem(id)
'
,
'
.then(item => {
'
,
'
return this.getPropertiesOfItem(item);
'
,
'
});
'
,
'
}
'
,
'
}
'
,
].
join
(
'
\n
'
),
undefined
,
mode
.
getLanguageIdentifier
()
);
withMockCodeEditor
(
null
,
{
model
:
model
,
autoIndent
:
false
},
(
editor
,
cursor
)
=>
{
moveTo
(
cursor
,
7
,
6
,
false
);
assertCursor
(
cursor
,
new
Selection
(
7
,
6
,
7
,
6
));
cursorCommand
(
cursor
,
H
.
Type
,
{
text
:
'
\n
'
},
'
keyboard
'
);
assert
.
equal
(
model
.
getValue
(),
[
'
class ItemCtrl {
'
,
'
getPropertiesByItemId(id) {
'
,
'
return this.fetchItem(id)
'
,
'
.then(item => {
'
,
'
return this.getPropertiesOfItem(item);
'
,
'
});
'
,
'
}
'
,
'
'
,
'
}
'
,
].
join
(
'
\n
'
)
);
assertCursor
(
cursor
,
new
Selection
(
8
,
5
,
8
,
5
));
});
model
.
dispose
();
mode
.
dispose
();
});
});
interface
ICursorOpts
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录