unified-diff
unified plugin to ignore unrelated messages in GitHub Actions and Travis.
Contents
What is this?
This package is a unified plugin to ignore unrelated lint messages in a CI.
unified is a project that transforms content with abstract syntax trees (ASTs). vfile is the virtual file interface used in unified which manages messages. This is a unified plugin that filters messages on the vfile.
When should I use this?
You can use this plugin when you are dealing with a large, existing project.
Using tools that check whether things follow a style guide is typically very useful. However, it can be hard to start using something in a large existing project. This plugin helps, because it ignores messages that occur in lines that are not touched by a PR in a CI. When this plugin is used outside of a supported CIs, it doesn’t do anything.
Install
This package is ESM only. In Node.js (version 16+), install with npm:
npm install unified-diff
In Deno with esm.sh
:
import unifiedDiff from 'https://esm.sh/unified-diff@5'
In browsers with esm.sh
:
<script type="module">
import unifiedDiff from 'https://esm.sh/unified-diff@5?bundle'
</script>
Use
Say our document example.md
contains:
This is an an example.
👉 Note:
an an
is a typo.
…and our module example.js
looks as follows:
import process from 'node:process'
import remarkParse from 'remark-parse'
import remarkRetext from 'remark-retext'
import remarkStringify from 'remark-stringify'
import retextEnglish from 'retext-english'
import retextIndefiniteArticle from 'retext-indefinite-article'
import retextRepeatedWords from 'retext-repeated-words'
import {read} from 'to-vfile'
import {unified} from 'unified'
import unifiedDiff from 'unified-diff'
import {reporter} from 'vfile-reporter'
const file = await unified()
.use(remarkParse)
.use(
remarkRetext,
unified()
.use(retextEnglish)
.use(retextRepeatedWords)
.use(retextIndefiniteArticle)
)
.use(remarkStringify)
.use(unifiedDiff)
.process(await read('example.md'))
console.error(reporter(file))
process.exitCode = file.messages.length > 0 ? 1 : 0
…and our Travis configuration .travis.yml
contains:
# …
script:
- npm test
- node example.js
# …
👉 Note: an equivalent GH Actions workflow file is also supported.
Then, say someone creates a PR which adds the following diff:
diff --git a/example.md b/example.md
index 360b225..5a96b86 100644
--- a/example.md
+++ b/example.md
@@ -1 +1,3 @@
This is an an example.
+
+Some more more text. A error.
👉 Note:
more more
andA
beforeerror
are typos.
When run in CI, we’ll see the following printed on stderr(4).
example.md
3:6-3:15 warning Expected `more` once, not twice retext-repeated-words retext-repeated-words
3:22-3:23 warning Use `An` before `error`, not `A` retext-indefinite-article retext-indefinite-article
⚠ 2 warnings
👉 Note:
an an
on L1 is not included because it’s unrelated to this PR.
The build exits with 1
as there are messages, thus failing CI. The user sees this and amends the PR to the following:
diff --git a/example.md b/example.md
index 360b225..5a96b86 100644
--- a/example.md
+++ b/example.md
@@ -1 +1,3 @@
This is an an example.
+
+Some more text. An error.
This time our lint task exits successfully, even though L1 would normally emit an error, but it’s unrelated to the PR.
API
This package exports no identifiers. The default export is unifiedDiff
.
unified().use(unifiedDiff)
Ignore unrelated messages in GitHub Actions and Travis.
There are no options. If there’s a TRAVIS_COMMIT_RANGE
, GITHUB_BASE_REF
and GITHUB_HEAD_REF
, or GITHUB_SHA
environment variable, then this plugin runs, otherwise it does nothing.
To do
- Add support for other CIs (ping if you want to work on this)
- Add non-CI support (I’m not sure how though)
PRs welcome!
Returns
Transform (Transformer
).
Types
This package is fully typed with TypeScript. It exports no additional types.
Compatibility
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, unified-diff@^5
, compatible with Node.js 16.
Contribute
See contributing.md
in unifiedjs/.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.