[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5097":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":39,"readmeContent":40,"aiSummary":41,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":42,"discoverSource":43},5097,"reviewdog","reviewdog\u002Freviewdog","🐶 Automated code review tool integrated with any code analysis tools regardless of programming language","https:\u002F\u002Fmedium.com\u002F@haya14busa\u002Freviewdog-a-code-review-dog-who-keeps-your-codebase-healthy-d957c471938b#.8xctbaw5u",null,"Go",9355,490,57,128,0,2,19,74,14,84.97,"MIT License",false,"master",true,[26,27,28,29,30,31,32,33,34,35,36,37,38],"bitbucket","ci","cli","code-quality","code-review","codereview","github","gitlab","go","lint","linter","static-analysis","static-code-analysis","2026-06-12 04:00:24","\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\">\n    \u003Cimg alt=\"reviewdog\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fhaya14busa\u002Fi\u002Fd598ed7dc49fefb0018e422e4c43e5ab8f207a6b\u002Freviewdog\u002Freviewdog.logo.png\">\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Ch2 align=\"center\">\n  reviewdog - A code review dog who keeps your codebase healthy.\n\u003C\u002Fh2>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\".\u002FLICENSE\">\n    \u003Cimg alt=\"LICENSE\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg?maxAge=43200\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgodoc.org\u002Fgithub.com\u002Freviewdog\u002Freviewdog\">\n    \u003Cimg alt=\"GoDoc\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgodoc-reference-4F73B3.svg?label=godoc.org&maxAge=43200&logo=go\">\n  \u003C\u002Fa>\n  \u003Ca href=\".\u002FCHANGELOG.md\">\n    \u003Cimg alt=\"releases\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Freviewdog\u002Freviewdog.svg?logo=github\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Fnightly\">\n    \u003Cimg alt=\"nightly releases\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Freviewdog\u002Fnightly.svg?logo=github\">\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Factions?query=workflow%3AGo+event%3Apush+branch%3Amaster\">\n    \u003Cimg alt=\"GitHub Actions\" src=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fworkflows\u002FGo\u002Fbadge.svg\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Factions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster\">\n    \u003Cimg alt=\"reviewdog\" src=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fworkflows\u002Freviewdog\u002Fbadge.svg?branch=master&event=push\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Factions?query=workflow%3Arelease\">\n    \u003Cimg alt=\"release\" src=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fworkflows\u002Frelease\u002Fbadge.svg\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcircleci.com\u002Fgh\u002Freviewdog\u002Freviewdog\">\u003Cimg alt=\"CircleCI Status\" src=\"http:\u002F\u002Fimg.shields.io\u002Fcircleci\u002Fbuild\u002Fgithub\u002Freviewdog\u002Freviewdog\u002Fmaster.svg?label=CircleCI&logo=circleci\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgithub\u002Freviewdog\u002Freviewdog\">\u003Cimg alt=\"Coverage Status\" src=\"https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgithub\u002Freviewdog\u002Freviewdog\u002Fmaster.svg?logo=codecov\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhaya14busa\u002Fgithub-used-by\u002Ftree\u002Fmain\u002Frepo\u002Freviewdog#reviewdog-\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fhaya14busa.github.io\u002Fgithub-used-by\u002Fdata\u002Freviewdog\u002Fshieldsio.json\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgitlab.com\u002Freviewdog\u002Freviewdog\u002Fpipelines\">\n    \u003Cimg alt=\"GitLab Supported\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitLab%20-Supported-fc6d26?logo=gitlab\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhaya14busa\u002Faction-bumpr\">\n    \u003Cimg alt=\"action-bumpr supported\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fbumpr-supported-ff69b4?logo=github&link=https:\u002F\u002Fgithub.com\u002Fhaya14busa\u002Faction-bumpr\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freviewdog\u002F.github\u002Fblob\u002Fmaster\u002FCODE_OF_CONDUCT.md\">\n    \u003Cimg alt=\"Contributor Covenant\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FContributor%20Covenant-v2.0%20adopted-ff69b4.svg\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fhaya14busa.github.io\u002Fgithub-release-stats\u002F#reviewdog\u002Freviewdog\">\n    \u003Cimg alt=\"GitHub Releases Stats\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002Freviewdog\u002Freviewdog\u002Ftotal.svg?logo=github\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fstarchart.cc\u002Freviewdog\u002Freviewdog\">\u003Cimg alt=\"Stars\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Freviewdog\u002Freviewdog.svg?style=social\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\u003Cbr \u002F>\n\nreviewdog provides a way to post review comments to code hosting services,\nsuch as GitHub, automatically by integrating with any linter tools with ease.\nIt uses an output of lint tools and posts them as a comment if findings are in\nthe diff of patches to review.\n\nreviewdog also supports running in the local environment to filter the output of lint tools\nby diff.\n\n[design doc](https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1mGOX19SSqRowWGbXieBfGPtLnM0BdTkIc9JelTiu6wA\u002Fedit?usp=sharing)\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Input Format](#input-format)\n  * ['errorformat'](#errorformat)\n  * [Available pre-defined 'errorformat'](#available-pre-defined-errorformat)\n  * [Reviewdog Diagnostic Format (RDFormat)](#reviewdog-diagnostic-format-rdformat)\n  * [Diff](#diff)\n  * [checkstyle format](#checkstyle-format)\n  * [SARIF format](#sarif-format)\n- [Code Suggestions](#code-suggestions)\n- [reviewdog config file](#reviewdog-config-file)\n- [Reporters](#reporters)\n  * [Reporter: Local (-reporter=local) [default]](#reporter-local--reporterlocal-default)\n  * [Reporter: GitHub PR Checks (-reporter=github-pr-check)](#reporter-github-pr-checks--reportergithub-pr-check)\n  * [Reporter: GitHub Checks (-reporter=github-check)](#reporter-github-checks--reportergithub-check)\n  * [Reporter: GitHub PullRequest review comment (-reporter=github-pr-review)](#reporter-github-pullrequest-review-comment--reportergithub-pr-review)\n  * [Reporter: GitHub Annotations (-reporter=github-annotations)](#reporter-github-annotations--reportergithub-annotations)\n  * [Reporter: GitHub PR Annotations (-reporter=github-pr-annotations)](#reporter-github-pr-annotations--reportergithub-pr-annotations)\n  * [Reporter: GitLab MergeRequest discussions (-reporter=gitlab-mr-discussion)](#reporter-gitlab-mergerequest-discussions--reportergitlab-mr-discussion)\n  * [Reporter: GitLab MergeRequest commit (-reporter=gitlab-mr-commit)](#reporter-gitlab-mergerequest-commit--reportergitlab-mr-commit)\n  * [Reporter: Bitbucket Code Insights Reports (-reporter=bitbucket-code-report)](#reporter-bitbucket-code-insights-reports--reporterbitbucket-code-report)\n- [Supported CI services](#supported-ci-services)\n  * [GitHub Actions](#github-actions)\n  * [Travis CI](#travis-ci)\n  * [Circle CI](#circle-ci)\n  * [GitLab CI](#gitlab-ci)\n  * [Bitbucket Pipelines](#bitbucket-pipelines)\n  * [Common (Jenkins, local, etc...)](#common-jenkins-local-etc)\n    + [Jenkins with GitHub pull request builder plugin](#jenkins-with-github-pull-request-builder-plugin)\n- [Exit codes](#exit-codes)\n- [Filter mode](#filter-mode)\n- [Articles](#articles)\n\n[![github-pr-check sample](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F40884858-6efd82a0-6756-11e8-9f1a-c6af4f920fb0.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F131\u002Fchecks)\n![comment in pull-request](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F40941822-1d775064-6887-11e8-98e9-4775d37d47f8.png)\n![commit status](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F40941738-d62acb0a-6886-11e8-858d-7b97aded2a42.png)\n[![sample-comment.png](https:\u002F\u002Fraw.githubusercontent.com\u002Fhaya14busa\u002Fi\u002Fdc0ccb1e110515ea407c146d99b749018db05c45\u002Freviewdog\u002Fsample-comment.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F24#discussion_r84599728)\n![reviewdog-local-demo.gif](https:\u002F\u002Fraw.githubusercontent.com\u002Fhaya14busa\u002Fi\u002Fdc0ccb1e110515ea407c146d99b749018db05c45\u002Freviewdog\u002Freviewdog-local-demo.gif)\n\n## Installation\n\n```shell\n# Install the latest version. (Install it into .\u002Fbin\u002F by default).\n$ curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh | sh -s\n\n# Specify installation directory ($(go env GOPATH)\u002Fbin\u002F) and version.\n$ curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh | sh -s -- -b $(go env GOPATH)\u002Fbin [vX.Y.Z]\n\n# In alpine linux (as it does not come with curl by default)\n$ wget -O - -q https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh | sh -s [vX.Y.Z]\n```\n\n### Nightly releases\n\nYou can also use [nightly reviewdog release](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Fnightly)\nto try the latest reviewdog improvements every day!\n\n```shell\n$ curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Fnightly\u002F30fccfe9f47f7e6fd8b3c38aa0da11a6c9f04de7\u002Finstall.sh | sh -s -- -b $(go env GOPATH)\u002Fbin\n```\n\n### GitHub Action: [reviewdog\u002Faction-setup](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-setup)\n\n```yaml\nsteps:\n- uses: reviewdog\u002Faction-setup@d8edfce3dd5e1ec6978745e801f9c50b5ef80252 # v1.4.0\n  with:\n    reviewdog_version: latest # Optional. [latest,nightly,v.X.Y.Z]\n```\n\n### homebrew \u002F linuxbrew\nYou can also install reviewdog using brew:\n\n```shell\n$ brew install reviewdog\u002Ftap\u002Freviewdog\n$ brew upgrade reviewdog\u002Ftap\u002Freviewdog\n```\n\n### [Scoop](https:\u002F\u002Fscoop.sh\u002F) on Windows\n\n```\n> scoop install reviewdog\n```\n\n### Build with go install\n\n```shell\n$ go install github.com\u002Freviewdog\u002Freviewdog\u002Fcmd\u002Freviewdog@latest\n```\n\n## Input Format\n\n### 'errorformat'\n\nreviewdog accepts any compiler or linter result from stdin and parses it with\nscan-f like [**'errorformat'**](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Ferrorformat),\nwhich is the port of Vim's [errorformat](https:\u002F\u002Fvim-jp.org\u002Fvimdoc-en\u002Fquickfix.html#error-file-format)\nfeature.\n\nFor example, if the result format is `{file}:{line number}:{column number}: {message}`,\nerrorformat should be `%f:%l:%c: %m` and you can pass it as `-efm` arguments.\n\n```shell\n$ golint .\u002F...\ncomment_iowriter.go:11:6: exported type CommentWriter should have comment or be unexported\n$ golint .\u002F... | reviewdog -efm=\"%f:%l:%c: %m\" -diff=\"git diff FETCH_HEAD\"\n```\n\n| name | description |\n| ---- | ----------- |\n| %f | file name |\n| %l | line number |\n| %c | column number |\n| %m | error message |\n| %% | the single '%' character |\n| ... | ... |\n\nPlease see [reviewdog\u002Ferrorformat](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Ferrorformat)\nand [:h errorformat](https:\u002F\u002Fvim-jp.org\u002Fvimdoc-en\u002Fquickfix.html#error-file-format)\nif you want to deal with a more complex output. 'errorformat' can handle more\ncomplex output like a multi-line error message.\n\nYou can also try errorformat on [the Playground](https:\u002F\u002Freviewdog.github.io\u002Ferrorformat-playground\u002F)!\n\nWith this 'errorformat' feature, reviewdog can support any tool output with ease.\n\n### Available pre-defined 'errorformat'\n\nBut, you don't have to write 'errorformat' in many cases. reviewdog supports\npre-defined errorformat for major tools.\n\nYou can find available errorformat name by `reviewdog -list` and you can use it\nwith `-f={name}`.\n\n```shell\n$ reviewdog -list\ngolint          linter for Go source code                                       - https:\u002F\u002Fgithub.com\u002Fgolang\u002Flint\ngovet           Vet examines Go source code and reports suspicious problems     - https:\u002F\u002Fgolang.org\u002Fcmd\u002Fvet\u002F\nsbt             the interactive build tool                                      - http:\u002F\u002Fwww.scala-sbt.org\u002F\n...\n```\n\n```shell\n$ golint .\u002F... | reviewdog -f=golint -diff=\"git diff FETCH_HEAD\"\n```\n\nYou can add supported pre-defined 'errorformat' by contributing to [reviewdog\u002Ferrorformat](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Ferrorformat)\n\n### Reviewdog Diagnostic Format (RDFormat)\n\nreviewdog supports [Reviewdog Diagnostic Format (RDFormat)](.\u002Fproto\u002Frdf\u002F) as a\ngeneric diagnostic format and it supports both [rdjson](.\u002Fproto\u002Frdf\u002F#rdjson) and\n[rdjsonl](.\u002Fproto\u002Frdf\u002F#rdjsonl) formats.\n\nThis rdformat supports rich features like multiline ranged comments, severity,\nrule code with URL, and [code suggestions](#code-suggestions).\n\n```shell\n$ \u003Clinter> | \u003Cconvert-to-rdjson> | reviewdog -f=rdjson -reporter=github-pr-review\n# or\n$ \u003Clinter> | \u003Cconvert-to-rdjsonl> | reviewdog -f=rdjsonl -reporter=github-pr-review\n```\n\n#### Example: ESLint with RDFormat \n\n![eslint reviewdog rdjson demo](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F97085944-87233a80-165b-11eb-94a8-0a47d5e24905.png)\n\nYou can use [eslint-formatter-rdjson](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Feslint-formatter-rdjson)\nto output `rdjson` as eslint output format.\n\n```shell\n$ npm install --save-dev eslint-formatter-rdjson\n$ eslint -f rdjson . | reviewdog -f=rdjson -reporter=github-pr-review\n```\n\nOr you can also use [reviewdog\u002Faction-eslint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-eslint) for GitHub Actions.\n\n### Diff\n\n![reviewdog with gofmt example](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F89168305-a3ad5a80-d5b7-11ea-8939-be7ac1976d30.png)\n\nreviewdog supports diff (unified format) as an input format especially useful\nfor [code suggestions](#code-suggestions).\nreviewdog can integrate with any code suggestions tools or formatters to report suggestions.\n\n`-f.diff.strip`: option for `-f=diff`: strip NUM leading components from diff file names (equivalent to 'patch -p') (default is 1 for git diff) (default 1)\n\n```shell\n$ \u003Cany-code-fixer\u002Fformatter> # e.g. eslint --fix, gofmt\n$ TMPFILE=$(mktemp)\n$ git diff >\"${TMPFILE}\"\n$ git stash -u && git stash drop\n$ reviewdog -f=diff -f.diff.strip=1 -reporter=github-pr-review \u003C \"${TMPFILE}\"\n```\n\nOr you can also use [reviewdog\u002Faction-suggester](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-suggester) for GitHub Actions.\n\nIf diagnostic tools support diff output format, you can pipe the diff directly.\n\n```shell\n$ gofmt -s -d . | reviewdog -name=\"gofmt\" -f=diff -f.diff.strip=0 -reporter=github-pr-review\n$ shellcheck -f diff $(shfmt -f .) | reviewdog -f=diff\n```\n\n### checkstyle format\n\nreviewdog also accepts [checkstyle XML format](http:\u002F\u002Fcheckstyle.sourceforge.net\u002F) as well.\nIf the linter supports checkstyle format as a report format, you can use\n-f=checkstyle instead of using 'errorformat'.\n\n```shell\n# Local\n$ eslint -f checkstyle . | reviewdog -f=checkstyle -diff=\"git diff\"\n\n# CI (overwrite tool name which is shown in review comment by -name arg)\n$ eslint -f checkstyle . | reviewdog -f=checkstyle -name=\"eslint\" -reporter=github-check\n```\n\nAlso, if you want to pass other Json\u002FXML\u002Fetc... format to reviewdog, you can write a converter.\n\n```shell\n$ \u003Clinter> | \u003Cconvert-to-checkstyle> | reviewdog -f=checkstyle -name=\"\u003Clinter>\" -reporter=github-pr-check\n```\n\n### SARIF format\n\nreviewdog supports [SARIF 2.1.0 JSON format](https:\u002F\u002Fsarifweb.azurewebsites.net\u002F).\nYou can use reviewdog with -f=sarif option.\n\n```shell\n# Local\n$ eslint -f @microsoft\u002Feslint-formatter-sarif . | reviewdog -f=sarif -diff=\"git diff\"\n````\n\n## Code Suggestions\n\n![eslint reviewdog suggestion demo](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F97085944-87233a80-165b-11eb-94a8-0a47d5e24905.png)\n![reviewdog with gofmt example](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F89168305-a3ad5a80-d5b7-11ea-8939-be7ac1976d30.png)\n\nreviewdog supports *code suggestions* feature with [rdformat](#reviewdog-diagnostic-format-rdformat) or [diff](#diff) input.\nYou can also use [reviewdog\u002Faction-suggester](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-suggester) for GitHub Actions.\n\nreviewdog can suggest code changes along with diagnostic results if a diagnostic tool supports code suggestions data.\nYou can integrate reviewdog with any code fixing tools and any code formatter with [diff](#diff) input as well.\n\n### Code Suggestions Support Table\nNote that not all reporters provide support for code suggestions.\n\n| `-reporter`     | Suggestion support |\n| ---------------------------- | ------- |\n| **`local`**                  | NO [1]  |\n| **`github-check`**           | NO [2]  |\n| **`github-pr-check`**        | NO [2]  |\n| **`github-annotations`**     | NO [2]  |\n| **`github-pr-annotations`**  | NO [2]  |\n| **`github-pr-review`**       | OK      |\n| **`gitlab-mr-discussion`**   | OK      |\n| **`gitlab-mr-commit`**       | NO [2]  |\n| **`gerrit-change-review`**   | NO [1]  |\n| **`bitbucket-code-report`**  | NO [2]  |\n| **`gitea-pr-review`**        | NO [2]  |\n\n- [1] The reporter service supports the code suggestion feature, but reviewdog does not support it yet. See [#678](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fissues\u002F678) for the status.\n- [2] The reporter service itself doesn't support the code suggestion feature.\n\n## reviewdog config file\n\nreviewdog can also be controlled via the .reviewdog.yml configuration file instead of \"-f\" or \"-efm\" arguments.\n\nWith .reviewdog.yml, you can run the same commands for both CI service and local\nenvironment including editor integration with ease.\n\n#### .reviewdog.yml\n\n```yaml\nrunner:\n  \u003Ctool-name>:\n    cmd: \u003Ccommand> # (required)\n    errorformat: # (optional if you use `format`)\n      - \u003Clist of errorformat>\n    format: \u003Cformat-name> # (optional if you use `errorformat`. e.g. golint,rdjson,rdjsonl)\n    name: \u003Ctool-name> # (optional. you can overwrite \u003Ctool-name> defined by runner key)\n    level: \u003Clevel> # (optional. same as -level flag. [info,warning,error])\n\n  # examples\n  golint:\n    cmd: golint .\u002F...\n    errorformat:\n      - \"%f:%l:%c: %m\"\n    level: warning\n  govet:\n    cmd: go vet -all .\n    format: govet\n  your-awesome-linter:\n    cmd: awesome-linter run\n    format: rdjson\n    name: AwesomeLinter\n```\n\n```shell\n$ reviewdog -diff=\"git diff FETCH_HEAD\"\nproject\u002Frun_test.go:61:28: [golint] error strings should not end with punctuation\nproject\u002Frun.go:57:18: [errcheck]        defer os.Setenv(name, os.Getenv(name))\nproject\u002Frun.go:58:12: [errcheck]        os.Setenv(name, \"\")\n# You can use -runners to run only specified runners.\n$ reviewdog -diff=\"git diff FETCH_HEAD\" -runners=golint,govet\nproject\u002Frun_test.go:61:28: [golint] error strings should not end with punctuation\n# You can use -conf to specify config file path.\n$ reviewdog -conf=.\u002F.reviewdog.yml -reporter=github-pr-check\n```\n\nOutput format for project config based run is one of the following formats.\n\n- `\u003Cfile>: [\u003Ctool name>] \u003Cmessage>`\n- `\u003Cfile>:\u003Clnum>: [\u003Ctool name>] \u003Cmessage>`\n- `\u003Cfile>:\u003Clnum>:\u003Ccol>: [\u003Ctool name>] \u003Cmessage>`\n\n## Reporters\n\nreviewdog can report results both in the local environment and review services as\ncontinuous integration.\n\n### Reporter: Local (-reporter=local) [default]\n\nreviewdog can find newly introduced findings by filtering linter results\nusing diff. You can pass the diff command as `-diff` arg.\n\n```shell\n$ golint .\u002F... | reviewdog -f=golint -diff=\"git diff FETCH_HEAD\"\n```\n\n### Reporter: GitHub PR Checks (-reporter=github-pr-check)\n\n[![github-pr-check sample annotation with option 1](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F64875597-65016f80-d688-11e9-843f-4679fb666f0d.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F275\u002Ffiles#annotation_6177941961779419)\n[![github-pr-check sample](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F40884858-6efd82a0-6756-11e8-9f1a-c6af4f920fb0.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F131\u002Fchecks)\n\ngithub-pr-check reporter reports results to [GitHub Checks](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpull-requests\u002Fcollaborating-with-pull-requests\u002Fcollaborating-on-repositories-with-code-quality-features\u002Fabout-status-checks).\n\nYou can change the report level for this reporter by `level` field in [config\nfile](#reviewdog-config-file) or `-level` flag. You can control GitHub status\ncheck results with this feature. (default: error)\n\n| Level     | GitHub Status |\n| --------- | ------------- |\n| `info`    | neutral       |\n| `warning` | neutral       |\n| `error`   | failure       |\n\nThere are two options to use this reporter.\n\n#### Option 1) Run reviewdog from GitHub Actions w\u002F secrets.GITHUB_TOKEN\n\nExample: [.github\u002Fworkflows\u002Freviewdog.yml](.github\u002Fworkflows\u002Freviewdog.yml)\n\n```yaml\n- name: Run reviewdog\n  env:\n    REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n  run: |\n    golint .\u002F... | reviewdog -f=golint -reporter=github-pr-check\n```\n\nSee [GitHub Actions](#github-actions) section too. You can also use public\nreviewdog GitHub Actions.\n\n#### Option 2) Install reviewdog GitHub Apps\nreviewdog CLI sends a request to reviewdog GitHub App server and the server post\nresults as GitHub Checks, because Check API is only supported for GitHub App and\nGitHub Actions.\n\n1. Install reviewdog Apps. https:\u002F\u002Fgithub.com\u002Fapps\u002Freviewdog\n2. Set `REVIEWDOG_TOKEN` or run reviewdog CLI in trusted CI providers.\n  - Get token from `https:\u002F\u002Freviewdog.app\u002Fgh\u002F{owner}\u002F{repo-name}`.\n\n```shell\n$ export REVIEWDOG_TOKEN=\"\u003Ctoken>\"\n$ reviewdog -reporter=github-pr-check\n```\n\nNote: Token is not required if you run reviewdog in Travis or AppVeyor.\n\n*Caution*\n\nAs described above, github-pr-check reporter with Option 2 depends on\nreviewdog GitHub App server.\nThe server is running with haya14busa's pocket money for now and I may break\nthings, so I cannot ensure that the server is running 24h and 365 days.\n\n**UPDATE:** Started getting support by [opencollective](https:\u002F\u002Fopencollective.com\u002Freviewdog)\nand GitHub sponsor.\nSee [Supporting reviewdog](#supporting-reviewdog)\n\nYou can use github-pr-review reporter or use run reviewdog under GitHub Actions\nif you don't want to depend on reviewdog server.\n\n### Reporter: GitHub Checks (-reporter=github-check)\n\nIt's basically the same as `-reporter=github-pr-check` except it works not only for\nPull Request but also for commit.\n\n[![sample comment outside diff](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F69917921-e0680580-14ae-11ea-9a56-de9e3cbac005.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F364\u002Ffiles)\n\nYou can create [reviewdog badge](#reviewdog-badge-) for this reporter.\n\n### Reporter: GitHub PullRequest review comment (-reporter=github-pr-review)\n\n[![sample-comment.png](https:\u002F\u002Fraw.githubusercontent.com\u002Fhaya14busa\u002Fi\u002Fdc0ccb1e110515ea407c146d99b749018db05c45\u002Freviewdog\u002Fsample-comment.png)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fpull\u002F24#discussion_r84599728)\n\ngithub-pr-review reporter reports results to GitHub PullRequest review comments\nusing GitHub Personal API Access Token.\n[GitHub Enterprise](https:\u002F\u002Fgithub.com\u002Fenterprise) is supported too.\n\n- Go to https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens and generate a new API token.\n- Check `repo` for private repositories or `public_repo` for public repositories.\n\n```shell\n$ export REVIEWDOG_GITHUB_API_TOKEN=\"\u003Ctoken>\"\n$ reviewdog -reporter=github-pr-review\n```\n\nFor GitHub Enterprise, set the API endpoint by an environment variable.\n\n```shell\n$ export GITHUB_API=\"https:\u002F\u002Fexample.githubenterprise.com\u002Fapi\u002Fv3\u002F\"\n$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need to skip verifying SSL\n```\n\nSee [GitHub Actions](#github-actions) section too if you can use GitHub\nActions. You can also use public reviewdog GitHub Actions.\n\n### Reporter: GitHub Annotations (-reporter=github-annotations)\n\n`github-annotations` uses the GitHub Actions annotation format to output errors\nand warnings to `stdout` e.g.\n\n```\n::error line=11,col=41,file=app\u002Findex.md::[vale] reported by reviewdog 🐶%0A[demo.Spelling] Did you really mean 'boobarbaz'?%0A%0ARaw Output:%0A{\"message\": \"[demo.Spelling] Did you really mean 'boobarbaz'?\", \"location\": {\"path\": \"app\u002Findex.md\", \"range\": {\"start\": {\"line\": 11, \"column\": 41}}}, \"severity\": \"ERROR\"}\n```\n\nThis reporter requires a valid GitHub API token to generate a diff, but will not\nuse the token to report errors.\n\n### Reporter: GitHub PR Annotations (-reporter=github-pr-annotations)\n\nSame as `github-annotations` but only works for Pull Requests.\n\n### Reporter: GitLab MergeRequest discussions (-reporter=gitlab-mr-discussion)\n\n[![gitlab-mr-discussion sample](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F41810718-f91bc540-773d-11e8-8598-fbc09ce9b1c7.png)](https:\u002F\u002Fgitlab.com\u002Freviewdog\u002Freviewdog\u002F-\u002Fmerge_requests\u002F113#note_83411103)\n\nRequired GitLab version: >= v10.8.0\n\ngitlab-mr-discussion reporter reports results to GitLab MergeRequest discussions using\nGitLab Personal API Access token.\nGet the token with `api` scope from https:\u002F\u002Fgitlab.com\u002Fprofile\u002Fpersonal_access_tokens.\n\n```shell\n$ export REVIEWDOG_GITLAB_API_TOKEN=\"\u003Ctoken>\"\n$ reviewdog -reporter=gitlab-mr-discussion\n```\n\nThe `CI_API_V4_URL` environment variable, defined automatically by Gitlab CI (v11.7 onwards), will be used to find out the Gitlab API URL.\n\nAlternatively, `GITLAB_API` can also be defined, in which case it will take precedence over `CI_API_V4_URL`.\n\n```shell\n$ export GITLAB_API=\"https:\u002F\u002Fexample.gitlab.com\u002Fapi\u002Fv4\"\n$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need to skip verifying SSL\n```\n\n### Reporter: GitLab MergeRequest commit (-reporter=gitlab-mr-commit)\n\ngitlab-mr-commit is similar to [gitlab-mr-discussion](#reporter-gitlab-mergerequest-discussions--reportergitlab-mr-discussion) reporter but reports results to each commit in GitLab MergeRequest.\n\ngitlab-mr-discussion is recommended, but you can use gitlab-mr-commit reporter\nif your GitLab version is under v10.8.0.\n\n```shell\n$ export REVIEWDOG_GITLAB_API_TOKEN=\"\u003Ctoken>\"\n$ reviewdog -reporter=gitlab-mr-commit\n```\n\n### Reporter: Gerrit Change review (-reporter=gerrit-change-review)\n\ngerrit-change-review reporter reports results to Gerrit Change using Gerrit Rest APIs.\n\nThe reporter supports Basic Authentication and Git-cookie based authentication for reporting results.\n\nSet `GERRIT_USERNAME` and `GERRIT_PASSWORD` environment variables for basic authentication, and put `GIT_GITCOOKIE_PATH` for git cookie-based authentication.\n\n```shell\n$ export GERRIT_CHANGE_ID=changeID\n$ export GERRIT_REVISION_ID=revisionID\n$ export GERRIT_BRANCH=master\n$ export GERRIT_ADDRESS=http:\u002F\u002F\u003Cgerrit-host>:\u003Cgerrit-port>\n$ reviewdog -reporter=gerrit-change-review\n```\n\n### Reporter: Bitbucket Code Insights Reports (-reporter=bitbucket-code-report)\n\n[![bitbucket-code-report](https:\u002F\u002Fuser-images.githubusercontent.com\u002F9948629\u002F96770123-c138d600-13e8-11eb-8e46-250b4bb393bd.png)](https:\u002F\u002Fbitbucket.org\u002FTrane9991\u002Freviewdog-example\u002Fpull-requests\u002F1)\n[![bitbucket-code-annotations](https:\u002F\u002Fuser-images.githubusercontent.com\u002F9948629\u002F97054896-5e813f00-158e-11eb-9ad7-f8d75489b8ba.png)](https:\u002F\u002Fbitbucket.org\u002FTrane9991\u002Freviewdog-example\u002Fpull-requests\u002F1)\n\nbitbucket-code-report generates the annotated\n[Bitbucket Code Insights](https:\u002F\u002Fsupport.atlassian.com\u002Fbitbucket-cloud\u002Fdocs\u002Fcode-insights\u002F) report.\n\nFor now, only the `no-filter` mode is supported, so the whole project is scanned on every run.\nReports are stored per commit and can be viewed per commit from Bitbucket Pipelines UI or\nin Pull Request. In the Pull Request UI affected code lines will be annotated in the diff,\nas well as you will be able to filter the annotations by **This pull request** or **All**.\n\nIf running from [Bitbucket Pipelines](#bitbucket-pipelines), no additional configuration is needed (even credentials).\nIf running locally or from some other CI system you would need to provide Bitbucket API credentials:\n\n- For Basic Auth you need to set the following env variables:\n    `BITBUCKET_USER` and `BITBUCKET_PASSWORD`\n- For AccessToken Auth you need to set `BITBUCKET_ACCESS_TOKEN`\n\n```shell\n$ export BITBUCKET_USER=\"my_user\"\n$ export BITBUCKET_PASSWORD=\"my_password\"\n$ reviewdog -reporter=bitbucket-code-report\n```\n\nTo post a report to the Bitbucket Server use `BITBUCKET_SERVER_URL` variable:\n```shell\n$ export BITBUCKET_USER=\"my_user\"\n$ export BITBUCKET_PASSWORD=\"my_password\"\n$ export BITBUCKET_SERVER_URL=\"https:\u002F\u002Fbitbucket.my-company.com\"\n$ reviewdog -reporter=bitbucket-code-report\n```\n\n## Supported CI services\n\n### [GitHub Actions](https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions)\n\nExample: [.github\u002Fworkflows\u002Freviewdog.yml](.github\u002Fworkflows\u002Freviewdog.yml)\n\n```yaml\nname: reviewdog\non: [pull_request]\njobs:\n  reviewdog:\n    name: reviewdog\n    runs-on: ubuntu-latest\n    steps:\n      # ...\n      - uses: reviewdog\u002Faction-setup@d8edfce3dd5e1ec6978745e801f9c50b5ef80252 # v1.4.0\n        with:\n          reviewdog_version: latest # Optional. [latest,nightly,v.X.Y.Z]\n      - name: Run reviewdog\n        env:\n          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          reviewdog -reporter=github-pr-check -runners=golint,govet\n          # or\n          reviewdog -reporter=github-pr-review -runners=golint,govet\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Example (github-check reporter):\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n[.github\u002Fworkflows\u002Freviewdog](.github\u002Fworkflows\u002Freviewdog.yml)\n\nOnly `github-check` reporter can run on the push event too.\n\n```yaml\nname: reviewdog (github-check)\non:\n  push:\n    branches:\n      - master\n  pull_request:\n\njobs:\n  reviewdog:\n    name: reviewdog\n    runs-on: ubuntu-latest\n    steps:\n      # ...\n      - name: Run reviewdog\n        env:\n          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          reviewdog -reporter=github-check -runners=golint,govet\n```\n\n\u003C\u002Fdetails>\n\n#### Public Reviewdog GitHub Actions\nYou can use public GitHub Actions to start using reviewdog with ease! :tada: :arrow_forward: :tada:\n\n- Common\n  - [reviewdog\u002Faction-misspell](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-misspell) - Run [misspell](https:\u002F\u002Fgithub.com\u002Fclient9\u002Fmisspell).\n  - [EPMatt\u002Freviewdog-action-prettier](https:\u002F\u002Fgithub.com\u002FEPMatt\u002Freviewdog-action-prettier) - Run [Prettier](https:\u002F\u002Fprettier.io\u002F).\n- Text\n  - [reviewdog\u002Faction-alex](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-alex) - Run [alex](https:\u002F\u002Fgithub.com\u002Fget-alex\u002Falex) which catches insensitive, inconsiderate writing. (e.g. master\u002Fslave)\n  - [reviewdog\u002Faction-languagetool](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-languagetool) - Run [languagetool](https:\u002F\u002Fgithub.com\u002Flanguagetool-org\u002Flanguagetool).\n  - [tsuyoshicho\u002Faction-textlint](https:\u002F\u002Fgithub.com\u002Ftsuyoshicho\u002Faction-textlint) - Run [textlint](https:\u002F\u002Fgithub.com\u002Ftextlint\u002Ftextlint)\n  - [tsuyoshicho\u002Faction-redpen](https:\u002F\u002Fgithub.com\u002Ftsuyoshicho\u002Faction-redpen) - Run [redpen](https:\u002F\u002Fgithub.com\u002Fredpen-cc\u002Fredpen)\n- Markdown\n  - [reviewdog\u002Faction-markdownlint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-markdownlint) - Run [markdownlint](https:\u002F\u002Fgithub.com\u002FDavidAnson\u002Fmarkdownlint)\n- Docker\n  - [reviewdog\u002Faction-hadolint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-hadolint) - Run [hadolint](https:\u002F\u002Fgithub.com\u002Fhadolint\u002Fhadolint) to lint `Dockerfile`.\n- Env\n  - [dotenv-linter\u002Faction-dotenv-linter](https:\u002F\u002Fgithub.com\u002Fdotenv-linter\u002Faction-dotenv-linter) - Run [dotenv-linter](https:\u002F\u002Fgithub.com\u002Fdotenv-linter\u002Fdotenv-linter) to lint `.env` files.\n- Shell script\n  - [reviewdog\u002Faction-shellcheck](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-shellcheck) - Run [shellcheck](https:\u002F\u002Fgithub.com\u002Fkoalaman\u002Fshellcheck).\n  - [reviewdog\u002Faction-shfmt](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-shfmt) - Run [shfmt](https:\u002F\u002Fgithub.com\u002Fmvdan\u002Fsh).\n- Go\n  - [reviewdog\u002Faction-staticcheck](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-staticcheck) - Run [staticcheck](https:\u002F\u002Fstaticcheck.io\u002F).\n  - [reviewdog\u002Faction-golangci-lint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-golangci-lint) - Run [golangci-lint](https:\u002F\u002Fgithub.com\u002Fgolangci\u002Fgolangci-lint) and supported linters individually by golangci-lint.\n- JavaScript\n  - [reviewdog\u002Faction-eslint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-eslint) - Run [eslint](https:\u002F\u002Fgithub.com\u002Feslint\u002Feslint).\n  - [mongolyy\u002Freviewdog-action-biome](https:\u002F\u002Fgithub.com\u002Fmongolyy\u002Freviewdog-action-biome) - Run [Biome](https:\u002F\u002Fbiomejs.dev\u002F).\n- TypeScript\n  - [EPMatt\u002Freviewdog-action-tsc](https:\u002F\u002Fgithub.com\u002FEPMatt\u002Freviewdog-action-tsc) - Run [tsc](https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002Fcompiler-options.html).\n- CSS\n  - [reviewdog\u002Faction-stylelint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-stylelint) - Run [stylelint](https:\u002F\u002Fgithub.com\u002Fstylelint\u002Fstylelint).\n- Vim script\n  - [reviewdog\u002Faction-vint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-vint) - Run [vint](https:\u002F\u002Fgithub.com\u002FVimjas\u002Fvint).\n  - [tsuyoshicho\u002Faction-vimlint](https:\u002F\u002Fgithub.com\u002Ftsuyoshicho\u002Faction-vimlint) - Run [vim-vimlint](https:\u002F\u002Fgithub.com\u002Fsyngan\u002Fvim-vimlint)\n- Terraform\n  - [reviewdog\u002Faction-tflint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-tflint) - Run [tflint](https:\u002F\u002Fgithub.com\u002Fterraform-linters\u002Ftflint).\n  - [reviewdog\u002Faction-terraform-validate](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-terraform-validate) - Run [terraform validate](https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform\u002Fcli\u002Fcommands\u002Fvalidate).\n- YAML\n  - [reviewdog\u002Faction-yamllint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-yamllint) - Run [yamllint](https:\u002F\u002Fgithub.com\u002Fadrienverge\u002Fyamllint).\n- Ruby\n  - [reviewdog\u002Faction-brakeman](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-brakeman) - Run [brakeman](https:\u002F\u002Fgithub.com\u002Fpresidentbeef\u002Fbrakeman).\n  - [reviewdog\u002Faction-reek](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-reek) - Run [reek](https:\u002F\u002Fgithub.com\u002Ftroessner\u002Freek).\n  - [reviewdog\u002Faction-rubocop](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-rubocop) - Run [rubocop](https:\u002F\u002Fgithub.com\u002Frubocop\u002Frubocop).\n  - [vk26\u002Faction-fasterer](https:\u002F\u002Fgithub.com\u002Fvk26\u002Faction-fasterer) - Run [fasterer](https:\u002F\u002Fgithub.com\u002FDamirSvrtan\u002Ffasterer).\n  - [PrintReleaf\u002Faction-standardrb](https:\u002F\u002Fgithub.com\u002FPrintReleaf\u002Faction-standardrb) - Run [standardrb](https:\u002F\u002Fgithub.com\u002Fstandardrb\u002Fstandard).\n  - [tk0miya\u002Faction-erblint](https:\u002F\u002Fgithub.com\u002Ftk0miya\u002Faction-erblint) - Run [erb-lint](https:\u002F\u002Fgithub.com\u002FShopify\u002Ferb-lint)\n  - [tk0miya\u002Faction-steep](https:\u002F\u002Fgithub.com\u002Ftk0miya\u002Faction-steep) - Run [steep](https:\u002F\u002Fgithub.com\u002Fsoutaro\u002Fsteep)\n  - [blooper05\u002Faction-rails_best_practices](https:\u002F\u002Fgithub.com\u002Fblooper05\u002Faction-rails_best_practices) - Run [rails_best_practices](https:\u002F\u002Fgithub.com\u002Fflyerhzm\u002Frails_best_practices)\n  - [tomferreira\u002Faction-bundler-audit](https:\u002F\u002Fgithub.com\u002Ftomferreira\u002Faction-bundler-audit) - Run [bundler-audit](https:\u002F\u002Fgithub.com\u002Frubysec\u002Fbundler-audit)\n- Python\n  - [wemake-python-styleguide](https:\u002F\u002Fgithub.com\u002Fwemake-services\u002Fwemake-python-styleguide) - Run wemake-python-styleguide\n  - [tsuyoshicho\u002Faction-mypy](https:\u002F\u002Fgithub.com\u002Ftsuyoshicho\u002Faction-mypy) - Run [mypy](https:\u002F\u002Fpypi.org\u002Fproject\u002Fmypy\u002F)\n  - [jordemort\u002Faction-pyright](https:\u002F\u002Fgithub.com\u002Fjordemort\u002Faction-pyright) - Run [pyright](https:\u002F\u002Fgithub.com\u002FMicrosoft\u002Fpyright)\n  - [dciborow\u002Faction-pylint](https:\u002F\u002Fgithub.com\u002Fdciborow\u002Faction-pylint) - Run [pylint](https:\u002F\u002Fgithub.com\u002Fpylint-dev\u002Fpylint)\n  - [reviewdog\u002Faction-black](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-black) - Run [black](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack)\n  - [brunohaf\u002Faction-bandit](https:\u002F\u002Fgithub.com\u002Fbrunohaf\u002Faction-bandit) - Run [bandit](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fbandit)\n- Kotlin\n  - [ScaCap\u002Faction-ktlint](https:\u002F\u002Fgithub.com\u002FScaCap\u002Faction-ktlint) - Run [ktlint](https:\u002F\u002Fktlint.github.io\u002F).\n- Android Lint\n  - [dvdandroid\u002Faction-android-lint](https:\u002F\u002Fgithub.com\u002FDVDAndroid\u002Faction-android-lint) - Run [Android Lint](https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fwrite\u002Flint)\n- Ansible\n  - [reviewdog\u002Faction-ansiblelint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-ansiblelint) - Run [ansible-lint](https:\u002F\u002Fgithub.com\u002Fansible\u002Fansible-lint)\n- GitHub Actions\n  - [reviewdog\u002Faction-actionlint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-actionlint) - Run [actionlint](https:\u002F\u002Fgithub.com\u002Frhysd\u002Factionlint)\n- Protocol Buffers\n  - [yoheimuta\u002Faction-protolint](https:\u002F\u002Fgithub.com\u002Fyoheimuta\u002Faction-protolint) - Run [protolint](https:\u002F\u002Fgithub.com\u002Fyoheimuta\u002Fprotolint)\n- Rego\n  - [reviewdog\u002Faction-regal](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-regal) - Run [Regal](https:\u002F\u002Fgithub.com\u002FStyraInc\u002Fregal)\n\n... and more on [GitHub Marketplace](https:\u002F\u002Fgithub.com\u002Fmarketplace?utf8=✓&type=actions&query=reviewdog).\n\nMissing actions? Check out [reviewdog\u002Faction-template](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Faction-template) and create a new reviewdog action!\n\nPlease open a Pull Request to add your created reviewdog actions here :sparkles:.\nI can also put your repositories under reviewdog org and co-maintain the actions.\nExample: [action-tflint](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fissues\u002F322).\n\n#### Graceful Degradation for Pull Requests from forked repositories\n\n![Graceful Degradation example](https:\u002F\u002Fuser-images.githubusercontent.com\u002F3797062\u002F71781334-e2266b00-3010-11ea-8a38-dee6e30c8162.png)\n\n`GITHUB_TOKEN` for Pull Requests from a forked repository doesn't have write\naccess to Check API nor Review API due to [GitHub Actions\nrestriction](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-guides\u002Fautomatic-token-authentication#permissions-for-the-github_token).\n\nInstead, reviewdog uses [Logging commands of GitHub\nActions](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fusing-workflows\u002Fworkflow-commands-for-github-actions#set-an-error-message-error)\nto post results as\n[annotations](https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fchecks\u002Fruns#annotations-object)\nsimilar to `github-pr-check` reporter.\n\nNote that there is a limitation for annotations created by logging commands,\nsuch as [max # of annotations per run](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fissues\u002F411#issuecomment-570893427).\nYou can check GitHub Actions log to see full results in such cases.\n\n#### reviewdog badge [![reviewdog](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fworkflows\u002Freviewdog\u002Fbadge.svg?branch=master&event=push)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Factions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster)\n\nAs [`github-check` reporter](#reporter-github-checks--reportergithub-pr-check) support running on commit, we can create reviewdog\n[GitHub Action badge](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fusing-workflows#adding-a-workflow-status-badge-to-your-repository)\nto check the result against master commit for example. :tada:\n\nExample:\n```\n\u003C!-- Replace \u003COWNER> and \u003CREPOSITORY>. It assumes workflow name is \"reviewdog\" -->\n[![reviewdog](https:\u002F\u002Fgithub.com\u002F\u003COWNER>\u002F\u003CREPOSITORY>\u002Fworkflows\u002Freviewdog\u002Fbadge.svg?branch=master&event=push)](https:\u002F\u002Fgithub.com\u002F\u003COWNER>\u002F\u003CREPOSITORY>\u002Factions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster)\n```\n\n### Travis CI\n\n#### Travis CI (-reporter=github-pr-check)\n\nIf you use -reporter=github-pr-check in Travis CI, you don't need to set `REVIEWDOG_TOKEN`.\n\nExample:\n\n```yaml\ninstall:\n  - mkdir -p ~\u002Fbin\u002F && export PATH=\"~\u002Fbin\u002F:$PATH\"\n  - curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh| sh -s -- -b ~\u002Fbin\n\nscript:\n  - reviewdog -conf=.reviewdog.yml -reporter=github-pr-check\n```\n\n#### Travis CI (-reporter=github-pr-review)\n\nStore GitHub API token by [travis encryption keys](https:\u002F\u002Fdocs.travis-ci.com\u002Fuser\u002Fencryption-keys\u002F).\n\n```shell\n$ gem install travis\n$ travis encrypt REVIEWDOG_GITHUB_API_TOKEN=\u003Ctoken> --add env.global\n```\nExample:\n\n```yaml\nenv:\n  global:\n    - secure: \u003Ctoken>\n\ninstall:\n  - mkdir -p ~\u002Fbin\u002F && export PATH=\"~\u002Fbin\u002F:$PATH\"\n  - curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh| sh -s -- -b ~\u002Fbin\n\nscript:\n  - >-\n    golint .\u002F... | reviewdog -f=golint -reporter=github-pr-review\n```\n\nExamples\n- https:\u002F\u002Fgithub.com\u002Fazu\u002Ftextlint-reviewdog-example\n\n### Circle CI\n\nStore `REVIEWDOG_GITHUB_API_TOKEN` (or `REVIEWDOG_TOKEN` for github-pr-check) in\n[Environment variables - CircleCI](https:\u002F\u002Fcircleci.com\u002Fdocs\u002Fenvironment-variables\u002F#setting-environment-variables-for-all-commands-without-adding-them-to-git)\n\n#### .circleci\u002Fconfig.yml sample\n\n```yaml\nversion: 2\njobs:\n  build:\n    docker:\n      - image: golang:latest\n    steps:\n      - checkout\n      - run: curl -sfL https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh| sh -s -- -b .\u002Fbin\n      - run: go vet .\u002F... 2>&1 | .\u002Fbin\u002Freviewdog -f=govet -reporter=github-pr-review\n\n      # Deprecated: prefer GitHub Actions to use github-pr-check reporter.\n      - run: go vet .\u002F... 2>&1 | .\u002Fbin\u002Freviewdog -f=govet -reporter=github-pr-check\n```\n\n### GitLab CI\n\nStore `REVIEWDOG_GITLAB_API_TOKEN` in [GitLab CI variable](https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fci\u002Fvariables\u002F#variables).\n\n#### .gitlab-ci.yml sample\n\n```yaml\nreviewdog:\n  script:\n    - reviewdog -reporter=gitlab-mr-discussion\n    # Or\n    - reviewdog -reporter=gitlab-mr-commit\n```\n\n### Bitbucket Pipelines\n\nNo additional configuration is needed.\n\n#### bitbucket-pipelines.yml sample\n\n```yaml\npipelines:\n  default:\n    - step:\n        name: Reviewdog\n        image: golangci\u002Fgolangci-lint:v1.31-alpine\n        script:\n          - wget -O - -q https:\u002F\u002Fraw.githubusercontent.com\u002Freviewdog\u002Freviewdog\u002Ffd59714416d6d9a1c0692d872e38e7f8448df4fc\u002Finstall.sh | \n              sh -s -- -b $(go env GOPATH)\u002Fbin\n          - golangci-lint run --out-format=line-number .\u002F... | reviewdog -f=golangci-lint -reporter=bitbucket-code-report\n```\n\n### Common (Jenkins, local, etc...)\n\nYou can use reviewdog to post review comments from anywhere with following\nenvironment variables.\n\n| name | description |\n| ---- | ----------- |\n| `CI_PULL_REQUEST` | Pull Request number (e.g. 14) |\n| `CI_COMMIT`       | SHA1 for the current build |\n| `CI_REPO_OWNER`   | repository owner (e.g. \"reviewdog\" for https:\u002F\u002Fgithub.com\u002Freviewdog\u002Ferrorformat) |\n| `CI_REPO_NAME`    | repository name (e.g. \"errorformat\" for https:\u002F\u002Fgithub.com\u002Freviewdog\u002Ferrorformat) |\n| `CI_BRANCH`       | [optional] branch of the commit |\n\n```shell\n$ export CI_PULL_REQUEST=14\n$ export CI_REPO_OWNER=haya14busa\n$ export CI_REPO_NAME=reviewdog\n$ export CI_COMMIT=$(git rev-parse HEAD)\n```\nand set a token if required.\n\n```shell\n$ REVIEWDOG_TOKEN=\"\u003Ctoken>\"\n$ REVIEWDOG_GITHUB_API_TOKEN=\"\u003Ctoken>\"\n$ REVIEWDOG_GITLAB_API_TOKEN=\"\u003Ctoken>\"\n```\n\nIf a CI service doesn't provide information such as Pull Request ID - reviewdog can guess it by a branch name and commit SHA.\nJust pass the flag `guess`:\n\n```shell\n$ reviewdog -conf=.reviewdog.yml -reporter=github-pr-check -guess\n```\n\n#### Jenkins with GitHub pull request builder plugin\n- [GitHub pull request builder plugin - Jenkins - Jenkins Wiki](https:\u002F\u002Fwiki.jenkins-ci.org\u002Fdisplay\u002FJENKINS\u002FGitHub+pull+request+builder+plugin)\n- [Configuring a GitHub app account - Jenkins - CloudBees](https:\u002F\u002Fdocs.cloudbees.com\u002Fdocs\u002Fcloudbees-ci\u002Flatest\u002Fcloud-admin-guide\u002Fgithub-app-auth) - required to use github-pr-check formatter without reviewdog server or GitHub actions.\n\n```shell\n$ export CI_PULL_REQUEST=${ghprbPullId}\n$ export CI_REPO_OWNER=haya14busa\n$ export CI_REPO_NAME=reviewdog\n$ export CI_COMMIT=${ghprbActualCommit}\n$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need\n\n# To submit via reviewdog server using github-pr-check reporter\n$ REVIEWDOG_TOKEN=\"\u003Ctoken>\" reviewdog -reporter=github-pr-check\n# Or, to submit directly via API using github-pr-review reporter\n$ REVIEWDOG_GITHUB_API_TOKEN=\"\u003Ctoken>\" reviewdog -reporter=github-pr-review\n# Or, to submit directly via API using github-pr-check reporter (requires GitHub App Account configured)\n$ REVIEWDOG_SKIP_DOGHOUSE=true REVIEWDOG_GITHUB_API_TOKEN=\"\u003Ctoken>\" reviewdog -reporter=github-pr-check\n```\n\n## Exit codes\nBy default (`-fail-level=none`) reviewdog will return `0` as exit code even if it finds errors.\nreviewdog will exit with code 1 with `-fail-level=[any,info,warning,error]` flag if it finds at least 1 issue with severity greater than or equal to the given level.\nThis can be helpful when you are using it as a step in your CI pipeline and want to mark the step failed if any error found by linter.\n\nYou can also use `-level` flag to configure default report revel.\n\n## Filter mode\nreviewdog filter results by diff and you can control how reviewdog filter results by `-filter-mode` flag.\nAvailable filter modes are as below.\n\n### `added` (default)\nFilter results by added\u002Fmodified lines.\n### `diff_context`\nFilter results by diff context. i.e. changed lines +-N lines (N=3 for example).\n### `file`\nFilter results by added\u002Fmodified file. i.e. reviewdog will report results as long as they are in added\u002Fmodified file even if the results are not in actual diff.\n### `nofilter`\nDo not filter any results. Useful for posting results as comments as much as possible and check other results in console at the same time.\n\n`-fail-on-error` also works with any filter-mode and can catch all results from any linters with `nofilter` mode.\n\nExample:\n```shell\n$ reviewdog -reporter=github-pr-review -filter-mode=nofilter -fail-on-error\n```\n\n### Filter Mode Support Table\nNote that not all reporters provide full support for filter mode due to API limitation.\ne.g. `github-pr-review` reporter uses [GitHub Review\nAPI](https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fpulls\u002Freviews) but this API don't support posting comments outside diff context,\nso reviewdog will use [Check annotation](https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fchecks\u002Fruns) as fallback to post those comments [1]. \n\n| `-reporter` \\ `-filter-mode` | `added` | `diff_context` | `file`                  | `nofilter` |\n| ---------------------------- | ------- | -------------- | ----------------------- | ---------- |\n| **`local`**                  | OK      | OK             | OK                      | OK |\n| **`github-check`**           | OK      | OK             | OK                      | OK |\n| **`github-pr-check`**        | OK      | OK             | OK                      | OK |\n| **`github-pr-review`**       | OK      | OK             | Partially Supported [1] | Partially Supported [1] |\n| **`github-pr-annotations`**  | OK      | OK             | OK                      | OK |\n| **`gitlab-mr-discussion`**   | OK      | OK             | OK                      | Partially Supported [2] |\n| **`gitlab-mr-commit`**       | OK      | Partially Supported [2] | Partially Supported [2] | Partially Supported [2] |\n| **`gerrit-change-review`**   | OK      | OK? [3]        | OK? [3]                 | Partially Supported? [2][3] |\n| **`bitbucket-code-report`**  | NO [4]  | NO [4]         | NO [4]                  | OK |\n| **`gitea-pr-review`**        | OK      | OK             | Partially Supported [2] | Partially Supported [2] |\n\n- [1] Report results that are outside the diff file with Check annotation as fallback if it's running in GitHub actions instead of Review API (comments). All results will be reported to console as well.\n- [2] Report results that are outside the diff file to console.\n- [3] It should work, but not been verified yet.\n- [4] Not implemented at the moment\n\n## Debugging\n\nUse the `-tee` flag to show debug info.\n\n```shell\nreviewdog -filter-mode=nofilter -tee\n```\n\n## Articles\n- [reviewdog — A code review dog who keeps your codebase healthy ](https:\u002F\u002Fmedium.com\u002F@haya14busa\u002Freviewdog-a-code-review-dog-who-keeps-your-codebase-healthy-d957c471938b)\n- [reviewdog ♡ GitHub Check — improved automated review experience](https:\u002F\u002Fmedium.com\u002F@haya14busa\u002Freviewdog-github-check-improved-automated-review-experience-58f89e0c95f3)\n- [Automated Code Review on GitHub Actions with reviewdog for any languages\u002Ftools](https:\u002F\u002Fmedium.com\u002F@haya14busa\u002Fautomated-code-review-on-github-actions-with-reviewdog-for-any-languages-tools-20285e04448e)\n- [GitHub Actions to guard your workflow](https:\u002F\u002Fevrone.com\u002Fblog\u002Fgithub-actions)\n\n## :bird: Author\nhaya14busa [![GitHub followers](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Ffollowers\u002Fhaya14busa.svg?style=social&label=Follow)](https:\u002F\u002Fgithub.com\u002Fhaya14busa)\n\n## Contributors\n\n[![Contributors](https:\u002F\u002Fopencollective.com\u002Freviewdog\u002Fcontributors.svg?width=890)](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fgraphs\u002Fcontributors)\n\n### Supporting reviewdog\n\nBecome GitHub Sponsor for [each contributor](https:\u002F\u002Fgithub.com\u002Freviewdog\u002Freviewdog\u002Fgraphs\u002Fcontributors)\nor become a backer or sponsor from [opencollective](https:\u002F\u002Fopencollective.com\u002Freviewdog).\n\n[![Become a backer](https:\u002F\u002Fopencollective.com\u002Freviewdog\u002Ftiers\u002Fbacker.svg?avatarHeight=64)](https:\u002F\u002Fopencollective.com\u002Freviewdog#backers)\n","reviewdog 是一个自动代码审查工具，可以与任何编程语言的代码分析工具集成。它通过将静态代码分析结果直接反馈到代码审查过程中，帮助开发者在提交代码前发现并修复潜在问题。项目采用Go语言编写，支持GitHub、GitLab和Bitbucket等主流代码托管平台，并且能够无缝接入CI\u002FCD流程中。适用于需要提高代码质量和开发效率的各种软件开发场景。","2026-06-11 03:02:30","top_language"]