remark-lint rule to warn when references to undefined definitions are found
npm install remark-lint-no-undefined-references[![Build][badge-build-image]][badge-build-url]
[![Coverage][badge-coverage-image]][badge-coverage-url]
[![Downloads][badge-downloads-image]][badge-downloads-url]
[![Size][badge-size-image]][badge-size-url]
[![Sponsors][badge-funding-sponsors-image]][badge-funding-url]
[![Backers][badge-funding-backers-image]][badge-funding-url]
[![Chat][badge-chat-image]][badge-chat-url]
[remark-lint][github-remark-lint] rule to warn when undefined definitions are referenced.
* What is this?
* When should I use this?
* Presets
* Install
* Use
* API
* [unified().use(remarkLintNoUndefinedReferences[, options])](#unifieduseremarklintnoundefinedreferences-options)
* Options
* Recommendation
* Examples
* Compatibility
* Contribute
* License
This package checks that referenced definitions are defined.
You can use this package to check for broken references.
This plugin is included in the following presets:
| Preset | Options |
| - | - |
| remark-preset-lint-recommended | |
This package is [ESM only][github-gist-esm].
In Node.js (version 16+),
install with [npm][npm-install]:
``sh`
npm install remark-lint-no-undefined-references
In Deno with [esm.sh][esm-sh]:
`js`
import remarkLintNoUndefinedReferences from 'https://esm.sh/remark-lint-no-undefined-references@5'
In browsers with [esm.sh][esm-sh]:
`html`
On the API:
`js
import remarkLint from 'remark-lint'
import remarkLintNoUndefinedReferences from 'remark-lint-no-undefined-references'
import remarkParse from 'remark-parse'
import remarkStringify from 'remark-stringify'
import {read} from 'to-vfile'
import {unified} from 'unified'
import {reporter} from 'vfile-reporter'
const file = await read('example.md')
await unified()
.use(remarkParse)
.use(remarkLint)
.use(remarkLintNoUndefinedReferences)
.use(remarkStringify)
.process(file)
console.error(reporter(file))
`
On the CLI:
`sh`
remark --frail --use remark-lint --use remark-lint-no-undefined-references .
On the CLI in a config file (here a package.json):
`diff`
…
"remarkConfig": {
"plugins": [
…
"remark-lint",
+ "remark-lint-no-undefined-references",
…
]
}
…
This package exports no identifiers.
It exports the [TypeScript][typescript] type
[Options][api-options].remarkLintNoUndefinedReferences
The default export is
[][api-remark-lint-no-undefined-references].
Warn when undefined definitions are referenced.
###### Parameters
* options ([Options][api-options], optional)
— configuration
###### Returns
Transform ([Transformer from unified][github-unified-transformer]).
Configuration (TypeScript type).
###### Fields
* allow (Array, optional)[
— list of values to allow between and ]allowShortcutLink
* (boolean, default: false)[text]
— allow shortcut references, which are just brackets such as
Shortcut references use an implicit syntax that could also occur as plain
text.
To illustrate,
it is reasonable to expect an author adding […] to abbreviate some text
somewhere in a document:
`markdown`
> Some […] quote.
This isn’t a problem,
but it might become one when an author later adds a definition:
`markdown
Some new text […][].
[…]: #read-more
`
The second author might expect only their newly added text to form a link,
but their changes also result in a link for the text by the first author.
##### ok.md
###### In
`markdown
[Mercury][] is the first planet from the Sun and the smallest in the Solar
System.
Venus is the second planet from the [Sun.
Earth is the third planet from the \[Sun] and the only astronomical object
known to harbor life\.
Mars is the fourth planet from the Sun: [].
[mercury]: https://example.com/mercury/
`
###### Out
No messages.
##### not-ok.md
###### In
`markdown
[Mercury] is the first planet from the Sun and the smallest in the Solar
System.
[Venus][] is the second planet from the Sun.
[Earth][earth] is the third planet from the Sun and the only astronomical
object known to harbor life.
![Mars] is the fourth planet from the Sun in the [Solar
System].
> Jupiter is the fifth planet from the Sun and the largest in the [Solar
> System][].
[Saturn][ is the sixth planet from the Sun and the second-largest
in the Solar System, after Jupiter.
[Uranus][] is the seventh planet from the Sun.
[Neptune][neptune][more] is the eighth and farthest planet from the Sun.
`
###### Out
`textmercury
1:1-1:10: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textvenus
4:1-4:10: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textearth
6:1-6:15: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textmars
9:2-9:8: Unexpected reference to undefined definition, expected corresponding definition () for an image or escaped opening bracket (\[) for regular textsolar system
9:50-10:8: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textsolar > system
12:67-13:12: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textsaturn
15:1-15:9: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular texturanus
18:1-18:13: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textneptune
20:1-20:19: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textmore
20:19-20:25: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular text`
##### ok-allow.md
When configured with { allow: [ '…' ] }.
###### In
`markdown`
Mercury is the first planet from the Sun and the smallest in the Solar
System. […]
###### Out
No messages.
##### source.md
When configured with { allow: [ { source: '^mer' }, 'venus' ] }.
###### In
`markdown
[Mercury][] is the first planet from the Sun and the smallest in the Solar
System.
[Venus][] is the second planet from the Sun.
`
###### Out
No messages.
##### gfm.md
###### In
> 👉 Note: this example uses
> GFM ([remark-gfm][github-remark-gfm]).
`markdown
Mercury[^mercury] is the first planet from the Sun and the smallest in the
Solar System.
[^venus]:
Venus is the second planet from the Sun.
`
###### Out
`textmercury
1:8-1:18: Unexpected reference to undefined definition, expected corresponding definition () for a footnote or escaped opening bracket (\[) for regular text`
##### gfm-table.md
###### In
> 👉 Note: this example uses
> GFM ([remark-gfm][github-remark-gfm]).
`markdown
| [Planet] | [Radius] |
| ----------------- | --------- |
| [Mercury] | 2439.7 km |
[planet]: https://example.com/planet/
`
###### Out
`textradius
1:23-1:31: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textmercury
3:3-3:12: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular text`
##### allow-shortcut-link.md
When configured with { allowShortcutLink: true }.
###### In
`markdown
[Mercury] is the first planet from the Sun and the smallest in the Solar
System.
[Venus][] is the second planet from the Sun.
[Earth][earth] is the third planet from the Sun and the only astronomical object
known to harbor life.
`
###### Out
`textvenus
4:1-4:10: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular textearth
6:1-6:15: Unexpected reference to undefined definition, expected corresponding definition () for a link or escaped opening bracket (\[) for regular text`
Projects maintained by the unified collective are compatible with maintained
versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line,
remark-lint-no-undefined-references@5,
compatible with Node.js 16.
See [contributing.md][github-dotfiles-contributing] in [remarkjs/.github][github-dotfiles-health] for wayssupport.md`][github-dotfiles-support] for ways to get help.
to get started.
See [
This project has a [code of conduct][github-dotfiles-coc].
By interacting with this repository, organization, or community you agree to
abide by its terms.
[MIT][file-license] © [Titus Wormer][author]
[api-options]: #options
[api-remark-lint-no-undefined-references]: #unifieduseremarklintnoundefinedreferences-options
[author]: https://wooorm.com
[badge-build-image]: https://github.com/remarkjs/remark-lint/workflows/main/badge.svg
[badge-build-url]: https://github.com/remarkjs/remark-lint/actions
[badge-chat-image]: https://img.shields.io/badge/chat-discussions-success.svg
[badge-chat-url]: https://github.com/remarkjs/remark/discussions
[badge-coverage-image]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg
[badge-coverage-url]: https://codecov.io/github/remarkjs/remark-lint
[badge-downloads-image]: https://img.shields.io/npm/dm/remark-lint-no-undefined-references.svg
[badge-downloads-url]: https://www.npmjs.com/package/remark-lint-no-undefined-references
[badge-funding-backers-image]: https://opencollective.com/unified/backers/badge.svg
[badge-funding-sponsors-image]: https://opencollective.com/unified/sponsors/badge.svg
[badge-funding-url]: https://opencollective.com/unified
[badge-size-image]: https://img.shields.io/bundlejs/size/remark-lint-no-undefined-references
[badge-size-url]: https://bundlejs.com/?q=remark-lint-no-undefined-references
[esm-sh]: https://esm.sh
[file-license]: https://github.com/remarkjs/remark-lint/blob/main/license
[github-dotfiles-coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md
[github-dotfiles-contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md
[github-dotfiles-health]: https://github.com/remarkjs/.github
[github-dotfiles-support]: https://github.com/remarkjs/.github/blob/main/support.md
[github-gist-esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[github-remark-gfm]: https://github.com/remarkjs/remark-gfm
[github-remark-lint]: https://github.com/remarkjs/remark-lint
[github-unified-transformer]: https://github.com/unifiedjs/unified#transformer
[npm-install]: https://docs.npmjs.com/cli/install
[typescript]: https://www.typescriptlang.org