Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
117e40f3
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,发现更多精彩内容 >>
提交
117e40f3
编写于
10月 27, 2017
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make sure we use resource specific config for TS/JS formatting options
上级
e0c0c772
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
71 deletion
+34
-71
extensions/typescript/src/features/formattingConfigurationManager.ts
...typescript/src/features/formattingConfigurationManager.ts
+33
-70
extensions/typescript/src/typescriptMain.ts
extensions/typescript/src/typescriptMain.ts
+1
-1
未找到文件。
extensions/typescript/src/features/formattingConfigurationManager.ts
浏览文件 @
117e40f3
...
...
@@ -3,31 +3,13 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
workspace
as
Workspace
,
FormattingOptions
,
TextDocument
,
CancellationToken
,
WorkspaceConfiguration
,
window
,
Disposable
}
from
'
vscode
'
;
import
{
workspace
as
Workspace
,
FormattingOptions
,
TextDocument
,
CancellationToken
,
window
,
Disposable
,
workspace
,
Uri
}
from
'
vscode
'
;
import
*
as
Proto
from
'
../protocol
'
;
import
{
ITypescriptServiceClient
}
from
'
../typescriptService
'
;
interface
FormattingConfiguration
{
insertSpaceAfterCommaDelimiter
:
boolean
;
insertSpaceAfterConstructor
:
boolean
;
insertSpaceAfterSemicolonInForStatements
:
boolean
;
insertSpaceBeforeAndAfterBinaryOperators
:
boolean
;
insertSpaceAfterKeywordsInControlFlowStatements
:
boolean
;
insertSpaceAfterFunctionKeywordForAnonymousFunctions
:
boolean
;
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
:
boolean
;
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
:
boolean
;
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
:
boolean
;
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
:
boolean
;
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
:
boolean
;
insertSpaceAfterTypeAssertion
:
boolean
;
insertSpaceBeforeFunctionParenthesis
:
boolean
;
placeOpenBraceOnNewLineForFunctions
:
boolean
;
placeOpenBraceOnNewLineForControlBlocks
:
boolean
;
}
namespace
FormattingConfiguration
{
export
function
equals
(
a
:
FormattingConfiguration
,
b
:
FormattingConfiguration
):
boolean
{
export
function
equals
(
a
:
Proto
.
FormatCodeSettings
,
b
:
Proto
.
FormatCodeSettings
):
boolean
{
let
keys
=
Object
.
keys
(
a
);
for
(
let
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
let
key
=
keys
[
i
];
...
...
@@ -37,30 +19,10 @@ namespace FormattingConfiguration {
}
return
true
;
}
export
const
def
:
FormattingConfiguration
=
{
insertSpaceAfterCommaDelimiter
:
true
,
insertSpaceAfterConstructor
:
false
,
insertSpaceAfterSemicolonInForStatements
:
true
,
insertSpaceBeforeAndAfterBinaryOperators
:
true
,
insertSpaceAfterKeywordsInControlFlowStatements
:
true
,
insertSpaceAfterFunctionKeywordForAnonymousFunctions
:
false
,
insertSpaceBeforeFunctionParenthesis
:
false
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
:
false
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
:
false
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
:
true
,
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
:
false
,
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
:
false
,
insertSpaceAfterTypeAssertion
:
false
,
placeOpenBraceOnNewLineForFunctions
:
false
,
placeOpenBraceOnNewLineForControlBlocks
:
false
};
}
export
default
class
FormattingConfigurationManager
{
private
onDidCloseTextDocumentSub
:
Disposable
|
undefined
;
private
config
:
FormattingConfiguration
=
FormattingConfiguration
.
def
;
private
formatOptions
:
{
[
key
:
string
]:
Proto
.
FormatCodeSettings
|
undefined
;
}
=
Object
.
create
(
null
);
public
constructor
(
...
...
@@ -102,56 +64,57 @@ export default class FormattingConfigurationManager {
options
:
FormattingOptions
,
token
:
CancellationToken
|
undefined
):
Promise
<
void
>
{
const
key
=
document
.
uri
.
toString
();
const
currentOptions
=
this
.
formatOptions
[
key
];
if
(
currentOptions
&&
currentOptions
.
tabSize
===
options
.
tabSize
&&
currentOptions
.
indentSize
===
options
.
tabSize
&&
currentOptions
.
convertTabsToSpaces
===
options
.
insertSpaces
)
{
const
file
=
this
.
client
.
normalizePath
(
document
.
uri
);
if
(
!
file
)
{
return
;
}
const
absPath
=
this
.
client
.
normalizePath
(
document
.
uri
);
if
(
!
absPath
)
{
const
key
=
document
.
uri
.
toString
();
const
cachedOptions
=
this
.
formatOptions
[
key
];
const
formatOptions
=
this
.
getFormatOptions
(
document
.
uri
,
options
);
if
(
cachedOptions
&&
FormattingConfiguration
.
equals
(
cachedOptions
,
formatOptions
))
{
return
;
}
const
formatOptions
=
this
.
getFormatOptions
(
options
);
const
args
:
Proto
.
ConfigureRequestArguments
=
{
file
:
absPath
,
file
:
file
,
formatOptions
:
formatOptions
};
await
this
.
client
.
execute
(
'
configure
'
,
args
,
token
);
this
.
formatOptions
[
key
]
=
formatOptions
;
}
public
updateConfiguration
(
config
:
WorkspaceConfiguration
):
void
{
const
newConfig
=
config
.
get
(
'
format
'
,
FormattingConfiguration
.
def
);
if
(
!
FormattingConfiguration
.
equals
(
this
.
config
,
newConfig
))
{
this
.
formatOptions
=
Object
.
create
(
null
);
}
this
.
config
=
newConfig
;
public
reset
()
{
this
.
formatOptions
=
Object
.
create
(
null
);
}
private
getFormatOptions
(
options
:
FormattingOptions
):
Proto
.
FormatCodeSettings
{
private
getFormatOptions
(
resource
:
Uri
,
options
:
FormattingOptions
):
Proto
.
FormatCodeSettings
{
const
config
=
workspace
.
getConfiguration
(
'
typescript
'
,
resource
);
return
{
tabSize
:
options
.
tabSize
,
indentSize
:
options
.
tabSize
,
convertTabsToSpaces
:
options
.
insertSpaces
,
// We can use \n here since the editor normalizes later on to its line endings.
newLineCharacter
:
'
\n
'
,
insertSpaceAfterCommaDelimiter
:
this
.
config
.
insertSpaceAfterCommaDelimiter
,
insertSpaceAfterConstructor
:
this
.
config
.
insertSpaceAfterConstructor
,
insertSpaceAfterSemicolonInForStatements
:
this
.
config
.
insertSpaceAfterSemicolonInForStatements
,
insertSpaceBeforeAndAfterBinaryOperators
:
this
.
config
.
insertSpaceBeforeAndAfterBinaryOperators
,
insertSpaceAfterKeywordsInControlFlowStatements
:
this
.
config
.
insertSpaceAfterKeywordsInControlFlowStatements
,
insertSpaceAfterFunctionKeywordForAnonymousFunctions
:
this
.
config
.
insertSpaceAfterFunctionKeywordForAnonymousFunctions
,
insertSpaceBeforeFunctionParenthesis
:
this
.
config
.
insertSpaceBeforeFunctionParenthesis
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
:
this
.
config
.
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
:
this
.
config
.
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
:
this
.
config
.
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
,
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
:
this
.
config
.
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
,
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
:
this
.
config
.
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
,
insertSpaceAfterTypeAssertion
:
this
.
config
.
insertSpaceAfterTypeAssertion
,
placeOpenBraceOnNewLineForFunctions
:
this
.
config
.
placeOpenBraceOnNewLineForFunctions
,
placeOpenBraceOnNewLineForControlBlocks
:
this
.
config
.
placeOpenBraceOnNewLineForControlBlocks
,
insertSpaceAfterCommaDelimiter
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterCommaDelimiter
'
)
,
insertSpaceAfterConstructor
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterConstructor
'
)
,
insertSpaceAfterSemicolonInForStatements
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterSemicolonInForStatements
'
)
,
insertSpaceBeforeAndAfterBinaryOperators
:
config
.
get
<
boolean
>
(
'
insertSpaceBeforeAndAfterBinaryOperators
'
)
,
insertSpaceAfterKeywordsInControlFlowStatements
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterKeywordsInControlFlowStatements
'
)
,
insertSpaceAfterFunctionKeywordForAnonymousFunctions
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterFunctionKeywordForAnonymousFunctions
'
)
,
insertSpaceBeforeFunctionParenthesis
:
config
.
get
<
boolean
>
(
'
insertSpaceBeforeFunctionParenthesis
'
)
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis
'
)
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets
'
)
,
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces
'
)
,
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces
'
)
,
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces
'
)
,
insertSpaceAfterTypeAssertion
:
config
.
get
<
boolean
>
(
'
insertSpaceAfterTypeAssertion
'
)
,
placeOpenBraceOnNewLineForFunctions
:
config
.
get
<
boolean
>
(
'
placeOpenBraceOnNewLineForFunctions
'
)
,
placeOpenBraceOnNewLineForControlBlocks
:
config
.
get
<
boolean
>
(
'
placeOpenBraceOnNewLineForControlBlocks
'
)
,
};
}
}
extensions/typescript/src/typescriptMain.ts
浏览文件 @
117e40f3
...
...
@@ -320,7 +320,6 @@ class LanguageProvider {
private
configurationChanged
():
void
{
const
config
=
workspace
.
getConfiguration
(
this
.
id
);
this
.
updateValidate
(
config
.
get
(
validateSetting
,
true
));
this
.
formattingOptionsManager
.
updateConfiguration
(
config
);
for
(
const
toUpdate
of
this
.
toUpdateOnConfigurationChanged
)
{
toUpdate
.
updateConfiguration
();
...
...
@@ -367,6 +366,7 @@ class LanguageProvider {
this
.
syntaxDiagnostics
=
Object
.
create
(
null
);
this
.
bufferSyncSupport
.
reOpenDocuments
();
this
.
bufferSyncSupport
.
requestAllDiagnostics
();
this
.
formattingOptionsManager
.
reset
();
this
.
registerVersionDependentProviders
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录