balderdashy/waterline

View on GitHub
.jshintrc

Summary

Maintainability
Test Coverage
{
  //    ┬┌─┐╦ ╦╦╔╗╔╔╦╗┬─┐┌─┐
  //    │└─┐╠═╣║║║║ ║ ├┬┘│
  //  o└┘└─┘╩ ╩╩╝╚╝ ╩ ┴└─└─┘
  //
  // This file (`.jshintrc`) exists to help with consistency of code
  // throughout this package, and throughout Sails and the Node-Machine project.
  //
  // To review what each of these options mean, see:
  // http://jshint.com/docs/options
  //
  // (or: https://github.com/jshint/jshint/blob/master/examples/.jshintrc)



  //////////////////////////////////////////////////////////////////////
  // NOT SUPPORTED IN SOME JSHINT VERSIONS SO LEAVING COMMENTED OUT:
  //////////////////////////////////////////////////////////////////////
  // Prevent overwriting prototypes of native classes like `Array`.
  // (doing this is _never_ ok in any of our packages that are intended
  //  to be used as dependencies of other developers' modules and apps)
  // "freeze": true,
  //////////////////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////////////////
  // EVERYTHING ELSE:
  //////////////////////////////////////////////////////////////////////

  // Allow the use of ES6 features.
  // (re ES7, see https://github.com/jshint/jshint/issues/2297)
  "esversion": 6,

  // Allow the use of `eval` and `new Function()`
  // (we sometimes actually need to use these things)
  "evil": true,

  // Tolerate funny-looking dashes in RegExp literals.
  // (see https://github.com/jshint/jshint/issues/159#issue-903547)
  "regexdash": true,

  // The potential runtime "Environments" (as defined by jshint)
  // that the _style_ of code written in this package should be
  // compatible with (not the code itself, of course).
  "browser": true,
  "node": true,
  "wsh": true,

  // Tolerate the use `[]` notation when dot notation would be possible.
  // (this is sometimes preferable for readability)
  "sub": true,

  // Do NOT suppress warnings about mixed tabs and spaces
  // (two spaces always, please; see `.editorconfig`)
  "smarttabs": false,

  // Suppress warnings about trailing whitespace
  // (this is already enforced by the .editorconfig, so no need to warn as well)
  "trailing": false,

  // Suppress warnings about the use of expressions where fn calls or assignments
  // are expected, and about using assignments where conditionals are expected.
  // (while generally a good idea, without this setting, JSHint needlessly lights up warnings
  //  in existing, working code that really shouldn't be tampered with.  Pandora's box and all.)
  "expr": true,
  "boss": true,

  // Do NOT suppress warnings about using functions inside loops
  // (in the general case, we should be using iteratee functions with `_.each()`
  //  or `Array.prototype.forEach()` instead of `for` or `while` statements
  //  anyway.  This warning serves as a helpful reminder.)
  "loopfunc": false,

  // Suppress warnings about "weird constructions"
  // i.e. allow code like:
  // ```
  //  (new (function OneTimeUsePrototype () { } ))
  // ```
  //
  // (sometimes order of operations in JavaScript can be scary.  There is
  //  nothing wrong with using an extra set of parantheses when the mood
  //  strikes or you get "that special feeling".)
  "supernew": true,

  // Do NOT allow backwards, node-dependency-style commas.
  // (while this code style choice was used by the project in the past,
  //  we have since standardized these practices to make code easier to
  //  read, albeit a bit less exciting)
  "laxcomma": false,

  // Do NOT allow avant garde use of commas in conditional statements.
  // (this prevents accidentally writing code like:
  //  ```
  //  if (!_.contains(['+ci', '-ci', '∆ci', '+ce', '-ce', '∆ce']), change.verb) {...}
  //  ```
  //  See the problem in that code?  Neither did we-- that's the problem!)
  "nocomma": true,

  // Strictly enforce the consistent use of single quotes.
  // (this is a convention that was established primarily to make it easier
  //  to grep [or FIND+REPLACE in Sublime] particular string literals in
  //  JavaScript [.js] files.  Note that JSON [.json] files are, of course,
  //  still written exclusively using double quotes around key names and
  //  around string literals.)
  "quotmark": "single",

  // Do NOT suppress warnings about the use of `==null` comparisons.
  // (please be explicit-- use Lodash or `require('util')` and call
  //  either `.isNull()` or `.isUndefined()`)
  "eqnull": false,

  // Strictly enforce the use of curly braces with `if`, `else`, and `switch`
  // as well as, much less commonly, `for` and `while` statements.
  // (this is just so that all of our code is consistent, and to avoid bugs)
  "curly": true,

  // Strictly enforce the use of `===` and `!==`.
  // (this is always a good idea.  Check out "Truth, Equality, and JavaScript"
  //  by Angus Croll [the author of "If Hemmingway Wrote JavaScript"] for more
  //  explanation as to why.)
  "eqeqeq": true,

  // Allow initializing variables to `undefined`.
  // For more information, see:
  //  • https://jslinterrors.com/it-is-not-necessary-to-initialize-a-to-undefined
  //  • https://github.com/jshint/jshint/issues/1484
  //
  // (it is often very helpful to explicitly clarify the initial value of
  //  a local variable-- especially for folks new to more advanced JavaScript
  //  and who might not recognize the subtle, yet critically important differences between our seemingly
  //  between `null` and `undefined`, and the impact on `typeof` checks)
  "-W080": true

}