diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c16c082 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,232 @@ +var OFF = 0, WARN = 1, ERROR = 2; + +module.exports = exports = { + "env": { + "es6": true, + "node": true, + "browser": true + }, + + "extends": "eslint:recommended", + + // "ecmaFeatures": { + // // env=es6 doesn't include modules, which we are using + // "modules": true + // }, + // + + "rules": { + "no-console": "off" + }, + + "globals": { + "W": "writable", + "node": "writable", + "J": "writable", + "JSUS": "writable" + } + + // + // "rules": { + // // Possible Errors (overrides from recommended set) + // "no-extra-parens": ERROR, + // "no-unexpected-multiline": ERROR, + // // All JSDoc comments must be valid + // "valid-jsdoc": [ ERROR, { + // "requireReturn": false, + // "requireReturnDescription": false, + // "requireParamDescription": true, + // "prefer": { + // "return": "returns" + // } + // }], + // + // // Best Practices + // + // // Allowed a getter without setter, but all setters require getters + // "accessor-pairs": [ ERROR, { + // "getWithoutSet": false, + // "setWithoutGet": true + // }], + // "block-scoped-var": WARN, + // "consistent-return": ERROR, + // "curly": ERROR, + // "default-case": WARN, + // // the dot goes with the property when doing multiline + // "dot-location": [ WARN, "property" ], + // "dot-notation": WARN, + // "eqeqeq": [ ERROR, "smart" ], + // "guard-for-in": WARN, + // "no-alert": ERROR, + // "no-caller": ERROR, + // "no-case-declarations": WARN, + // "no-div-regex": WARN, + // "no-else-return": WARN, + // "no-empty-label": WARN, + // "no-empty-pattern": WARN, + // "no-eq-null": WARN, + // "no-eval": ERROR, + // "no-extend-native": ERROR, + // "no-extra-bind": WARN, + // "no-floating-decimal": WARN, + // "no-implicit-coercion": [ WARN, { + // "boolean": true, + // "number": true, + // "string": true + // }], + // "no-implied-eval": ERROR, + // "no-invalid-this": ERROR, + // "no-iterator": ERROR, + // "no-labels": WARN, + // "no-lone-blocks": WARN, + // "no-loop-func": ERROR, + // "no-magic-numbers": WARN, + // "no-multi-spaces": ERROR, + // "no-multi-str": WARN, + // "no-native-reassign": ERROR, + // "no-new-func": ERROR, + // "no-new-wrappers": ERROR, + // "no-new": ERROR, + // "no-octal-escape": ERROR, + // "no-param-reassign": ERROR, + // "no-process-env": WARN, + // "no-proto": ERROR, + // "no-redeclare": ERROR, + // "no-return-assign": ERROR, + // "no-script-url": ERROR, + // "no-self-compare": ERROR, + // "no-throw-literal": ERROR, + // "no-unused-expressions": ERROR, + // "no-useless-call": ERROR, + // "no-useless-concat": ERROR, + // "no-void": WARN, + // // Produce warnings when something is commented as TODO or FIXME + // "no-warning-comments": [ WARN, { + // "terms": [ "TODO", "FIXME" ], + // "location": "start" + // }], + // "no-with": WARN, + // "radix": WARN, + // "vars-on-top": ERROR, + // // Enforces the style of wrapped functions + // "wrap-iife": [ ERROR, "outside" ], + // "yoda": ERROR, + // + // // Strict Mode - for ES6, never use strict. + // "strict": [ ERROR, "never" ], + // + // // Variables + // "init-declarations": [ ERROR, "always" ], + // "no-catch-shadow": WARN, + // "no-delete-var": ERROR, + // "no-label-var": ERROR, + // "no-shadow-restricted-names": ERROR, + // "no-shadow": WARN, + // // We require all vars to be initialized (see init-declarations) + // // If we NEED a var to be initialized to undefined, + // // it needs to be explicit + // "no-undef-init": OFF, + // "no-undef": ERROR, + // "no-undefined": OFF, + // "no-unused-vars": WARN, + // // Disallow hoisting - let & const don't allow hoisting anyhow + // "no-use-before-define": ERROR, + // + // // Node.js and CommonJS + // "callback-return": [ WARN, [ "callback", "next" ]], + // "global-require": ERROR, + // "handle-callback-err": WARN, + // "no-mixed-requires": WARN, + // "no-new-require": ERROR, + // // Use path.concat instead + // "no-path-concat": ERROR, + // "no-process-exit": ERROR, + // "no-restricted-modules": OFF, + // "no-sync": WARN, + // + // // ECMAScript 6 support + // "arrow-body-style": [ ERROR, "always" ], + // "arrow-parens": [ ERROR, "always" ], + // "arrow-spacing": [ ERROR, { "before": true, "after": true }], + // "constructor-super": ERROR, + // "generator-star-spacing": [ ERROR, "before" ], + // "no-arrow-condition": ERROR, + // "no-class-assign": ERROR, + // "no-const-assign": ERROR, + // "no-dupe-class-members": ERROR, + // "no-this-before-super": ERROR, + // "no-var": WARN, + // "object-shorthand": [ WARN, "never" ], + // "prefer-arrow-callback": WARN, + // "prefer-spread": WARN, + // "prefer-template": WARN, + // "require-yield": ERROR, + // + // // Stylistic - everything here is a warning because of style. + // "array-bracket-spacing": [ WARN, "always" ], + // "block-spacing": [ WARN, "always" ], + // "brace-style": [ WARN, "1tbs", { "allowSingleLine": false } ], + // "camelcase": WARN, + // "comma-spacing": [ WARN, { "before": false, "after": true } ], + // "comma-style": [ WARN, "last" ], + // "computed-property-spacing": [ WARN, "never" ], + // "consistent-this": [ WARN, "self" ], + // "eol-last": WARN, + // "func-names": WARN, + // "func-style": [ WARN, "declaration" ], + // "id-length": [ WARN, { "min": 2, "max": 32 } ], + // "indent": [ WARN, 4 ], + // "jsx-quotes": [ WARN, "prefer-double" ], + // // "linebreak-style": [ WARN, "unix" ], + // "lines-around-comment": [ WARN, { "beforeBlockComment": true } ], + // "max-depth": [ WARN, 8 ], + // "max-len": [ WARN, 132 ], + // "max-nested-callbacks": [ WARN, 8 ], + // "max-params": [ WARN, 8 ], + // "new-cap": WARN, + // "new-parens": WARN, + // "no-array-constructor": WARN, + // "no-bitwise": OFF, + // "no-continue": OFF, + // "no-inline-comments": OFF, + // "no-lonely-if": WARN, + // "no-mixed-spaces-and-tabs": WARN, + // "no-multiple-empty-lines": WARN, + // "no-negated-condition": OFF, + // "no-nested-ternary": WARN, + // "no-new-object": WARN, + // "no-plusplus": OFF, + // "no-spaced-func": WARN, + // "no-ternary": OFF, + // "no-trailing-spaces": WARN, + // "no-underscore-dangle": WARN, + // "no-unneeded-ternary": WARN, + // "object-curly-spacing": [ WARN, "always" ], + // "one-var": OFF, + // "operator-assignment": [ WARN, "never" ], + // "operator-linebreak": [ WARN, "after" ], + // "padded-blocks": [ WARN, "never" ], + // "quote-props": [ WARN, "consistent-as-needed" ], + // // "quotes": [ WARN, "single" ], + // "require-jsdoc": [ WARN, { + // "require": { + // "FunctionDeclaration": true, + // "MethodDefinition": true, + // "ClassDeclaration": false + // } + // }], + // "semi-spacing": [ WARN, { "before": false, "after": true }], + // "semi": [ ERROR, "always" ], + // "sort-vars": OFF, + // "space-after-keywords": [ WARN, "always" ], + // "space-before-blocks": [ WARN, "always" ], + // "space-before-function-paren": [ WARN, "never" ], + // "space-before-keywords": [ WARN, "always" ], + // "space-in-parens": [ WARN, "never" ], + // "space-infix-ops": [ WARN, { "int32Hint": true } ], + // "space-return-throw-case": ERROR, + // "space-unary-ops": ERROR, + // "spaced-comment": [ WARN, "always" ], + // "wrap-regex": WARN + // } +}; diff --git a/game/client_types/autoplay.js b/game/client_types/autoplay.js index 78031f3..6ffc421 100644 --- a/game/client_types/autoplay.js +++ b/game/client_types/autoplay.js @@ -8,16 +8,16 @@ * http://www.nodegame.org */ - var ngc = require('nodegame-client'); + const ngc = require('nodegame-client'); module.exports = function(treatmentName, settings, stager, setup, gameRoom) { - var channel = gameRoom.channel; - var node = gameRoom.node; + let channel = gameRoom.channel; + let node = gameRoom.node; - var game, stager; + var stager; - game = gameRoom.getClientType('player'); + let game = gameRoom.getClientType('player'); game.nodename = 'autoplay'; stager = ngc.getStager(game.plot); diff --git a/game/client_types/bot.js b/game/client_types/bot.js index 9afe697..d1770e3 100644 --- a/game/client_types/bot.js +++ b/game/client_types/bot.js @@ -8,17 +8,17 @@ * http://www.nodegame.org */ -var ngc = require('nodegame-client'); -var J = ngc.JSUS; +const ngc = require('nodegame-client'); +const J = ngc.JSUS; module.exports = function(treatmentName, settings, stager, setup, gameRoom) { - var channel = gameRoom.channel; - var logic = gameRoom.node; + let channel = gameRoom.channel; + let logic = gameRoom.node; stager.extendAllSteps(function(o) { o.cb = function() { - var node, stepObj, id; + let node, stepObj, id; stepObj = this.getCurrentStepObj(); id = stepObj.id; node = this.node; diff --git a/game/client_types/logic.js b/game/client_types/logic.js index 06420ff..3bf117e 100644 --- a/game/client_types/logic.js +++ b/game/client_types/logic.js @@ -7,20 +7,20 @@ * --- */ -var path = require('path'); -var fs = require('fs-extra'); +const path = require('path'); +const fs = require('fs-extra'); -var ngc = require('nodegame-client'); -var GameStage = ngc.GameStage; -var J = ngc.JSUS; +const ngc = require('nodegame-client'); +const GameStage = ngc.GameStage; +const J = ngc.JSUS; module.exports = function(treatmentName, settings, stager, setup, gameRoom) { - var channel = gameRoom.channel; - var node = gameRoom.node; + let channel = gameRoom.channel; + let node = gameRoom.node; - var treatments; + let treatments; // Experimental! // Outgoing messages will be saved (use if reconnections are important). @@ -45,8 +45,8 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { // "STEPPING" is the last event emitted before the stage is updated. node.on('STEPPING', function() { - var currentStage, db, file; - + let currentStage, db, file; + currentStage = node.game.getCurrentGameStage(); // We do not save stage 0.0.0. @@ -62,7 +62,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { db = node.game.memory.stage[currentStage]; if (db && db.size()) { - try { + try { // Saving each round results to FS. file = gameRoom.dataDir + 'memory_' + currentStage; db.save(file + '.csv'); @@ -84,7 +84,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { // TODO: check if this needs updates. -// Use if reconnections are important. +// Use if reconnections are important. // // Register player disconnection, and wait for him... // node.on.pdisconnect(function(p) { // console.log('Warning: one player disconnected! ', p.id); @@ -103,7 +103,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { // node.say('notEnoughPlayers', 'ALL'); // // this.countdown = setTimeout(function() { -// var i; +// let i; // console.log('Countdown fired. Player/s did not reconnect.'); // for (i in node.game.disconnected) { // if (node.game.disconnected.hasOwnProperty(i)) { @@ -127,7 +127,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { // // // Reconnections must be handled by the game developer. // node.on.preconnect(function(p) { -// var code, curStage, state, i, len; +// let code, curStage, state, i, len; // // console.log('Oh...somebody reconnected!', p); // code = channel.registry.getClient(p.id); @@ -251,7 +251,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { }); // Extends Stages and Steps where needed. - + stager.extendStep('results', { init: function() { this.savedResults = {}; @@ -286,7 +286,7 @@ module.exports = function(treatmentName, settings, stager, setup, gameRoom) { // info.partials = [ 10, -1, 7]; // } }); - + // Dump all memory. node.game.memory.save('memory_all.json'); }