.eslintrc.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. module.exports = {
  2. root: true,
  3. env: {
  4. browser: true,
  5. commonjs: true,
  6. es6: true,
  7. },
  8. globals: {
  9. Atomics: 'readonly',
  10. SharedArrayBuffer: 'readonly',
  11. },
  12. extends: [],
  13. parserOptions: {
  14. // https://eslint.vuejs.org/user-guide/#how-to-use-a-custom-parser
  15. parser: '@typescript-eslint/parser',
  16. ecmaVersion: 2018,
  17. sourceType: 'module',
  18. },
  19. rules: {
  20. '@typescript-eslint/no-this-alias': ['off'],
  21. '@typescript-eslint/no-namespace': 'off',
  22. // 禁止使用debugger
  23. 'no-debugger': 2,
  24. // 强制使用===和!==, 忽略 null
  25. 'eqeqeq': ['error', 'always', { null: 'ignore' }],
  26. 'no-dupe-keys': 2, // 在创建对象字面量时不允许键重复 {a:1,a:1}
  27. 'no-dupe-args': 2, // 函数参数不能重复
  28. 'no-duplicate-case': 2, // switch中的case标签不能重复
  29. 'no-func-assign': 2, // 禁止重复的函数声明
  30. 'no-redeclare': 2, // 禁止重复声明变量
  31. // 指定数组的元素之间要以空格隔开(, 后面), never参数:[ 之前和 ] 之后不能带空格,always参数:[ 之前和 ] 之后必须带空格
  32. 'array-bracket-spacing': [2, 'never'],
  33. // 禁止或强制在单行代码块中使用空格(禁用)
  34. 'block-spacing': [1, 'never'],
  35. // 强制使用一致的缩进 第二个参数为 "tab" 时,会使用tab,
  36. // if while function 后面的{必须与if在同一行,java风格。
  37. 'brace-style': [
  38. 2,
  39. '1tbs',
  40. {
  41. allowSingleLine: true,
  42. },
  43. ],
  44. // 双峰驼命名格式
  45. camelcase: ['error', { allow: ['^\\$_'] }],
  46. // 控制逗号前后的空格
  47. 'comma-spacing': [
  48. 2,
  49. {
  50. before: false,
  51. after: true,
  52. },
  53. ],
  54. // 强制使用尾逗号
  55. // https://github.com/airbnb/javascript#commas--dangling
  56. 'comma-dangle': [
  57. 'error',
  58. {
  59. arrays: 'always-multiline',
  60. objects: 'always-multiline',
  61. imports: 'always-multiline',
  62. exports: 'always-multiline',
  63. functions: 'always-multiline',
  64. },
  65. ],
  66. // 控制逗号在行尾出现还是在行首出现 (默认行尾)
  67. // http://eslint.org/docs/rules/comma-style
  68. 'comma-style': [2, 'last'],
  69. // "SwitchCase" (默认:0) 强制 switch 语句中的 case 子句的缩进水平
  70. // 以方括号取对象属性时,[ 后面和 ] 前面是否需要空格, 可选参数 never, always
  71. 'computed-property-spacing': [2, 'never'],
  72. // 用于指统一在回调函数中指向this的变量名,箭头函数中的this已经可以指向外层调用者,应该没卵用了
  73. // e.g [0,"that"] 指定只能 var that = this. that不能指向其他任何值,this也不能赋值给that以外的其他值
  74. 'consistent-this': [1, 'that'],
  75. // 强制使用命名的 function 表达式
  76. 'func-names': 0,
  77. // 文件末尾强制换行
  78. 'eol-last': 0,
  79. indent: [
  80. 'error',
  81. 4,
  82. {
  83. SwitchCase: 1,
  84. },
  85. ],
  86. // 强制在对象字面量的属性中键和值之间使用一致的间距
  87. 'key-spacing': [
  88. 2,
  89. {
  90. beforeColon: false,
  91. afterColon: true,
  92. },
  93. ],
  94. // 强制使用一致的换行风格
  95. 'linebreak-style': [0, 'unix'],
  96. // 要求在注释周围有空行 ( 要求在块级注释之前有一空行)
  97. 'lines-around-comment': [
  98. 1,
  99. {
  100. beforeBlockComment: true,
  101. },
  102. ],
  103. // 强制一致地使用函数声明或函数表达式,方法定义风格,参数:
  104. // declaration: 强制使用方法声明的方式,function f(){} e.g [2, "declaration"]
  105. // expression:强制使用方法表达式的方式,var f = function() {} e.g [2, "expression"]
  106. // allowArrowFunctions: declaration风格中允许箭头函数。 e.g [2, "declaration", { "allowArrowFunctions": true }]
  107. 'func-style': 0,
  108. // 强制回调函数最大嵌套深度 5层
  109. 'max-nested-callbacks': [1, 5],
  110. // 禁止使用指定的标识符
  111. 'id-blacklist': 0,
  112. // 强制标识符的最新和最大长度
  113. 'id-length': 0,
  114. // 要求标识符匹配一个指定的正则表达式
  115. 'id-match': 0,
  116. // 强制在 JSX 属性中一致地使用双引号或单引号
  117. 'jsx-quotes': 0,
  118. // 强制在关键字前后使用一致的空格 (前后腰需要)
  119. 'keyword-spacing': 2,
  120. // 强制一行的最大长度
  121. 'max-len': [1, 200],
  122. // 强制最大行数
  123. 'max-lines': 0,
  124. // 强制 function 定义中最多允许的参数数量
  125. 'max-params': [1, 7],
  126. // 强制 function 块最多允许的的语句数量
  127. 'max-statements': [1, 200],
  128. // 强制每一行中所允许的最大语句数量
  129. 'max-statements-per-line': 0,
  130. // 要求构造函数首字母大写 (要求调用 new 操作符时有首字母大小的函数,允许调用首字母大写的函数时没有 new 操作符。)
  131. 'new-cap': [
  132. 2,
  133. {
  134. newIsCap: true,
  135. capIsNew: false,
  136. },
  137. ],
  138. // 要求调用无参构造函数时有圆括号
  139. 'new-parens': 2,
  140. // 要求或禁止 var 声明语句后有一行空行
  141. 'newline-after-var': 0,
  142. // 禁止使用 Array 构造函数
  143. 'no-array-constructor': 2,
  144. // 禁用按位运算符
  145. 'no-bitwise': 0,
  146. // 要求 return 语句之前有一空行
  147. 'newline-before-return': 0,
  148. // 要求方法链中每个调用都有一个换行符
  149. 'newline-per-chained-call': 1,
  150. // 禁用 continue 语句
  151. 'no-continue': 0,
  152. // 禁止在代码行后使用内联注释
  153. 'no-inline-comments': 0,
  154. // 禁止 if 作为唯一的语句出现在 else 语句中
  155. 'no-lonely-if': 0,
  156. // 禁止混合使用不同的操作符
  157. 'no-mixed-operators': 0,
  158. // 不允许空格和 tab 混合缩进
  159. 'no-mixed-spaces-and-tabs': 2,
  160. // 不允许多个空行
  161. 'no-multiple-empty-lines': [
  162. 2,
  163. {
  164. max: 2,
  165. },
  166. ],
  167. // 不允许否定的表达式
  168. 'no-negated-condition': 0,
  169. // 不允许使用嵌套的三元表达式
  170. 'no-nested-ternary': 'error',
  171. // 禁止使用 Object 的构造函数
  172. 'no-new-object': 2,
  173. // 禁止使用一元操作符 ++ 和 --
  174. 'no-plusplus': 0,
  175. // 禁止使用特定的语法
  176. 'no-restricted-syntax': 0,
  177. // 禁止 function 标识符和括号之间出现空格
  178. 'no-spaced-func': 2,
  179. // 不允许使用三元操作符
  180. 'no-ternary': 0,
  181. // 禁用行尾空格
  182. 'no-trailing-spaces': 2,
  183. // 禁止标识符中有悬空下划线_bar
  184. 'no-underscore-dangle': 0,
  185. // 禁止可以在有更简单的可替代的表达式时使用三元操作符
  186. 'no-unneeded-ternary': 2,
  187. // 禁止属性前有空白
  188. 'no-whitespace-before-property': 0,
  189. // 强制花括号内换行符的一致性
  190. 'object-curly-newline': 0,
  191. // 强制在花括号中使用一致的空格
  192. 'object-curly-spacing': 0,
  193. // 强制将对象的属性放在不同的行上
  194. 'object-property-newline': 0,
  195. // 强制函数中的变量要么一起声明要么分开声明
  196. 'one-var': [
  197. 2,
  198. {
  199. initialized: 'never',
  200. },
  201. ],
  202. // 要求或禁止在 var 声明周围换行
  203. 'one-var-declaration-per-line': 0,
  204. // 要求或禁止在可能的情况下要求使用简化的赋值操作符
  205. 'operator-assignment': 0,
  206. // 强制操作符使用一致的换行符
  207. 'operator-linebreak': [
  208. 2,
  209. 'after',
  210. {
  211. overrides: {
  212. '?': 'before',
  213. ':': 'before',
  214. },
  215. },
  216. ],
  217. // 要求或禁止块内填充
  218. 'padded-blocks': 0,
  219. // 要求对象字面量属性名称用引号括起来
  220. 'quote-props': 0,
  221. // 强制使用一致的反勾号、双引号或单引号
  222. quotes: [2, 'single', 'avoid-escape'],
  223. // 要求使用 JSDoc 注释
  224. 'require-jsdoc': ['off'],
  225. // 要求或禁止使用分号而不是 ASI(这个才是控制行尾部分号的,)
  226. semi: [2, 'always'],
  227. // 强制分号之前和之后使用一致的空格
  228. 'semi-spacing': 0,
  229. // 要求同一个声明块中的变量按顺序排列
  230. 'sort-vars': 0,
  231. // 强制在块之前使用一致的空格
  232. 'space-before-blocks': [2, 'always'],
  233. // 强制在 function的左括号之前使用一致的空格
  234. 'space-before-function-paren': [2, 'always'],
  235. // 强制在圆括号内使用一致的空格
  236. 'space-in-parens': [0, 'never'],
  237. // 要求操作符周围有空格
  238. 'space-infix-ops': 2,
  239. // 强制在一元操作符前后使用一致的空格
  240. 'space-unary-ops': [
  241. 2,
  242. {
  243. words: true,
  244. nonwords: false,
  245. },
  246. ],
  247. // 强制在注释中 // 或 /* 使用一致的空格
  248. 'spaced-comment': [
  249. 2,
  250. 'always',
  251. {
  252. markers: ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!'],
  253. },
  254. ],
  255. // 要求或禁止 Unicode BOM
  256. 'unicode-bom': 0,
  257. // 要求正则表达式被括号括起来
  258. 'wrap-regex': 0,
  259. 'prefer-const': 0,
  260. 'no-unused-expressions': 'off', // use typescript-eslint rule
  261. },
  262. };