README
slint
Lint-tool for web projects
What it does
It takes a basic recipe of what linters you want to apply to which files (and, optionally, the linter configuration):
[
{
"tool": "jshint",
"files": ["**/*.js", "!node_modules"]
},
{
"tool": "trailing-spaces",
"files": ["**", "!node_modules"]
},
{
"tool": "json",
"files": ["**/*.json", "!node_modules"]
}
]
Running the tool with this configuration file will use gitignore-style expansion to figure out what file to lint and run them through the relevant linter and report any errors.
Trying it out
- Install
slint
usingnpm install slint
. - Copy/paste the example code below into a
slint.json
in the root of your project. - Run
./node_modules/.bin/slint slint.json
.
If you want to add slint as a git pre-commit hook, fire off the following stanza:
echo ./node_modules/.bin/slint slint.json > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Advanced slinting
The linters can be given optional configurations (strings will be read as JSON files and objects will be passed directly).
It is also important that linters can be run multiple times with different configurations/different files. (Ex. to allow ES5-stuff in Node.js-code, but disallow it in front-end code.)
[
{
"tool": "jshint",
"files": ["./frontend-code/**/*.js", "!3rdparty"],
"config": "./misc/jshint-frontend.conf"
},
{
"tool": "jshint",
"files": ["lib/**.js", "test/**.js" ],
"config": "./misc/jshint-nodejs.conf"
},
{
"tool": "trailing-spaces",
"files": ["**", "!node_modules", "!3rdparty"]
},
{
"tool": "json",
"files": ["**/*.json", "!node_modules", "!3rdparty"],
"config": {
"indent": " ", // Use two spaces
"canonical": false // Don't sort object keys
}
}
]
Goals
- Uniform output from all linters (and reporters to format output).
- Pluggable linting infrastructure.
- Fast. I/O seem to be the limiting factor, so by being async and work to not read files multiple times, it should improve.
Linters
trailing-spaces
: Verifies that files doesn't have lines ending with whitespace-characters.jshint
:- Configuration is an ordinary jshint-configuration.
json
:- Configuration:
canonical
(default:false
) - checks if keys are sorted.indent
(default: off) will check if the file is indented with the given string.
- Configuration:
npm-packages
: Compares what's inpackage.json
versus output ofnpm ls
.less
: Runs files through the less-compiler and checks for parse-errors.
TODO
- HTML
- CSS
- package.json (all packages are pinned to versions, where to publish, ...)
- package.json sanity checks
- Check magic bytes binary data vs. extension
- JPEGs are RGB (and not CMYK)
- Consistent indentation (tabs vs spaces. And how many?)
See also
License
BSD (3-clause variety)