NodeOS Standard Style
Simply a fork of Standard with different rules for the NodeOS team
No decisions to make. No .eslintrc
, .jshintrc
, or .jscsrc
files to manage. It just
works.
This module saves you (and others!) time in two ways:
- No configuration. The easiest way to enforce consistent style in your
project. Just drop it in.
- Catch style errors before they're submitted in PRs. Saves precious code
review time by eliminating back-and-forth between maintainer and contributor.
Install with:
npm install nodeos-standard
The rules
For a quick list of the rules, please refer to ESLint's recommended rules here.
The specific additions to these rules are as followed:
- semicolons are optional
- Unix style line breaks
Table of Contents
Install
The easiest way to use NodeOS Standard Style to check your code is to install
it globally as a Node command line program. To do so, simply run the following
command in your terminal (flag -g
installs standard
globally on your system,
omit it if you want to install in the current working directory):
npm install nodeos-standard --global
Or, you can run this command to install nodeos-standard
locally, for use in your module:
npm install nodeos-standard --save-dev
Node.js and npm are required to run the preceding commands.
Usage
After you've installed nodeos-standard
, you should be able to use the nodeos-standard
program. The
simplest use case would be checking the style of all JavaScript files in the
current working directory:
$ nodeos-standard
Error: Use NodeOS Standard Style
lib/torrent.js:950:11: Expected '===' and instead saw '=='.
You can optionally pass in a directory (or directories) using the glob pattern. Be
sure to quote paths containing glob patterns so that they are expanded by nodeos-standard
instead of your shell:
$ nodeos-standard "src/util/**/*.js" "test/**/*.js"
Note: by default nodeos-standard
will look for all files matching the patterns:
**/*.js
, **/*.jsx
.
What you might do if you're clever
- Add it to
package.json
{
"name": "my-cool-package",
"devDependencies": {
"nodeos-standard": "*"
},
"scripts": {
"test": "nodeos-standard && node my-tests.js"
}
}
- Check style automatically when you run
npm test
$ npm test
Error: Use NodeOS Standard Style
lib/torrent.js:950:11: Expected '===' and instead saw '=='.
- Never give style feedback on a pull request again!
How do I ignore files?
The paths node_modules/**
, *.min.js
, bundle.js
, coverage/**
, hidden
files/folders (beginning with .
), and all patterns in a project's root
.gitignore
file are automatically ignored.
Sometimes you need to ignore additional folders or specific minified files. To do
that, add a nodeos-standard.ignore
property to package.json
:
"nodeos-standard": {
"ignore": [
"**/out/",
"/lib/select2/",
"/lib/ckeditor/",
"tmp.js"
]
}
FAQ
How do I hide a certain warning?
In rare cases, you'll need to break a rule and hide the warning generated by
nodeos-standard
.
NodeOS Standard Style uses eslint
under-the-hood and
you can hide warnings as you normally would if you used eslint
directly.
To get verbose output (so you can find the particular rule name to ignore), run:
$ nodeos-standard --verbose
Error: Use NodeOS Standard Style
routes/error.js:20:36: 'file' was used before it was defined. (no-use-before-define)
Disable all rules on a specific line:
file = 'I know what I am doing'
Or, disable only the "no-use-before-define"
rule:
file = 'I know what I am doing'
Or, disable the "no-use-before-define"
rule for multiple lines:
console.log('offending code goes here...')
console.log('offending code goes here...')
console.log('offending code goes here...')
I use a library that pollutes the global namespace. How do I prevent "variable is not defined" errors?
Some packages (e.g. mocha
) put their functions (e.g. describe
, it
) on the
global object (poor form!). Since these functions are not defined or require
d
anywhere in your code, nodeos-standard
will warn that you're using a variable that is
not defined (usually, this rule is really useful for catching typos!). But we want
to disable it for these global variables.
To let nodeos-standard
(as well as humans reading your code) know that certain variables
are global in your code, add this to the top of your file:
/* global myVar1, myVar2 */
If you have hundreds of files, adding comments to every file can be tedious. In
these cases, you can add this to package.json
:
{
"nodeos-standard": {
"globals": [ "myVar1", "myVar2" ]
}
}
Can I use a custom JS parser for bleeding-edge ES6 or ES7 support?
nodeos-standard
supports custom JS parsers. To use a custom parser, install it from npm
(example: npm install babel-eslint
) and add this to your package.json
:
{
"standard": {
"parser": "babel-eslint"
}
}
If you're using nodeos-standard
globally (you installed it with -g
), then you also
need to install babel-eslint
globally with npm install babel-eslint -g
.
What about Web Workers?
Add this to the top of your files:
This lets nodeos-standard
(as well as humans reading your code) know that self
is a
global in web worker code.
What about Mocha, Jasmine, QUnit, etc?
To support mocha in your test files, add this to the beginning of your test files:
Where mocha
can be one of jasmine
, qunit
, phantomjs
, and so on. To see a
full list, check ESLint's
specifying environments
documentation. For a list of what globals are available for these environments,
check the
globals npm
module.
Is there a Git pre-commit
hook?
Funny you should ask!
#!/bin/sh
git diff --name-only --cached --relative | grep '\.jsx\?$' | xargs nodeos-standard
if [ $? -ne 0 ]; then exit 1; fi
How do I make the output all colorful and pretty?
The built-in output is simple and straightforward, but if you like shiny things,
install snazzy:
npm install snazzy
And run:
$ nodeos-standard --verbose | snazzy
There's also standard-tap,
standard-json,
standard-reporter, and
standard-summary.
Node.js API
nodeos-standard.lintText(text, [opts], callback)
Lint the provided source text
to enforce JavaScript Standard Style. An opts
object may
be provided:
var opts = {
globals: [],
parser: ''
}
The callback
will be called with an Error
and results
object:
var results = {
results: [
{
filePath: '',
messages: [
{ ruleId: '', message: '', line: 0, column: 0 }
],
errorCount: 0,
warningCount: 0
}
],
errorCount: 0,
warningCount: 0
}
nodeos-standard.lintFiles(files, [opts], callback)
Lint the provided files
globs. An opts
object may be provided:
var opts = {
globals: [],
parser: '',
ignore: [],
cwd: ''
}
The callback
will be called with an Error
and results
object (same as above).
License
MIT. Copyright (c) Feross Aboukhadijeh.