remark-lint/packages/remark-lint-no-undefined-references
2023-11-09 16:08:19 +01:00
..
index.js Update unified, @types/mdast, etc 2023-11-09 14:45:02 +01:00
package.json Refactor package.jsons 2023-11-09 16:08:19 +01:00
readme.md Refactor types 2023-05-16 12:21:38 +02:00
tsconfig.json Refactor tsconfig.jsons 2023-11-09 15:58:43 +01:00

remark-lint-no-undefined-references

Build Coverage Downloads Size Sponsors Backers Chat

remark-lint rule to warn when undefined definitions are referenced.

Contents

What is this?

This package is a unified (remark) plugin, specifically a remark-lint rule. Lint rules check markdown code style.

When should I use this?

You can use this package to check that referenced definitions are defined.

Presets

This rule is included in the following presets:

Preset Setting
remark-preset-lint-recommended

Install

This package is ESM only. In Node.js (version 12.20+, 14.14+, or 16.0+), install with npm:

npm install remark-lint-no-undefined-references

In Deno with esm.sh:

import remarkLintNoUndefinedReferences from 'https://esm.sh/remark-lint-no-undefined-references@4'

In browsers with esm.sh:

<script type="module">
  import remarkLintNoUndefinedReferences from 'https://esm.sh/remark-lint-no-undefined-references@4?bundle'
</script>

Use

On the API:

import {read} from 'to-vfile'
import {reporter} from 'vfile-reporter'
import {remark} from 'remark'
import remarkLint from 'remark-lint'
import remarkLintNoUndefinedReferences from 'remark-lint-no-undefined-references'

main()

async function main() {
  const file = await remark()
    .use(remarkLint)
    .use(remarkLintNoUndefinedReferences)
    .process(await read('example.md'))

  console.error(reporter(file))
}

On the CLI:

remark --use remark-lint --use remark-lint-no-undefined-references example.md

On the CLI in a config file (here a package.json):

 …
 "remarkConfig": {
   "plugins": [
     …
     "remark-lint",
+    "remark-lint-no-undefined-references",
     …
   ]
 }
 …

API

This package exports no identifiers. The default export is remarkLintNoUndefinedReferences.

unified().use(remarkLintNoUndefinedReferences[, config])

This rule supports standard configuration that all remark lint rules accept (such as false to turn it off or [1, options] to configure it).

The following options (default: undefined) are accepted:

  • Object with the following fields:
    • allow (Array<string | RegExp | { source: string }>, default: []) — text or regex that you want to be allowed between [ and ] even though its undefined; regex is provided via a RegExp object or via a {source: string} object where source is the source text of a case-insensitive regex

Recommendation

Shortcut references use an implicit syntax that could also occur as plain text. For example, it is reasonable to expect an author adding […] to abbreviate some text somewhere in a document:

> Some […] quote.

This isnt a problem, but it might become one when an author later adds a definition:

Some text. […][]

[…] #read-more "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 first authors text.

Examples

ok.md
In
[foo][]

Just a [ bracket.

Typically, youd want to use escapes (with a backslash: \\) to escape what
could turn into a \[reference otherwise].

Just two braces cant link: [].

[foo]: https://example.com
Out

No messages.

not-ok.md
In
[bar]

[baz][]

[text][qux]

Spread [over
lines][]

> in [a
> block quote][]

[asd][a

Can include [*emphasis*].

Multiple pairs: [a][b][c].
Out
1:1-1:6: Found reference to undefined definition
3:1-3:8: Found reference to undefined definition
5:1-5:12: Found reference to undefined definition
7:8-8:9: Found reference to undefined definition
10:6-11:17: Found reference to undefined definition
13:1-13:6: Found reference to undefined definition
15:13-15:25: Found reference to undefined definition
17:17-17:23: Found reference to undefined definition
17:23-17:26: Found reference to undefined definition
ok-allow.md

When configured with { allow: [ '...', '…' ] }.

In
> Eliding a portion of a quoted passage […] is acceptable.
Out

No messages.

ok-allow.md

When configured with { allow: [ 'a', { source: '^b\\.' } ] }.

In
[foo][b.c]

[bar][a]

Matching is case-insensitive: [bar][B.C]
Out

No messages.

not-ok.md

When configured with { allow: [ 'a', { source: '^b\\.' } ] }.

In
[foo][a.c]

[bar][b]
Out
1:1-1:11: Found reference to undefined definition
3:1-3:9: Found reference to undefined definition

Compatibility

Projects maintained by the unified collective are compatible with all maintained versions of Node.js. As of now, that is Node.js 12.20+, 14.14+, and 16.0+. Our projects sometimes work with older versions, but this is not guaranteed.

Contribute

See contributing.md in remarkjs/.github for ways to get started. See support.md for ways to get help.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

License

MIT © Titus Wormer