2019-04-13 11:18:57 -07:00
|
|
|
# markdownlint-rule-helpers
|
|
|
|
|
|
|
|
> A collection of `markdownlint` helper functions for custom rules
|
|
|
|
|
|
|
|
## Overview
|
|
|
|
|
2022-11-05 17:34:37 -07:00
|
|
|
The [Markdown][markdown] linter [`markdownlint`][markdownlint] offers a variety
|
|
|
|
of built-in validation [rules][rules] and supports the creation of [custom
|
|
|
|
rules][custom-rules]. The internal rules share various helper functions; this
|
|
|
|
package exposes those for reuse by custom rules.
|
2019-04-13 11:18:57 -07:00
|
|
|
|
|
|
|
## API
|
|
|
|
|
2022-11-13 20:53:10 -08:00
|
|
|
*Undocumented* - This package exports the internal functions as-is. The APIs
|
2022-11-05 17:34:37 -07:00
|
|
|
were not originally meant to be public, are not officially supported, and may
|
|
|
|
change from release to release. There are brief descriptive comments above each
|
|
|
|
function, but no [JSDoc][jsdoc] annotations. That said, some of what's here will
|
|
|
|
be useful to custom rule authors and may avoid duplicating code.
|
2019-04-13 11:18:57 -07:00
|
|
|
|
2022-12-03 15:48:08 -05:00
|
|
|
## Examples
|
|
|
|
|
|
|
|
### Using Helpers from a Custom Rule
|
2019-04-13 11:18:57 -07:00
|
|
|
|
2022-11-13 20:53:10 -08:00
|
|
|
```javascript
|
2019-04-13 11:18:57 -07:00
|
|
|
const { forEachLine, getLineMetadata } = require("markdownlint-rule-helpers");
|
|
|
|
|
2024-03-06 21:18:51 -08:00
|
|
|
/** @type import("markdownlint").Rule */
|
2019-04-13 11:18:57 -07:00
|
|
|
module.exports = {
|
|
|
|
"names": [ "every-n-lines" ],
|
|
|
|
"description": "Rule that reports an error every N lines",
|
|
|
|
"tags": [ "test" ],
|
2024-03-09 16:17:50 -08:00
|
|
|
"parser": "none",
|
2019-04-13 11:18:57 -07:00
|
|
|
"function": (params, onError) => {
|
|
|
|
const n = params.config.n || 2;
|
|
|
|
forEachLine(getLineMetadata(params), (line, lineIndex) => {
|
|
|
|
const lineNumber = lineIndex + 1;
|
|
|
|
if ((lineNumber % n) === 0) {
|
|
|
|
onError({
|
|
|
|
"lineNumber": lineNumber,
|
|
|
|
"detail": "Line number " + lineNumber
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
```
|
|
|
|
|
2022-12-03 15:48:08 -05:00
|
|
|
### Applying Recommended Fixes
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
const { "sync": markdownlintSync } = require("markdownlint");
|
|
|
|
const markdownlintRuleHelpers = require("markdownlint-rule-helpers");
|
|
|
|
|
|
|
|
function fixMarkdownlintViolations(content) {
|
|
|
|
const fixResults = markdownlintSync({ strings: { content } });
|
|
|
|
return markdownlintRuleHelpers.applyFixes(content, fixResults.content);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-11-05 17:34:37 -07:00
|
|
|
See also: [`markdownlint` built-in rule implementations][lib].
|
2019-04-13 11:18:57 -07:00
|
|
|
|
|
|
|
## Tests
|
|
|
|
|
2022-11-13 20:53:10 -08:00
|
|
|
*None* - The entire body of code is tested to 100% coverage by the core
|
2022-11-05 17:34:37 -07:00
|
|
|
`markdownlint` project, so there are no additional tests here.
|
|
|
|
|
2024-03-20 20:44:38 -07:00
|
|
|
[custom-rules]: https://github.com/DavidAnson/markdownlint/blob/v0.34.0/doc/CustomRules.md
|
2022-11-05 17:34:37 -07:00
|
|
|
[jsdoc]: https://en.m.wikipedia.org/wiki/JSDoc
|
2024-03-20 20:44:38 -07:00
|
|
|
[lib]: https://github.com/DavidAnson/markdownlint/tree/v0.34.0/lib
|
2022-11-05 17:34:37 -07:00
|
|
|
[markdown]: https://en.wikipedia.org/wiki/Markdown
|
|
|
|
[markdownlint]: https://github.com/DavidAnson/markdownlint
|
2024-03-20 20:44:38 -07:00
|
|
|
[rules]: https://github.com/DavidAnson/markdownlint/blob/v0.34.0/doc/Rules.md
|