我花了两个月时间,定制出了心目中「完美」的 ESLint 规则,我用四个空格缩进

2017-08-25 17:52:07 +08:00
 xcatliu

包含以下几种配置项:

配置原则

我们依据以下三条原则,研读了 ESLint 所有的配置项,定制出了心目中的「完美」 ESLint 配置。

  1. 能够帮助发现代码错误的规则,全部开启
  2. 配置不应该依赖于某个具体项目,而应尽可能的合理
  3. 帮助保持团队的代码风格统一,而不是限制开发体验

配置解读

我们对每一条配置,都有详尽的注释,这样不仅方便了我们自己查阅某项配置的意义和原因,也使大家更容易配置出自己心目中的规则:

详细的配置内容在这里:

下面列出一个代码片段供参考:

module.exports = {
    parser: 'babel-eslint',
    parserOptions: {
        ecmaVersion: 2017,
        sourceType: 'module',
        ecmaFeatures: {
            experimentalObjectRestSpread: true,
            jsx: true
        }
    },
    env: {
        browser: true,
        node: true,
        commonjs: true,
        es6: true
    },
    // 以当前目录为根目录,不再向上查找 .eslintrc.js
    root: true,
    rules: {
        //
        //
        // 可能的错误
        // 这些规则与 JavaScript 代码中可能的语法错误或逻辑错误有关
        //
        // 禁止 for 循环出现方向错误的循环,比如 for (i = 0; i < 10; i--)
        'for-direction': 'error',
        // getter 必须有返回值,并且禁止返回空,比如 return;
        'getter-return': [
            'error',
            {
                allowImplicit: false
            }
        ],
        // 禁止将 await 写在循环里,因为这样就无法同时发送多个异步请求了
        // @off 要求太严格了,有时需要在循环中写 await
        'no-await-in-loop': 'off',
        // 禁止与负零进行比较
        'no-compare-neg-zero': 'error',
        // 禁止在 if, for, while 里使用赋值语句,除非这个赋值语句被括号包起来了
        'no-cond-assign': [
            'error',
            'except-parens'
        ],
        // 禁止使用 console
        // @off console 的使用很常见
        'no-console': 'off',
        // 禁止将常量作为 if, for, while 里的测试条件,比如 if (true), for (;;),除非循环内部有 break 语句
        'no-constant-condition': [
            'error',
            {
                checkLoops: false
            }
        ],
        // 禁止在正则表达式中出现 Ctrl 键的 ASCII 表示,即禁止使用 /\x1f/
        // 开启此规则,因为字符串中一般不会出现 Ctrl 键,所以一旦出现了,可能是一个代码错误
        'no-control-regex': 'error',
        // @fixable 禁止使用 debugger
        'no-debugger': 'error',
        // 禁止在函数参数中出现重复名称的参数
        'no-dupe-args': 'error',
        // 禁止在对象字面量中出现重复名称的键名
        'no-dupe-keys': 'error',
    }
};

使用方法

请在 GitHub Repo 中查看。

21476 次点击
所在节点    分享创造
66 条回复
hst001
2017-08-26 17:11:24 +08:00
两个空格空间间隔太短,4 个空格太啰嗦,最后选择一个 tab
xcatliu
2017-08-26 17:25:54 +08:00
@hst001 最后选择三个空格,嗯,刚刚好
fy
2017-08-26 17:34:18 +08:00
反正觉得 C 系语言都应该 4 空格缩进,后来看到一些 js 项目的时候心里一阵“????”然后继续用四个空格缩进。
rashawn
2017-08-26 17:38:44 +08:00
个人感觉, 应该一套写代码规则, 一套读代码规则, 楼主可以看一下 three.js 的代码, 属于那种易读的, 方便其他人看源码, 但是写起来空行太多, 一屏看不到太多的代码. 其实可以做一个工具, 两套规则, 自己写的是一套, 然后提交的是另一套.

不过单靠 eslint fix 不太好搞.
rashawn
2017-08-26 17:39:42 +08:00
另外, 楼主你这个规则本身为什么有的最后有逗号有的没有, 我还是习惯最后加逗号的
xcatliu
2017-08-26 17:48:23 +08:00
@fy 感觉现在 js 还是两个空格缩进的人多一些
xcatliu
2017-08-26 18:07:25 +08:00
@rashawn 我习惯于最后一项没有逗号,不过规则中没有开启这个检查,有没有逗号都允许吧。示例代码中最后有代码是因为是复制的代码。
exoticknight
2017-08-26 18:30:42 +08:00
@xcatliu 自从用了两个,就觉得四个太占位置了
si
2017-08-26 20:22:58 +08:00
我一般用 4 个空格,2 个不够明显.
fy
2017-08-27 02:27:34 +08:00
@xcatliu 是呀两个的人很多 但我也觉得两个不明显。而且 json 这种两格不难受吗?
可能也跟我 es6 之前长期用 coffee 有关吧
chuanqirenwu
2017-08-27 12:23:14 +08:00
大神,mobi.css 还在开发中么?
ajan
2017-08-27 14:29:33 +08:00
只用 tab
zhea55
2017-08-27 18:56:43 +08:00
本来一直都是四个空格。直到 nodejs 出来以后,异步 callback 层层堆叠


演变成 2 个了
xcatliu
2017-08-28 07:22:08 +08:00
@chuanqirenwu 在呀,现在已经可以用了呀。主要在做一些推广工作
mosliu
2017-08-28 08:11:40 +08:00
写 java 时习惯 4 个
写 js 直接用了 air-bnb 的规则
自动格式化成两个 看多了也习惯。
whypool
2017-08-28 09:30:02 +08:00
4 空格+分号
bzw875
2017-08-29 09:48:34 +08:00
一行代码也不看,直接 copy 过来
icedx
2017-08-29 10:06:32 +08:00
xcat 每次来都有干货
BearD01001
2017-08-29 10:21:43 +08:00
ESLint 本身不就是规范代码书写的吗, 搞自定义规则感觉像是推翻了它本身存在的意义, 无法理解 😟
SourceMan
2017-08-29 10:26:46 +08:00
从你的标题,我就觉得不完美了,4 空格缩进

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/385804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX