.eslintrc.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. module.exports = {
  2. root: true,
  3. env: {
  4. browser: true,
  5. commonjs: true,
  6. es6: true,
  7. node: true,
  8. },
  9. extends: [
  10. 'eslint:recommended',
  11. 'plugin:@typescript-eslint/eslint-recommended',
  12. ],
  13. globals: {
  14. Atomics: 'readonly',
  15. SharedArrayBuffer: 'readonly',
  16. },
  17. parser: '@typescript-eslint/parser',
  18. parserOptions: {
  19. // ES6 syntax
  20. ecmaVersion: 6,
  21. sourceType: 'module',
  22. ecmaFeatures: {
  23. modules: true,
  24. },
  25. // 'project': './tsconfig.json'
  26. },
  27. plugins: [
  28. '@typescript-eslint',
  29. // 'jsdoc',
  30. // 'prettier',
  31. ],
  32. rules: {
  33. 'quote-props': ['error', 'as-needed'],
  34. // 'prettier/prettier': 'warn',
  35. 'keyword-spacing': ['warn', {
  36. before: true,
  37. after: true,
  38. }],
  39. camelcase: ['warn', {
  40. properties: 'always',
  41. }],
  42. indent: ['error', 4, { SwitchCase: 1, CallExpression: { arguments: 'off' }, ArrayExpression: 'first' }],
  43. // 'no-else-return': 'error',
  44. 'object-curly-spacing': ['error', 'always'],
  45. 'array-bracket-spacing': ['error', 'never'],
  46. 'semi-spacing': ['error', {
  47. before: false,
  48. after: true,
  49. }],
  50. 'rest-spread-spacing': ['error', 'never'],
  51. 'space-in-parens': ['error', 'never'],
  52. curly: 'error',
  53. semi: ['error', 'always'],
  54. 'no-multi-spaces': ['error', { ignoreEOLComments: true }],
  55. 'no-whitespace-before-property': 'error',
  56. 'no-tabs': ['error', { allowIndentationTabs: true }],
  57. 'no-unused-vars': ['warn', 'all'],
  58. 'no-empty': ['error', { allowEmptyCatch: true }],
  59. 'consistent-return': ['warn', { treatUndefinedAsUnspecified: true }],
  60. eqeqeq: ['warn', 'always'],
  61. // 'line-comment-position': ['warn', { 'position': 'above' }],
  62. 'max-len': ['warn', {
  63. code: 180,
  64. }],
  65. 'no-undef': 0,
  66. 'no-constant-condition': ['warn', {
  67. checkLoops: false,
  68. }],
  69. 'no-inner-declarations': ['warn'],
  70. 'no-case-declarations': ['warn'],
  71. // 'jsdoc/check-alignment': 1,
  72. // 'jsdoc/check-param-names': 1,
  73. // 'jsdoc/check-tag-names': 1,
  74. // 'jsdoc/check-types': 1,
  75. // 'jsdoc/implements-on-classes': 1,
  76. // 'jsdoc/newline-after-description': 1,
  77. // 'jsdoc/no-undefined-types': 1,
  78. // 'jsdoc/require-jsdoc': 1,
  79. // 'jsdoc/require-param': 1,
  80. // 'jsdoc/require-param-description': 1,
  81. // 'jsdoc/require-param-name': 1,
  82. // 'jsdoc/require-param-type': 1,
  83. // 'jsdoc/require-returns': 1,
  84. // 'jsdoc/require-returns-check': 1,
  85. // 'jsdoc/require-returns-description': 1,
  86. // 'jsdoc/require-returns-type': 1,
  87. // 'jsdoc/valid-types': 1,
  88. // 行尾逗号
  89. 'comma-style': ['error', 'last'],
  90. 'comma-dangle': ['error', {
  91. arrays: 'always-multiline',
  92. objects: 'always-multiline',
  93. imports: 'always-multiline',
  94. exports: 'always-multiline',
  95. functions: 'only-multiline',
  96. }],
  97. 'comma-spacing': ['error', {
  98. before: false,
  99. after: true,
  100. }],
  101. // 空格、空行约定
  102. 'unicode-bom': ['warn', 'never'],
  103. 'block-spacing': ['error', 'always'],
  104. 'arrow-spacing': ['error', {
  105. before: true,
  106. after: true,
  107. }],
  108. 'space-before-function-paren': ['error', {
  109. anonymous: 'never',
  110. named: 'never',
  111. asyncArrow: 'always',
  112. }],
  113. 'space-before-blocks': ['error', 'always'],
  114. 'space-infix-ops': ['warn'],
  115. 'space-unary-ops': ['warn', {
  116. words: true,
  117. nonwords: false,
  118. }],
  119. 'spaced-comment': ['warn', 'always', {
  120. line: {
  121. markers: ['/'],
  122. exceptions: ['/', '*'],
  123. },
  124. },
  125. ],
  126. 'switch-colon-spacing': ['warn', {
  127. before: false,
  128. after: true,
  129. }],
  130. 'eol-last': ['error', 'always'],
  131. 'no-trailing-spaces': ['error', { ignoreComments: true }],
  132. },
  133. };