在VSCode使用JS的风格格式化C#代码
最近小组里在梳理开发规范,对于代码格式化方面,考虑到多数同事的开发习惯,决定沿袭TS的风格,即在VSCode中自动格式化时保留左花括号不换行。起初是采用了VSCode的C#FixFormat插件,可以说基本满足要求,唯一不足的是会将->符号分开,变成- >,这样一些指针的写法还是会有问题。
后来看到一种配置VSCode的FormatingOptions的方法,可以自己配置想要的代码格式化。具体方法是在工程根目录下新建一个omnisharp.json(如果要全局生效,则在C:\Users\用户名.omnisharp文件夹下创建)。然后在omnisharp.json中写如以下配置,然后保存即可:
{
"FormattingOptions": {
"newLine": "\n", // 换行符
"useTabs": false, // 将制表符改为空格
"tabSize": 4, // 制表符替换为4个空格
"indentationSize": 4, // 换行缩进字符
"NewLinesForBracesInTypes": false, // 类花括号另起一行
"NewLinesForBracesInMethods": false, // 方法花括号另起一行
"NewLinesForBracesInProperties": false, // 属性花括号另起一行
"NewLinesForBracesInAccessors": false, // 访问器花括号另起一行
"NewLinesForBracesInAnonymousMethods": false, // 匿名方法花括号另起一行
"NewLinesForBracesInControlBlocks": false, // 控制块?花括号另起一行
"NewLinesForBracesInAnonymousTypes": false, // 匿名类花括号另起一行
"NewLinesForBracesInObjectCollectionArrayInitializers": false, // 数组初始化赋值花括号另起一行
"NewLinesForBracesInLambdaExpressionBody": false, // 箭头函数花括号另起一行
"NewLineForElse": false, // else另起一行
"NewLineForCatch": false, // catch另起一行
"NewLineForFinally": false, // finally另起一行
"NewLineForMembersInObjectInit": false, // 对象成员初始化赋值另起一行
"NewLineForMembersInAnonymousTypes": false, // 匿名类成员初始化赋值另起一行
"NewLineForClausesInQuery": false // Query子句?另起一行
}
}
更多配置项可以在这个链接找到:https://github.com/OmniSharp/omnisharp-roslyn/blob/master/src/OmniSharp.Shared/Options/FormattingOptions.cs
___________________________ 2022/11/10编辑 ________________________________
omnisharp.json文件无效解决:
由于某次VSCode更新后omnisharp.json文件的配置突然就失效了,试过放全局目录和工程目录都没效果,苦寻好久没找到解决方法,结果今天一个程序同事也反馈了omnisharp.json文件无效,然后不到一小时就找到了问题所在。(我好菜,我太依赖搜索引擎了5555~)
原来是VSCode的C#插件在某次更新后默认开启使用.editorconfig配置优先,忽略了omnisharp.json的配置,所以可以在VSCode的Settings里设置"omnisharp.enableEditorConfigSupport": false让omnisharp.json文件继续生效,或者找一下.editorconfig里配置格式化的方法。
