This grunt plugin provides a combined rollup command that runs all lint checks typically used in Fluid projects. To add it to your package, use a command like:
npm install fluid-grunt-lint-all --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile as shown in the following example:
"use strict";
module.exports = function (grunt) {
grunt.config.init({
lintAll: {
sources: {
js: ["./src/js/**/*.js", "tests/js/**/*.js", "./*.js", "!./src/lib/**/*.js"]
}
}
});
grunt.loadNpmTasks("fluid-grunt-lint-all");
grunt.registerTask("lint", "Perform all standard lint checks.", ["lint-all"]);
grunt.registerTask("default", ["lint"]);
};
By default, this plugin takes care of letting all of the sub-tasks know where to look for Javascript, JSON, JSON5, and
Markdown files, so you only need to configure the lintAll
block as shown above. If you need to exclude content for
a single file type, add a negated pattern at the end of the relevant source block, as show here.
"use strict";
module.exports = function (grunt) {
grunt.config.init({
lintAll: {
sources: {
js: ["./src/js/**/*.js", "tests/js/**/*.js", "./*.js", "!./src/lib/**/*.js"]
}
}
});
grunt.loadNpmTasks("fluid-grunt-lint-all");
grunt.registerTask("lint", "Perform all standard lint checks.", ["lint-all"]);
grunt.registerTask("default", ["lint"]);
};
Once you have installed the plugin and updated your Gruntfile.js
, you should be able to run the lint-all
command from
the root of your repository, as in grunt lint-all
.
This plugin is a rollup that calls a range of individual checks. All checks support the standard src
array that
defines which material should be linted. For more information about the individual checks and links to their
documentation, see below:
Task | Description | Documentation |
---|---|---|
eslint | Run both the eslint:js and eslint:md tasks (see below). |
See below. |
eslint:js | Check the validity and formatting of Javascript files. | grunt-eslint |
eslint:md | Check the validity and formatting of Javascript code blocks in Markdown files. | eslint-plugin-markdown |
json5lint | Check the validity of JSON5 files. | fluid-grunt-json5lint |
jsonlint | Check the validity and formatting of JSON files. | grunt-jsonlint |
lintspaces | Check for trailing carriage returns and indentation. | grunt-lintspaces |
lintspaces:jsonindentation | Check the indentation of JSON files. | grunt-lintspaces |
lintspaces:newlines | Check for the presence of a carriage return at the end of a file. | grunt-lintspaces |
markdownlint | Check the formatting of Markdown files. | grunt-markdownlint |
mdjsonlint | Check the validity and formatting of JSON code blocks within Markdown files. | (Provided by this package. See below)) |
stylelint | Check the formatting of CSS or SCSS files. | grunt-stylelint |
Please note that many of the above checks use our standard ESLint configuration, which is available in the eslint-config-fluid package. You will need to follow the installation instructions in that package before you run many of the above checks.
The stylelint check uses our standard Stylelint configuration which is available in the stylelint-config-fluid package.You will need to follow the installation instructions in that package before you run the stylelint check against CSS or SCSS files.
Linting configurations can be customized by providing your own options in Gruntfile.js
as shown in this example:
module.exports = function (grunt) {
grunt.config.init({
eslint: {
js: {
options: {
rules: {
"eol-last": "off",
"strict": "off",
"no-undef": "off"
}
}
},
md: {
options: {
rules: {
semi: "off"
}
}
}
},
json5lint: {
options: {
enableJSON5: true
}
},
lintspaces: {
newlines: {
options: {
newline: false
}
},
jsonindentation: {
options: {
indentation: false
}
}
},
markdownlint: {
options: {
config: {
"first-header-h1": false,
"first-line-h1": false
}
}
},
"json-eslint": {
options: {
"rules": {
"comma-dangle": "off"
}
}
}
});
};
All of the checks above are configured to avoid linting things like package-lock.json
, coverage reports, and the
contents of the top-level node_modules
directory. You can override these by setting the ignores
option, as shown
here:
"use strict";
module.exports = function (grunt) {
grunt.config.init({
lintAll: {
sources: {
js: ["./src/js/**/*.js", "tests/js/**/*.js", "./*.js", "!./src/lib/**/*.js"]
},
ignores: ["!./tests/intentionally-broken-content/**/*", "!./node_modules", "!./package-lock.json"]
}
});
grunt.loadNpmTasks("fluid-grunt-lint-all");
grunt.registerTask("lint", "Perform all standard lint checks.", ["lint-all"]);
grunt.registerTask("default", ["lint"]);
};
Please note, ignores must be expressed as negative patterns, i.e. !./path/to/exclude/*.json
. Also, Grunt's options
merging will completely replace the defaults if you set a custom ignores
setting. If you are trying to ignore
content that corresponds to one of the file types in sources
(js
, json
, etc.), you're better off adding your
pattern(s) to a file-type-specific property. If you need to change the global ignores
option, you will need to
replicate any default rules (such as !/package-lock.json
) in your custom ignores
value.
This package provides a few key tasks.
This task inspects all JSON(5) as though it were enclosed in a simple javascript fixture. This does not check for validity, but instead checks things like indentation and other code conventions.
This tasks uses VSCode's JSON language parsing service to attempt to parse JSON files, and to return information about the location of any invalid JSON.
This task uses markdown-to-ast to extract
all code blocks within markdown content. Only fenced code blocks tagged with the json
or json5
language will be
linted:
The following will be scanned (and report an error):
```json
{
key: "not quoted"
}
```
The following will be scanned (and will not report an error):
```json5
{
key: "not quoted"
}
```
The following will not be scanned:
```snippet
someOperation(<garbage in>) => <garbage out>
```
Each code block is linted by attempting to parse it using either JSON.parse
, or the JSON5.parse
method provided by
the json5
library. Errors are caught and converted to a common format that includes
the information needed to identify which file, line number and column number are associated with the error. Note that
the first failure in a single fenced code block may prevent you from seeing subsequent errors in the same fenced code
block.
This is a list of publicly available software that is redistributed with this package: