Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tido64/suggestion-bot
suggestion-bot submits code reviews with suggestions based on your diffs
https://github.com/tido64/suggestion-bot
azure-devops code-review diff github pull-request review suggestions
Last synced: 3 months ago
JSON representation
suggestion-bot submits code reviews with suggestions based on your diffs
- Host: GitHub
- URL: https://github.com/tido64/suggestion-bot
- Owner: tido64
- License: mit
- Created: 2020-07-21T11:54:35.000Z (over 4 years ago)
- Default Branch: trunk
- Last Pushed: 2024-04-08T09:29:43.000Z (10 months ago)
- Last Synced: 2024-04-14T04:43:33.727Z (10 months ago)
- Topics: azure-devops, code-review, diff, github, pull-request, review, suggestions
- Language: JavaScript
- Homepage:
- Size: 8.58 MB
- Stars: 6
- Watchers: 1
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# suggestion-bot
[![build](https://github.com/tido64/suggestion-bot/actions/workflows/build.yml/badge.svg)](https://github.com/tido64/suggestion-bot/actions/workflows/build.yml)
[![npm version](https://img.shields.io/npm/v/suggestion-bot)](https://www.npmjs.com/package/suggestion-bot)`suggestion-bot` submits code reviews with suggestions based on your diffs.
![screenshot of code review with suggestions](docs/screenshot.png)
## 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 fromOptions:
-h, --help display this help message
-v, --version display version number
-m, --message use the specified message as the PR comment
-f, --fail fail if comments could not be postedExamples:
# Submit current changes as suggestions
GITHUB_TOKEN= suggestion-bot "$(git diff)"# Alternatively, pipe to suggestion-bot
# to avoid escape character issues
git diff | GITHUB_TOKEN= suggestion-bot
```If your CI is hosted by Azure DevOps, replace `GITHUB_TOKEN` with
`AZURE_PERSONAL_ACCESS_TOKEN`.## Requirements
- Host your code on [GitHub](https://github.com/)
- `GITHUB_TOKEN` permissions:
- `pull-requests: write` — required for creating code reviews
- `issues: write` — fallback in case creating a review fails-- or --
- Host your code on [Azure DevOps](https://dev.azure.com/)
- An Azure DevOps
[personal access token](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page)## Recipes
- [Using `suggestion-bot` with GitHub Actions](#using-suggestion-bot-with-github-actions)
- [Using `suggestion-bot` with `clang-format`](#using-suggestion-bot-with-clang-format)
- [Using `suggestion-bot` with Prettier](#using-suggestion-bot-with-prettier)### Using `suggestion-bot` with GitHub Actions
1. Install `suggestion-bot` in your project
```sh
yarn add suggestion-bot --dev
```2. Configure your GitHub workflow so `suggestion-bot` can access the
`GITHUB_TOKEN` secret provided by GitHub via an environment variable with the
same name:```yaml
# .github/workflows/build.yml
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: 18
- name: Checkout
uses: actions/checkout@v2
- name: Install
run: yarn
- name: ClangFormat
if: ${{ 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`](https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting)
to format only changed files:```sh
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](https://prettier.io/)'s
output to `diff` so we can feed it to `suggestion-bot` later.```js
#!/usr/bin/env nodeimport { 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:```sh
node scripts/prettier-diff.mjs $(git ls-files '*.js')
```