diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..595ad011ae --- /dev/null +++ b/.eslintignore @@ -0,0 +1,33 @@ +# Compiled and vendored files +common/dist/ +common/transpiled-babel/ +coverage/ +database_reports/ +migrations/ +website/build/ +website/transpiled-babel/ + +# The files in website/public/js should be moved out and browserified +website/public/ + +# Temporarilly disabled. These should be removed when the linting errors are fixed +common/script/index.js +common/script/content/index.js +common/script/ops/**/*.js +common/script/fns/**/*.js +common/script/libs/**/*.js +common/script/public/**/*.js + +website/src/**/*.js + +debug-scripts/* +tasks/*.js +gulpfile.js +Gruntfile.js +newrelic.js + +test/api-legacy/**/* +test/common/simulations/**/* +test/content/**/* +test/server_side/**/* +test/spec/**/* diff --git a/.eslintrc b/.eslintrc index 870626d394..111772a5a3 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,124 +1,6 @@ { - "parser": "babel-eslint", - "plugins": ["babel"], - "rules": { - "indent": [2, 2, {"SwitchCase": 1}], - "quotes": [2, "single"], - "linebreak-style": [2, "unix"], - "semi": [2, "always"], - "no-extra-parens": 2, - "no-unexpected-multiline": 2, - "block-scoped-var": 2, - "dot-location": [2, "property"], - "dot-notation": 2, - "eqeqeq": 2, - "no-caller": 2, - "no-eval": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-empty-pattern": 2, - "no-empty-label": 2, - "no-lone-blocks": 2, - "no-loop-func": 2, - "no-implicit-coercion": 2, - "no-implied-eval": 2, - "no-native-reassign": 2, - "no-new-func": 2, - "no-new-wrappers": 2, - "no-new": 2, - "no-octal-escape": 2, - "no-octal": 2, - "no-process-env": 2, - "no-proto": 2, - "yoda": 2, - "wrap-iife": 2, - "radix": 2, - "no-with": 2, - "no-void": 2, - "no-useless-concat": 2, - "no-unused-expressions": 2, - "no-throw-literal": 2, - "no-sequences": 2, - "no-self-compare": 2, - "no-return-assign": 2, - "no-redeclare": 2, - "strict": [0, "global"], - "no-delete-var": 2, - "no-label-var": 2, - "no-shadow-restricted-names": 2, - "no-shadow": [2, { "builtinGlobals": true }], - "no-undef-init": 2, - "no-undef": [2, { "typeof": true }], - "no-unused-vars": 2, - "no-use-before-define": 2, - "global-require": 2, - "handle-callback-err": [2, "^.*(e|E)rr"], - "no-path-concat": 2, - "arrow-spacing": 2, - "constructor-super": 2, - "no-arrow-condition": 2, - "no-class-assign": 2, - "no-const-assign": 2, - "no-dupe-class-members": 2, - "no-this-before-super": 2, - "no-var": 2, - "object-shorthand": 0, - "prefer-const": 0, - "prefer-spread": 2, - "prefer-template": 2, - "array-bracket-spacing": [2, "never"], - "brace-style": [2, "1tbs", { "allowSingleLine": false }], - "camelcase": 2, - "comma-spacing": 2, - "comma-style": [2, "last"], - "comma-dangle": [2, "always-multiline"], - "computed-property-spacing": [2, "never"], - "consistent-this": [0, "self"], - "func-names": 2, - "func-style": [2, "declaration", { "allowArrowFunctions": true }], - "block-spacing": [2, "always"], - "key-spacing": [2, {"beforeColon": false, "afterColon": true}], - "max-nested-callbacks": [2, 3], - "new-cap": 0, - "new-parens": 2, - "newline-after-var": 0, - "no-array-constructor": 2, - "no-continue": 2, - "no-lonely-if": 2, - "no-mixed-spaces-and-tabs": 2, - "no-trailing-spaces": 2, - "no-spaced-func": 2, - "no-new-object": 2, - "no-nested-ternary": 2, - "one-var": [2, "never"], - "operator-linebreak": [2, "after"], - "quote-props": [2, "as-needed"], - "semi-spacing": [2, {"before": false, "after": true}], - "space-after-keywords": 2, - "space-before-blocks": 2, - "space-before-function-paren": 2, - "space-before-keywords": 2, - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-return-throw-case": 2, - "space-unary-ops": 2, - "spaced-comment": [2, "always", { "exceptions": ["-"]}], - "padded-blocks": [2, "never"], - "no-multiple-empty-lines": [2, {"max": 2}], - "generator-star-spacing": 0, - "babel/new-cap": 2, - "babel/object-shorthand": 2, - "babel/no-await-in-loop": 2 - }, - "env": { - "es6": true, - "mocha": true, - "node": true - }, - "ecmaFeatures" : { - "modules": true - }, - "extends": "eslint:recommended" + "extends": [ + "habitrpg/server", + "habitrpg/babel" + ] } diff --git a/common/.eslintrc b/common/.eslintrc new file mode 100644 index 0000000000..20c282864a --- /dev/null +++ b/common/.eslintrc @@ -0,0 +1,4 @@ +{ + "extends": "habitrpg/browser" +} + diff --git a/common/index.js b/common/index.js index 35785e2145..475d444df3 100644 --- a/common/index.js +++ b/common/index.js @@ -1,6 +1,6 @@ var pathToCommon; -if (process.env.NODE_ENV === 'production') { +if (process.env.NODE_ENV === 'production') { // eslint-disable-line no-process-env pathToCommon = './transpiled-babel/index'; } else { pathToCommon = './script/index'; diff --git a/common/script/.eslintrc b/common/script/.eslintrc new file mode 100644 index 0000000000..0b1303a736 --- /dev/null +++ b/common/script/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": [ + "habitrpg/browser", + "habitrpg/babel" + ] +} diff --git a/package.json b/package.json index 529a754d99..b0ad4ce1b1 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "grunt-karma": "~0.12.1", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", - "gulp-eslint": "^1.0.0", "gulp-grunt": "^0.5.2", "gulp-imagemin": "^2.4.0", "gulp-nodemon": "^2.0.4", @@ -91,7 +90,8 @@ "npm": "^2.14.9" }, "scripts": { - "test": "gulp test", + "lint": "eslint .", + "test": "npm run lint && gulp test", "test:api-v2:unit": "mocha test/server_side", "test:api-v2:integration": "mocha test/api/v2 --recursive", "test:api-legacy": "istanbul cover -i \"website/src/**\" --dir coverage/api ./node_modules/mocha/bin/_mocha test/api-legacy", @@ -109,15 +109,16 @@ "coverage": "COVERAGE=true mocha --require register-handlers.js --reporter html-cov > coverage.html; open coverage.html" }, "devDependencies": { - "babel-eslint": "^5.0.0", + "babel-eslint": "^6.0.0", "chai": "^3.4.0", "chai-as-promised": "^5.1.0", "coveralls": "^2.11.2", "csv": "~0.3.6", "deep-diff": "~0.1.4", - "eslint": "^1.9.0", + "eslint": "^2.7.0", + "eslint-config-habitrpg": "^1.0.0", "eslint-plugin-babel": "^3.0.0", - "eslint-plugin-mocha": "^1.1.0", + "eslint-plugin-mocha": "^2.1.0", "event-stream": "^3.2.2", "expect.js": "~0.2.0", "istanbul": "^0.3.14", diff --git a/tasks/gulp-eslint.js b/tasks/gulp-eslint.js deleted file mode 100644 index 735845beb7..0000000000 --- a/tasks/gulp-eslint.js +++ /dev/null @@ -1,63 +0,0 @@ -import gulp from 'gulp'; -import eslint from 'gulp-eslint'; - -const SERVER_FILES = [ - './website/src/**/api-v3/**/*.js', - // Comment these out in develop, uncomment them in api-v3 - // './website/src/models/user.js', - // './website/src/server.js' -]; -const COMMON_FILES = [ - './common/script/**/*.js', - // @TODO remove these negations as the files are converted over. - '!./common/script/index.js', - '!./common/script/content/index.js', - '!./common/script/ops/**/*.js', - '!./common/script/fns/**/*.js', - '!./common/script/libs/**/*.js', - '!./common/script/public/**/*.js', -]; -const TEST_FILES = [ - './test/**/*.js', - // @TODO remove these negations as the test files are cleaned up. - '!./test/api-legacy/**/*', - '!./test/common/simulations/**/*', - '!./test/content/**/*', - '!./test/server_side/**/*', - '!./test/spec/**/*', -]; - -let linter = (src, options) => { - return gulp - .src(src) - .pipe(eslint(options)) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()); -}; - -// TODO lint client -// TDOO separate linting cong between -// TODO lint gulp tasks, tests, ...? -// TODO what about prefer-const rule? -// TODO remove estraverse dependency once https://github.com/adametry/gulp-eslint/issues/117 sorted out -gulp.task('lint:server', () => { - return linter(SERVER_FILES); -}); - -gulp.task('lint:common', () => { - return linter(COMMON_FILES); -}); - -gulp.task('lint:tests', () => { - return linter(TEST_FILES); -}); - -gulp.task('lint', ['lint:server', 'lint:common', 'lint:tests']); - -gulp.task('lint:watch', () => { - gulp.watch([ - SERVER_FILES, - COMMON_FILES, - TEST_FILES, - ], ['lint']); -}); diff --git a/tasks/gulp-tests.js b/tasks/gulp-tests.js index bada857d36..cd8622f387 100644 --- a/tasks/gulp-tests.js +++ b/tasks/gulp-tests.js @@ -338,7 +338,6 @@ gulp.task('test:api-v2:safe', ['test:prepare:server'], (done) => { gulp.task('test:all', (done) => { runSequence( - 'lint', 'test:e2e:safe', 'test:common:safe', 'test:content:safe', diff --git a/test/.eslintrc b/test/.eslintrc index 9ee7ce9e28..a56eb09d64 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -1,18 +1,10 @@ { - "rules": { - "one-var": 0, - "func-names": 0, - "max-nested-callbacks": 0, - "no-unused-expressions": 0, - "mocha/no-exclusive-tests": 2, - "mocha/no-global-tests": 2, - "mocha/handle-done-callback": 2 - }, - "globals": { - "expect": true, - "_": true, - "sandbox": true, - "sinon": true - }, - "plugins": [ "mocha" ] + "extends": [ + "habitrpg/mocha", + "habitrpg/babel" + ], + "globals": { + "_": true, + "Promise": true + } } diff --git a/website/public/js/.eslintrc b/website/public/js/.eslintrc new file mode 100644 index 0000000000..584c1efdd6 --- /dev/null +++ b/website/public/js/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": "habitrpg/browser", + "env": { + "jquery": true + } +}