From 29d048448c3c837486fab52cecc6661a56f7d165 Mon Sep 17 00:00:00 2001 From: Mike Nason Date: Sun, 23 Oct 2016 19:41:44 -0400 Subject: [PATCH] Configure git hooks, linter config, and cleanup linter errors --- .eslintrc | 281 ++++++------------------------- .gitignore | 5 +- package.json | 16 +- src/client.js | 2 + src/node.js | 1 - src/util/client/rollbarLogger.js | 1 - src/util/server/rollbarLogger.js | 1 - test/.eslintrc | 19 +++ test/specs/logger.spec.js | 6 +- 9 files changed, 96 insertions(+), 236 deletions(-) create mode 100644 test/.eslintrc diff --git a/.eslintrc b/.eslintrc index 3ed1579..099dce0 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,226 +1,55 @@ -env: - - ########################################################################### - # # - # ENVIRONMENT: if you write code that will be executed in one of the # - # following environments, the value for that environment should be # - # set to true. # - # # - ########################################################################### - - node: true - browser: true - es6: true - -parserOptions: - sourceType: "module" - ecmaFeatures: - destructuring: true - spread: true - arrowFunctions: true - blockBindings: true - experimentalObjectRestSpread: true - -globals: - - ########################################################################### - # # - # GLOBALS: ESLint will assume the following variables are declared # - # globally; other variables will require explicit declaration. # - # # - ########################################################################### - - require: true - -rules: - - ########################################################################### - # # - # POSSIBLE ERRORS: these rules point out areas where you might have # - # made mistakes. # - # # - ########################################################################### - - comma-dangle: 1 # disallow trailing commas in object literals - no-cond-assign: 0 # disallow assignment in conditional expressions - no-console: 0 # disallow use of console - no-constant-condition: 2 # disallow use of constant expressions in conditions - no-control-regex: 2 # disallow control characters in regular expressions - no-debugger: 2 # disallow use of debugger - no-dupe-keys: 2 # disallow duplicate keys when creating object literals - no-empty: 2 # disallow empty statements - no-empty-character-class: 2 # disallow the use of empty character classes in regular expressions - no-ex-assign: 2 # disallow assigning to the exception in a catch block - no-extra-boolean-cast: 2 # disallow double-negation boolean casts in a boolean context - no-extra-semi: 0 # disallow unnecessary semicolons - no-func-assign: 0 # disallow overwriting functions written as function declarations - no-inner-declarations: 1 # disallow function or variable declarations in nested blocks - no-invalid-regexp: 2 # disallow invalid regular expression strings in the RegExp - # constructor - no-irregular-whitespace: 2 # disallow irregular whitespace outside of strings and comments - no-negated-in-lhs: 2 # disallow negation of the left operand of an in expression - no-obj-calls: 2 # disallow the use of object properties of the global object (Math - # and JSON) as functions - no-regex-spaces: 1 # disallow multiple spaces in a regular expression literal - no-reserved-keys: 0 # disallow reserved words being used as object literal keys - no-sparse-arrays: 2 # disallow sparse arrays - no-unreachable: 2 # disallow unreachable statements after a return, throw, continue, - # or break statement - use-isnan: 2 # disallow comparisons with the value NaN - valid-jsdoc: # ensure JSDoc comments are valid - [1, { "prefer": { "return": "returns" }, "requireReturn": false, requireParamDescription: false, requireReturnDescription: false }] - valid-typeof: 2 # ensure that the results of typeof are compared against a - # valid string - - ########################################################################### - # # - # BEST PRACTICES: these rules are designed to prevent you from making # - # mistakes. They either prescribe a better way of doing something or # - # help you avoid pitfalls. # - # # - ########################################################################### - - block-scoped-var: 0 # treat var statements as if they were block scoped - complexity: [1, 250] # specify the maximum cyclomatic complexity allowed in a program - consistent-return: 0 # require return statements to either always or never specify values - curly: 0 # specify curly brace conventions for all control - # statements - default-case: 2 # require default case in switch statements - dot-notation: 1 # encourages use of dot notation whenever possible - eqeqeq: 0 # require the use of === and !== - guard-for-in: 1 # make sure for-in loops have an if statement - no-alert: 0 # disallow the use of alert, confirm, and prompt - no-caller: 2 # disallow use of arguments.caller or arguments.callee - no-div-regex: 0 # disallow division operators explicitly at beginning of regular - # expression - no-else-return: 0 # disallow else after a return in an if - no-eq-null: 0 # disallow comparisons to null without a type-checking operator - no-eval: 2 # disallow use of eval() - no-extend-native: 2 # disallow adding to native types - no-extra-bind: 2 # disallow unnecessary function binding - no-fallthrough: 2 # disallow fallthrough of case statements - no-floating-decimal: 2 # disallow the use of leading or trailing decimal points in numeric - # literals - no-implied-eval: 2 # disallow use of eval()-like methods - no-iterator: 2 # disallow usage of __iterator__ property - no-labels: 2 # disallow use of labeled statements - no-lone-blocks: 2 # disallow unnecessary nested blocks - no-loop-func: 0 # disallow creation of functions within loops - no-multi-spaces: 0 # disallow use of multiple spaces - no-multi-str: 2 # disallow use of multiline strings - no-native-reassign: 2 # disallow reassignments of native objects - no-new: 2 # disallow use of new operator when not part of the assignment or - # comparison - no-new-func: 0 # disallow use of new operator for Function object - no-new-wrappers: 2 # disallows creating new instances of String,Number, and Boolean - no-octal: 0 # disallow use of octal literals - no-octal-escape: 0 # disallow use of octal escape sequences in string literals, such as - # `var foo = "Copyright \251"` - no-process-env: 0 # disallow use of process.env - no-proto: 2 # disallow usage of __proto__ property - no-redeclare: 1 # disallow declaring the same variable more then once - no-return-assign: 0 # disallow use of assignment in return statement - no-script-url: 2 # disallow use of javascript urls. - no-self-compare: 2 # disallow comparisons where both sides are exactly the same - no-sequences: 2 # disallow use of comma operator - no-unused-expressions: 0 # disallow usage of expressions in statement position - no-void: 2 # disallow use of void operator - no-warning-comments: 0 # disallow usage of configurable warning terms in comments - e.g. - no-with: 2 # disallow use of the with statement - radix: 2 # require use of the second argument for parseInt() - vars-on-top: 0 # requires to declare all vars on top of their containing scope - wrap-iife: [2, "inside"] # require immediate function invocation to be wrapped in parentheses - - ########################################################################### - # # - # STRICT MODE: these rules relate to using strict mode. # - # # - ########################################################################### - - strict: [2, "never"] # require that all functions are run in strict mode - - ########################################################################### - # # - # VARIABLES: these rules have to do with variable declarations. # - # # - ########################################################################### - - no-catch-shadow: 2 # disallow the catch clause parameter name being the same as a - # variable in the outer scope - no-delete-var: 2 # disallow deletion of variables - no-label-var: 2 # disallow labels that share a name with a variable - no-shadow: 0 # disallow declaration of variables already declared in the - # outer scope - no-shadow-restricted-names: 2 # disallow shadowing of names such as arguments - no-undef: 0 # disallow use of undeclared variables unless mentioned in a - # /*global */ block - no-undef-init: 2 # disallow use of undefined when initializing variables - no-undefined: 0 # disallow use of undefined variable - no-unused-vars: 0 # disallow declaration of variables that are not used in the code - no-use-before-define: 0 # disallow use of variables before they are defined - - ########################################################################### - # # - # NODE: these rules relate to functionality provided in Node.js. # - # # - ########################################################################### - - handle-callback-err: 0 # enforces error handling in callbacks - no-mixed-requires: 0 # disallow mixing regular variable and require declarations - no-new-require: 2 # disallow use of new operator with the require function - no-path-concat: 2 # disallow string concatenation with __dirname and __filename - no-process-exit: 0 # disallow process.exit() - no-restricted-modules: 0 # restrict usage of specified node modules - no-sync: 0 # disallow use of synchronous methods - - ########################################################################### - # # - # STYLISTIC ISSUES: these rules are purely matters of style and, # - # while valueable to enforce consistently across a project, are # - # quite subjective. # - # # - ########################################################################### - - indent: [2, 2] # Set a specific tab width - brace-style: 0 # enforce one true brace style - camelcase: 0 # require camel case names - comma-spacing: 2 # enforce spacing before and after comma - comma-style: 2 # enforce one true comma style - consistent-this: 0 # enforces consistent naming when capturing the current execution context - eol-last: 0 # enforce newline at the end of file, with no multiple empty lines - func-names: 0 # require function expressions to have a name - func-style: 0 # enforces use of function declarations or expressions - key-spacing: 2 # enforces spacing between keys and values in object literal properties - max-nested-callbacks: [2, 4] # specify the maximum depth callbacks can be nested - new-cap: 0 # require a capital letter for constructors - new-parens: 2 # disallow the omission of parentheses when invoking a constructor with no arguments - no-array-constructor: 2 # disallow use of the Array constructor - no-lonely-if: 0 # disallow if as the only statement in an else block - no-mixed-spaces-and-tabs: 2 # disallow mixed spaces and tabs for indentation - no-nested-ternary: 0 # disallow nested ternary expressions - no-new-object: 1 # disallow use of the Object constructor - no-space-before-semi: 0 # disallow space before semicolon - no-spaced-func: 2 # disallow space between function identifier and application - no-ternary: 0 # disallow the use of ternary operators - - no-trailing-spaces: 2 # disallow trailing whitespace at the end of lines - no-multiple-empty-lines: 0 # disallow multiple empty lines - no-underscore-dangle: 0 # disallow dangling underscores in identifiers - no-extra-parens: 2 # disallow wrapping of non-IIFE statements in parens - one-var: 0 # allow just one var statement per function - padded-blocks: 0 # enforce padding within blocks - quotes: # specify whether double or single quotes should be used - [1, "single", "avoid-escape"] - quote-props: 0 # require quotes around object literal property names - semi: [2, "always"] # require or disallow use of semicolons instead of ASI - semi-spacing: 0 - sort-vars: 0 # sort variables within the same declaration block - keyword-spacing: 2 # require a space after certain keywords - space-before-blocks: 2 # require or disallow space before blocks - space-in-brackets: 0 # require or disallow spaces inside brackets - space-in-parens: 0 # require or disallow spaces inside parentheses - space-infix-ops: 0 # require spaces around operators - spaced-line-comment: 0 # require or disallow a space immediately following - # the // in a line comment - wrap-regex: 0 # require regex literals to be wrapped in parentheses - +{ + "root": true, + "extends": [ + "eslint:recommended", + "plugin:import/errors", + "plugin:import/warnings", + ], + "env": { + "commonjs": true, + "node": true + }, + "globals" : { + }, + "settings": { + "import/resolver": "node" + }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread" : true + } + }, + "rules": { + "no-extra-boolean-cast": 0, + "no-prototype-builtins": 0, + "no-unused-vars": ["error", { "vars": "all", "args": "none", "varsIgnorePattern": "logger" }], + "max-len": [2, {"code": 120, "tabWidth": 2, "ignoreUrls": true}], + "arrow-spacing": 2, + "object-curly-spacing": [2, "always"], + "no-multiple-empty-lines": 0, + "id-length": [2, {"exceptions": ["$", "_", "L", "v", "w", "h", "i", "j"]}], + "array-bracket-spacing": [0, "always"], + "arrow-body-style": 0, + "no-underscore-dangle": 0, + "func-names": 0, + "padded-blocks": 0, + "class-methods-use-this": 0, + + # ensure JSDoc comments are valid + "valid-jsdoc": [1, { + "requireReturn": false, + requireParamDescription: false, + requireReturnDescription: false + }], + + "import/prefer-default-export": 0, + "import/no-extraneous-dependencies": 0, + "import/no-unresolved": 0, + "import/no-duplicates": 0, + "import/newline-after-import": 0, + "import/imports-first": 0, + "import/extensions": 0, + }, +} diff --git a/.gitignore b/.gitignore index 1844eb5..e008235 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,7 @@ node_modules .npm # Optional REPL history -.node_repl_history \ No newline at end of file +.node_repl_history + +# ESLint Cache +.eslintcache diff --git a/package.json b/package.json index c0656de..19a2536 100644 --- a/package.json +++ b/package.json @@ -28,19 +28,26 @@ "test:node:tdd": "npm run test:node -- --cache --watch", "test:node:ci": "npm run test:node && nyc report --reporter=text-lcov | coveralls", "test:bundle:tdd": "npm-run-all -l --parallel 'bundle:* -- --watch'", - "eslint": "eslint src test", + "lint": "eslint --format ./node_modules/eslint-friendly-formatter --cache src test", "clean": "rimraf dist && mkdirp dist", "bundle": "npm-run-all -l --parallel bundle:node bundle:browser", "bundle:node": "rollup -c --environment RUNTIME_ENV:node", "bundle:browser": "rollup -c --environment RUNTIME_ENV:client", "start": "npm test && npm run dist", - "dist": "npm run eslint && npm run clean && npm run bundle && npm run docs", + "dist": "npm run lint && npm run clean && npm run bundle && npm run docs", "docs": "documentation build src/client.js src/node.js --github --format md --output API.md", + "security-scan": "nsp check --output summary --warn-only", "pretest": "npm run bundle", "preversion": "npm run dist; git add API.md", "version": "auto-changelog --template compact --package; git add CHANGELOG.md", "release": "np" }, + "config": { + "ghooks": { + "pre-commit": "npm run lint", + "pre-push": "npm run security-scan" + } + }, "repository": { "type": "git", "url": "git@github.com:wework/we-js-logger.git" @@ -82,6 +89,10 @@ "coveralls": "2.11.14", "documentation": "4.0.0-beta11", "eslint": "3.8.1", + "eslint-friendly-formatter": "2.0.6", + "eslint-plugin-import": "2.0.1", + "eslint-plugin-mocha": "4.7.0", + "ghooks": "1.3.2", "imports-loader": "0.6.5", "json-loader": "0.5.4", "karma": "1.3.0", @@ -96,6 +107,7 @@ "mocha": "3.1.2", "np": "2.9.0", "npm-run-all": "3.1.1", + "nsp": "2.6.2", "nyc": "8.3.1", "phantomjs-prebuilt": "2.1.13", "rimraf": "2.5.4", diff --git a/src/client.js b/src/client.js index 30f9e8c..451b656 100644 --- a/src/client.js +++ b/src/client.js @@ -55,7 +55,9 @@ function getStreams(config) { }); } } else { + /* eslint-disable no-console */ console.warn('Client rollbar is not correctly configured'); + /* eslint-enable */ } // Transport client logs diff --git a/src/node.js b/src/node.js index ad62b44..08f9a1a 100644 --- a/src/node.js +++ b/src/node.js @@ -5,7 +5,6 @@ import Rollbar from 'rollbar'; import bunyanFormat from 'bunyan-format'; import ServerRollbarLogger from './util/server/rollbarLogger'; import ServerLogentriesLogger from './util/server/logentriesLogger'; -import RollbarLogger from './util/server/rollbarLogger'; import createRequestLogger from './util/server/requestLogger'; /** diff --git a/src/util/client/rollbarLogger.js b/src/util/client/rollbarLogger.js index 6411e35..f780a8f 100644 --- a/src/util/client/rollbarLogger.js +++ b/src/util/client/rollbarLogger.js @@ -1,4 +1,3 @@ -import bunyan from 'bunyan'; import omit from 'lodash/omit'; import get from 'lodash/get'; import { bunyanLevelToRollbarLevelName } from '../common/rollbar'; diff --git a/src/util/server/rollbarLogger.js b/src/util/server/rollbarLogger.js index dedba02..4cb5c88 100644 --- a/src/util/server/rollbarLogger.js +++ b/src/util/server/rollbarLogger.js @@ -1,7 +1,6 @@ import Rollbar from 'rollbar'; import omit from 'lodash/omit'; import isError from 'lodash/isError'; -import bunyan from 'bunyan'; import { bunyanLevelToRollbarLevelName } from '../common/rollbar'; /** diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 0000000..7e35abf --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,19 @@ +{ + "env": { + "mocha": true + }, + "globals": { + "sinon": false, + "expect": false + }, + "rules": { + "no-unused-expressions": 0, + "max-len": 0, + "mocha/no-exclusive-tests": 1, + "mocha/handle-done-callback": 1, + "mocha/no-nested-tests": 1 + }, + "plugins": [ + "mocha" + ] +} diff --git a/test/specs/logger.spec.js b/test/specs/logger.spec.js index a412564..e074bc9 100644 --- a/test/specs/logger.spec.js +++ b/test/specs/logger.spec.js @@ -1,7 +1,5 @@ -// Require the package. For client tests, webpack should resolve to the browser version automatically. -import _ from 'lodash'; -import bunyan from 'bunyan'; - +// Require the package. For client tests, webpack should +// resolve to the browser version automatically. import Logger from '../../'; import TestLogger from '../testLogger';