Skip to content

Commit

Permalink
feat: Eslint contrib (#496)
Browse files Browse the repository at this point in the history
  • Loading branch information
waitingsong committed May 22, 2020
1 parent dc788a3 commit c3899d0
Show file tree
Hide file tree
Showing 10 changed files with 262 additions and 46 deletions.
8 changes: 6 additions & 2 deletions packages/eslint-midway-contrib/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ module.exports = {
mocha: true,
node: true,
},
extends: ['./plugins/import.yml'],
extends: [
'./plugins/import.yml',
'./plugins/node.yml',
// './plugins/unicorn.yml',
],
globals: {
Atomics: 'readonly',
document: 'readonly',
Expand All @@ -22,7 +26,7 @@ module.exports = {
impliedStrict: true,
},
ecmaVersion: 2020,
// see: https://github.com/typescript-eslint/typescript-eslint/releases/tag/v2.0.0
// see: https://github.com/typescript-eslint/typescript-eslint/releases/tag/v3.0.0
project: 'tsconfig.json',
sourceType: 'module',
},
Expand Down
28 changes: 18 additions & 10 deletions packages/eslint-midway-contrib/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"typescript"
],
"engines": {
"node": ">=8.10.0"
"node": ">=10.16.0"
},
"main": "index.js",
"bugs": {
Expand All @@ -25,28 +25,36 @@
"license": "MIT",
"author": "waiting",
"dependencies": {
"@typescript-eslint/eslint-plugin": "^2.25.0",
"@typescript-eslint/parser": "^2.25.0",
"@typescript-eslint/eslint-plugin": "^3.0.0",
"@typescript-eslint/parser": "^3.0.0",
"eslint-plugin-import": "^2.20.0",
"eslint-plugin-unicorn": "^18.0.0"
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-unicorn": "^20.0.0"
},
"devDependencies": {
"eslint": "6",
"tape": "4",
"typescript": "3"
"@types/tape": "4",
"eslint": "7",
"tape": "5",
"typescript": ">=3.9"
},
"peerDependencies": {
"eslint": ">=6.7.1"
"eslint": ">=7.0.0"
},
"files": [
"plugins/*.yml",
"*.js"
"base.js",
"index.js",
"recommended.js",
"strict.js"
],
"publishConfig": {
"registry": "https://registry.npmjs.org/"
},
"scripts": {
"lint": "eslint --fix . --config=recommended.js && eslint --fix . --config=strict.js",
"cov": "npm run lint",
"lint": "npm run lint:src && npm run lint:test",
"lint:src": "eslint --fix ./*.js --config=strict.js --parser-options=project:tsconfig.json",
"lint:test": "eslint test/*.ts --config=test/.eslintrc.yml",
"prepublishOnly": "npm run test",
"test": "npm run lint && tape test/*.js"
}
Expand Down
9 changes: 9 additions & 0 deletions packages/eslint-midway-contrib/plugins/node.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# https://github.com/mysticatea/eslint-plugin-node
extends:
- plugin:node/recommended

rules:
node/no-missing-import: 0
node/no-path-concat: 2
node/no-unsupported-features/es-syntax: 0

7 changes: 7 additions & 0 deletions packages/eslint-midway-contrib/plugins/unicorn.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
rules:
# https://github.com/sindresorhus/eslint-plugin-unicorn#readme
unicorn/filename-case:
- 2
- case: kebabCase

36 changes: 25 additions & 11 deletions packages/eslint-midway-contrib/recommended.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@ module.exports = {
extends: [
'./base.js',
'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended',
// 'plugin:@typescript-eslint/eslint-recommended', included in @typescript-eslint/recommended
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
],
rules: {
'sort-imports': 0,
'require-atomic-updates': 0,

// https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin
'@typescript-eslint/array-type': [2],
'@typescript-eslint/ban-ts-comment': [0],
'brace-style': 0,
'@typescript-eslint/brace-style': [1, 'stroustrup', { allowSingleLine: true } ],
'@typescript-eslint/camelcase': 0,
'@typescript-eslint/consistent-type-definitions': [2, 'interface'],
'default-param-last': 0,
'@typescript-eslint/default-param-last': 2,
'@typescript-eslint/explicit-function-return-type': 0,
'func-call-spacing': 0,
'@typescript-eslint/func-call-spacing': [1, 'never'],
Expand All @@ -33,16 +36,35 @@ module.exports = {
},
},
],
'no-empty-function': 0,
'@typescript-eslint/no-base-to-string': 2,
'no-dupe-class-members': 0,
'@typescript-eslint/no-dupe-class-members': 2,
'@typescript-eslint/no-empty-function': 1,
'@typescript-eslint/no-explicit-any': [0],
'no-extra-parens': 0,
'@typescript-eslint/no-extra-parens': 2,
'@typescript-eslint/no-parameter-properties': 0,
'@typescript-eslint/no-this-alias': [
2,
{
allowDestructuring: true,
allowedNames: ['self'],
},
],
'no-use-before-define': 0,
'@typescript-eslint/no-use-before-define': [2, { functions: false, typedefs: false } ],
'@typescript-eslint/require-await': 0,
semi: 0,
'@typescript-eslint/semi': [1, 'always'],
'space-before-function-paren': 0,
'@typescript-eslint/space-before-function-paren': [
1, {
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
},
],
'@typescript-eslint/type-annotation-spacing': 1,

// https://eslint.org/docs/rules/#best-practices
curly: 2,
Expand Down Expand Up @@ -70,7 +92,6 @@ module.exports = {
functions: 'always-multiline',
},
],
'comma-spacing': 1,
'comma-style': 1,
'computed-property-spacing': 1,
'eol-last': [1, 'always'],
Expand Down Expand Up @@ -101,13 +122,6 @@ module.exports = {
'semi-spacing': [1, { before: false, after: true } ],
'semi-style': [2, 'last'],
'space-before-blocks': [1, 'always'],
'space-before-function-paren': [
1, {
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
},
],
'spaced-comment': [
1, 'always',
{
Expand Down
32 changes: 18 additions & 14 deletions packages/eslint-midway-contrib/strict.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,46 @@ module.exports = {
extends: ['./recommended.js'],
rules: {
// https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin
'@typescript-eslint/await-thenable': 2,
'@typescript-eslint/consistent-type-assertions': 2,
'@typescript-eslint/member-ordering': [0],
'@typescript-eslint/no-empty-function': 2,
'@typescript-eslint/no-explicit-any': [1, { ignoreRestArgs: true } ],
'@typescript-eslint/method-signature-style': [2],
'@typescript-eslint/no-explicit-any': [1],
'@typescript-eslint/no-extraneous-class': 2,
'@typescript-eslint/no-floating-promises': 2,
'@typescript-eslint/no-for-in-array': 2,
'@typescript-eslint/no-require-imports': 2,
'@typescript-eslint/no-this-alias': 2,
'@typescript-eslint/no-unnecessary-type-assertion': 2,
'@typescript-eslint/no-throw-literal': 2,
'@typescript-eslint/no-unnecessary-condition': 1,
'@typescript-eslint/no-useless-constructor': 2,
'@typescript-eslint/prefer-for-of': 2,
'@typescript-eslint/prefer-function-type': 2,
'@typescript-eslint/prefer-includes': 1,
'@typescript-eslint/prefer-optional-chain': 1,
'@typescript-eslint/prefer-readonly': 1,
'@typescript-eslint/prefer-readonly-parameter-types': 0,
'@typescript-eslint/prefer-string-starts-ends-with': 1,
'@typescript-eslint/prefer-ts-expect-error': 1,
'@typescript-eslint/promise-function-async': 0,
'@typescript-eslint/restrict-plus-operands': 2,
'@typescript-eslint/require-array-sort-compare': 2,
'no-return-await': 0,
'@typescript-eslint/return-await': 2,
// "@typescript-eslint/strict-boolean-expressions": 2,
'@typescript-eslint/unbound-method': 2,
'@typescript-eslint/switch-exhaustiveness-check': 1,

// https://eslint.org/docs/rules/
'no-floating-decimal': 2,
'no-implied-eval': 2,
'no-multi-str': 2,
'no-new-wrappers': 2,
'no-octal-escape': 2,
'no-param-reassign': 2,
'no-return-assign': 2,
'no-return-await': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-template-curly-in-string': 1,
'no-undef-init': 1,
radix: 2,

// https://eslint.org/docs/rules/#nodejs-and-commonjs
'no-path-concat': 2,
'require-unicode-regexp': 1,

// https://eslint.org/docs/rules/#stylistic-issues
'no-array-constructor': 2,
'no-bitwise': 2,
'no-mixed-operators': 1,
'no-new-object': 2,
Expand Down
8 changes: 8 additions & 0 deletions packages/eslint-midway-contrib/test/.eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
extends: '../strict.js'
parserOptions:
project: 'tsconfig.json'

rules:
'@typescript-eslint/member-delimiter-style': 0
'@typescript-eslint/semi': 0

16 changes: 8 additions & 8 deletions packages/eslint-midway-contrib/test/basic.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
/* eslint-disable @typescript-eslint/no-var-requires, import/no-extraneous-dependencies, @typescript-eslint/no-require-imports */
const test = require('tape');
const test = require('tape')

const config = require('../base.js');
const config = require('../base.js')


test('test basic properties of config', (tt) => {
tt.ok(isObject(config.parserOptions));
tt.ok(isObject(config.env));
tt.ok(isObject(config.globals));
tt.end();
});
tt.ok(isObject(config.parserOptions))
tt.ok(isObject(config.env))
tt.ok(isObject(config.globals))
tt.end()
})

function isObject(obj) {
return !! (typeof obj === 'object' && obj);
return !! (typeof obj === 'object' && obj)
}

0 comments on commit c3899d0

Please sign in to comment.