suggestion-bot
suggestion-bot submits code reviews with suggestions based on your diffs.

Usage
Usage: cli.js [options] [diff | file]
Submit code reviews with suggestions based on your diffs
Arguments:
diff | file the diff or file containing diff to create suggestions from
Options:
-h, --help display this help message
-v, --version display version number
-m, --message <msg> use the specified message as the PR comment
-f, --fail fail if comments could not be posted
Examples:
# Submit current changes as suggestions
GITHUB_TOKEN=<secret> suggestion-bot "$(git diff)"
# Alternatively, pipe to suggestion-bot
# to avoid escape character issues
git diff | GITHUB_TOKEN=<secret> suggestion-bot
If your CI is hosted by Azure DevOps, replace GITHUB_TOKEN with
AZURE_PERSONAL_ACCESS_TOKEN.
Requirements
- Host your code on GitHub
GITHUB_TOKENpermissions:pull-requests: write— required for creating code reviewsissues: write— fallback in case creating a review fails
-- or --
- Host your code on Azure DevOps
- An Azure DevOps personal access token
Recipes
- Using
suggestion-botwith GitHub Actions - Using
suggestion-botwithclang-format - Using
suggestion-botwith Prettier
Using suggestion-bot with GitHub Actions
-
Install
suggestion-botin your projectyarn add suggestion-bot --dev -
Configure your GitHub workflow so
suggestion-botcan access theGITHUB_TOKENsecret provided by GitHub via an environment variable with the same name:# .github/workflows/build.ymljobs:lint:runs-on: ubuntu-lateststeps:- name: Set up Node.jsuses: actions/setup-node@v6with:node-version: 24- name: Checkoutuses: actions/checkout@v6- name: Installrun: yarn- name: ClangFormatif: ${{ github.event_name == 'pull_request' }}env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}run: scripts/clang-format-diff.sh | yarn suggestion-bot
Using suggestion-bot with clang-format
Use clang-format-diff to format only changed files:
curl --silent --show-error --remote-name https://raw.githubusercontent.com/llvm/llvm-project/release/10.x/clang/tools/clang-format/clang-format-diff.py
git diff --unified=0 --no-color @^ \
| python clang-format-diff.py -p1 -regex '.*\.(cpp|cc|c\+\+|cxx|c|cl|h|hh|hpp|m|mm|inc)' -sort-includes \
| yarn suggestion-bot
Using suggestion-bot with Prettier
We must first write a script that pipes Prettier's output to diff so we
can feed it to suggestion-bot later.
#!/usr/bin/env node
import { spawnSync } from "node:child_process";
import * as fs from "node:fs";
import * as prettier from "prettier";
import suggest from "suggestion-bot";
const diff = process.argv.slice(2).reduce((diff, filepath) => {
const source = fs.readFileSync(filepath, { encoding: "utf8" });
const { stdout } = spawnSync("diff", ["--unified", filepath, "-"], {
input: prettier.format(source, { filepath }),
encoding: "utf-8",
});
return diff + stdout;
}, "");
suggest(diff);
Save the script somewhere, e.g. scripts/prettier-diff.mjs, then invoke it with
Node:
node scripts/prettier-diff.mjs $(git ls-files '*.js')