代码规范之Editorconfig

写在前面

.editorconfig主要用于在不同编辑器及IDE中提供代码一致性。例如缩进、换行、编码等,只有几个简单的配置项,官网用一个页面就讲完了

editorconfig简单,很简单,这仅仅是个工具,工具又怎么会搞的太难

谁在用

常见于github上的项目,包括 bootstrapangularhtml5-boilerplate 等明星项目都在使用。

支持怎么样

主流的编辑器都提供了支持,部分通过插件支持。jetbrains家的ideawebstorm等提供了原生支持,atomsublimevscode等需要插件支持。

怎么用

在项目根目录下新建.editorconfig,并配置规则,下面是官方示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

当你打开一个文档即将coding的时候,EditorConfig插件就查找当前被编辑文件所在的目录有么有一个名为 .editorconfig 的文件,如果没有,则开始依次逐级向上查找当前目录的父目录,直到到达工程根目录,或者找到配置了root=true的配置文件。

如果一个工程中出现多个配置文件,EditorConfig配置文件的读取层级是自上而下的(类似于css规则),最深层的配置文件,最后读取。配置规则也是按照读取的顺序来生效,所以路径上离代码最近的配置规则,优先级最高。

注意:Windows 用户在项目根目录创建.editorconfig文件,可以先创建.editorconfig.文件,系统会自动重名为.editorconfig。

配置文件

属性不区分大小写。当他们被插件识别的时候,统一转为小写。通常,如果一个属性没有被设置,编辑器将使用自身的默认设置,换句话说就是,如果有属性没被设置,EditorConfig也不会应用自己的默认设置,只有明确设置了属性,这部分规范才会应用到编辑器。

属性列表:

属性名 作用
root 特殊的属性,必须在配置文件的顶部,在所有的section之外首先设置,设置为true 的时候将结束EditorConfig对配置文件的向上查找
indent_style 设置缩进风格,tab或者space
indent_size 用来定义缩进的列数,如果indent_style为tab,则此属性默认为tab_width。
tab_width 设置tab缩进的列数。默认是indent_size
end_of_line 设置为lfcrcrlf来规定如果要换行,换行符如何生成
charset 设置字符集:latin1, utf-8, utf-8-bom, utf-16be or utf-16le,不建议使用utf-8-bom。
trim_trailing_whitespace 设为true时,去掉行尾的空白字符
insert_final_newline 设为true时,会确保文件在保存的时候,底部总是以一个新行结尾

通配符:

符号 作用
* 匹配除|之外的任意字符串
** 匹配任何字符串
? 匹配任意单个字符
[name] 匹配name字符
[!name] 匹配非name字符
{s1,s2,s3} 匹配给定的任何字符串(以逗号分隔)(自EditorConfig Core 0.11.0起可用)
{num1..num2} 匹配num1和num2之间的任何整数,其中num1和num2可以是正数或负数

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root = true
# [*.{js, py}] 匹配js/py文件并单独设置
indent_style = space
indent_size = 4

# 只匹配py结尾文件
[*.py]
indent_style = tab

# 匹配指定目录下js文件
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json, .travis.yml}]
indent_style = space
indent_size = 4

配置例外

对于所有的属性来讲,如果属性值被设置为:unset,就意味着移除该属性对编辑器的作用,即使该属性之前已经被设置过了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4

# 忽略指定目录, unset的作用是删除该属性的效果
[{/node_modules/**, /build/**, /dist/**, *-lock.json }]
charset = unset
end_of_line = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
indent_style = unset
indent_size = unset

在webstorm中使用

Webstorm默认支持它,配置完成后,不必重新启动Webstorm,它会自动获取配置。

总结

editorconfig很简单,直接看官方文档就行了。