高速で、構成可能で、拡張可能で、柔軟性があり、美しいリナーがあります。 Golintのドロップイン交換。 Revive 、カスタムルールの開発のためのフレームワークを提供し、開発およびコードレビュープロセスを強化するための厳格なプリセットを定義できます。
var-namingreviveを使用しますgo install github.com/mgechev/revive@latestまたは、リリースページからリリースされた実行可能ファイルを取得します。
メインブランチ(最後のコミットを含む)を次のようにインストールできます。
go install github.com/mgechev/revive@masterreviveのデフォルトの動作はgolintと互換性があるため、追加のフラグを提供せずに、唯一の違いが実行されるのは速い実行です。
revive 、 reviveの糸くずに使用するルールを説明するTOMLファイルに価値がある-configフラグをサポートします。提供されていない場合、 reviveグローバル構成ファイルを使用しようとします( $HOME/revive.tomlにあると想定)。それ以外の場合、構成TOMLファイルが見つからない場合、 reviveデフォルトのリントルールの組み込みセットを使用します。
現在のリポジトリをコンテナと共有するには、ボリュームを取り付ける必要があります。 Bind Mounts Dockerドキュメントを参照してください
docker run -v " $( pwd ) " :/var/ < repository > ghcr.io/mgechev/revive:v1.3.7 -config /var/ < repository > /revive.toml -formatter stylish ./var/kidle/...-vボリューム用ですghcr.io/mgechev/revive:v1.3.7は画像名であり、そのバージョンはreviveコマンドに対応していますRevive with Bazelを使用したい場合は、Atlassianが維持しているルールを見てください。
VSCODE-GOのVSCODEのサポート。
ファイルウォッチャー経由のGolandのサポート。
Linter-Reviveを介したAtomのサポート。
密度分析/ALEを介したVIMのサポート。
let g: ale_linters = {
' go ' : [ ' revive ' ],
}null-ls.nvim経由のNeovimのサポート。
require ( " null-ls " ). setup ({
sources = {
require ( " null-ls " ). builtins . diagnostics . revive
},
})codeac.io-自動化されたコードレビューサービスは、Github、Bitbucket、Gitlab(自己ホストさえ)と統合され、技術的な負債と戦うのに役立ちます。自動的にReviveを使用して、プルリケストを確認してください。 (オープンソースプロジェクトは無料)
golangci-lintでreviveを有効にするには、有効なリナーのリストにreviveを追加する必要があります。
# golangci-lint configuration file
linters :
enable :
- revive次に、構成のlinters-settingsセクションにエントリを追加することで、次のようにrevive構成できます。
# golangci-lint configuration file
linters-settings :
revive :
ignore-generated-header : true
severity : warning
rules :
- name : atomic
- name : line-length-limit
severity : error
arguments : [80]
- name : unhandled-error
arguments : ["fmt.Printf", "myFunction"]上記の構成により、3つのreviveルールが可能になります:原子、ラインレングスリミット、および未処理の誤差の3つのルールと、最後の2つにいくつかの引数を渡します。このドキュメントの構成セクションには、 reviveを構成する方法に関する詳細を示します。 revive構成はTOMLであるが、 golangci-lintの構成はYamlにあることに注意してください。
特定の構成が提供されていない場合、 go-lintのようにreviveが動作することに注意してください。つまり、すべてのgo-lintルールが有効になっています(利用可能なルールテーブルの詳細はgo-lintルールとは何か)。構成が提供されると、構成内のルールのみが有効になります。
revive 、次のコマンドラインパラメーターを受け入れます。
-config [PATH] - configファイルへのパスTOML形式で、デフォルトは$HOME/revive.tomlが存在する場合。
-exclude [PATTERN] - ファイル/ディレクトリ/パッケージのパターンは、糸くずのために除外されます。パッケージ名(つまりgithub.com/mgechev/revive )として並ぶために除外するファイルを指定し、個々のファイル(すなわちfile.go )、ディレクトリ(つまり./foo/... )、または3つの組み合わせとしてリストすることができます。除外パターンが指定されていない場合、 vendor/...デフォルトで除外されます。
-formatter [NAME] - 出力に使用するフォーマッタ。現在利用可能なフォーマッタは次のとおりです。
default -Golint golint同じ方法で障害が出力されます。json -JSON形式で障害を出力します。ndjson -NewLine Delimited JSON(NDJSON)形式のストリームとして障害を出力します。friendly - 見つかったときに障害を出力します。すべての障害の概要を示します。stylish - テーブルの障害をフォーマットします。出力をストリーミングしないように、他の人と比較して遅いと認識される可能性があることに留意してください。checkstyle XML形式の障害をJavaのCheckStyleと互換性のある障害に出力します。 -max_open_filesオープンファイルの最大数を同時に。デフォルトは無制限です。
-set_exit_status -Exitステータスを1に設定している場合、問題が見つかった場合は、configのerrorCodeとwarningCodeを上書きします。
-version Reviveバージョンを入手してください。
revive -config revive.toml -exclude file1.go -exclude file2.go -formatter friendly github.com/mgechev/revive package/...revive.tomlの構成を使用しますrevive file1.goとfile2.goを無視しますfriendlyフォーマッタでフォーマットされますgithub.com/mgechev/reviveとpackage内のファイルを分析しますコメントを使用して、ファイル全体または範囲のラインに対してリナーを無効にすることができます。
//revive:disable
func Public () {}
//revive:enable上記のスニペットは、Revive間のreviveを無効にしますrevive:disableとrevive:enableコメント。 revive:enableをスキップすると、リナーはファイルの残りの部分で無効になります。
revive:disable-next-line and revive:disable-line特定のコードラインでrevive無効にすることができます。
ルールレベルでも同じことができます。特定のルールのみを無効にする場合は、以下を使用できます。
//revive:disable:unexported-return
func Public () private {
return private
}
//revive:enable:unexported-returnこのようにして、 revive 、エクスポートされた関数から、エクスペートされていないタイプのオブジェクトを返していることを警告しません。
たとえば、ディレクティブに後続のテキストを追加して、リナーを無効にする理由を文書化できます。
//revive:disable Until the code is stable //revive:disable:cyclomatic High complexity score but easy to understandまた、 reviveを構成することもできます。
[ directive . specify-disable-reason ]構成内。この指令の違反の重大度(デフォルトは警告にデフォルト)を設定できます
[ directive . specify-disable-reason ]
severity = " error "revive 、TOMLファイルで構成できます。これは、個々のプロパティの説明を含むサンプル構成です。
# When set to false, ignores files with "GENERATED" header, similar to golint
ignoreGeneratedHeader = true
# Sets the default severity to "warning"
severity = " warning "
# Sets the default failure confidence. This means that linting errors
# with less than 0.8 confidence will be ignored.
confidence = 0.8
# Sets the error code for failures with the "error" severity
errorCode = 0
# Sets the error code for failures with severity "warning"
warningCode = 0
# Configuration of the `cyclomatic` rule. Here we specify that
# the rule should fail if it detects code with higher complexity than 10.
[ rule . cyclomatic ]
arguments = [ 10 ]
# Sets the severity of the `package-comments` rule to "error".
[ rule . package-comments ]
severity = " error "デフォルトでは、 reviveでは、構成ファイルに名前が付けられた糸くずのルールのみが有効になります。たとえば、以前の構成ファイルにより、サイクロマティックとパッケージコメントの糸くずのみを有効にするためにrevive 。
利用可能なすべてのルールを有効にするには、追加する必要があります。
enableAllRules = trueこれにより、構成ファイルにどのようなルールが指定されていても、利用可能なすべてのルールが有効になります。
ルールを無効にするには、構成内で無効にしてマークするだけです。例えば:
[ rule . line-length-limit ]
Disabled = trueすべてのルールを有効にする場合、まだ必要とする/ルールに特定の構成を提供できます。次のファイルは、明示的に無効になっているルールを除き、すべてのルールが有効になっている構成の例であり、特定の引数でいくつかのルールが構成されています。
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
# Enable all available rules
enableAllRules = true
# Disabled rules
[ rule . blank-imports ]
Disabled = true
[ rule . file-header ]
Disabled = true
[ rule . max-public-structs ]
Disabled = true
[ rule . line-length-limit ]
Disabled = true
[ rule . function-length ]
Disabled = true
[ rule . banned-characters ]
Disabled = true
# Rule tuning
[ rule . argument-limit ]
Arguments = [ 5 ]
[ rule . cyclomatic ]
Arguments = [ 10 ]
[ rule . cognitive-complexity ]
Arguments = [ 7 ]
[ rule . function-result-limit ]
Arguments = [ 3 ]
[ rule . error-strings ]
Arguments = [ " mypackage.Error " ]reviveのデフォルト構成は、 defaults.tomlで見つけることができます。これにより、 golintで利用可能なすべてのルールが有効になり、デフォルトの構成(つまり、 golintでハードコードされている方法)を使用します。
revive -config defaults.toml github.com/mgechev/reviveこれにより、 defaults.toml 、 defaultフォーマッタが使用され、 github.com/mgechev/reviveパッケージの上でざらざを実行します。
revive -config config.toml -formatter friendly github.com/mgechev/reviveこれにより、 friendly Formatterであるconfig.tomlが使用され、 github.com/mgechev/reviveパッケージに糸くずを実行します。
次のスニペットには、プロジェクトで使用できる推奨されるrevive構成が含まれています。
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
[ rule . context-as-argument ]
[ rule . context-keys-type ]
[ rule . dot-imports ]
[ rule . error-return ]
[ rule . error-strings ]
[ rule . error-naming ]
[ rule . exported ]
[ rule . increment-decrement ]
[ rule . var-naming ]
[ rule . var-declaration ]
[ rule . package-comments ]
[ rule . range ]
[ rule . receiver-naming ]
[ rule . time-naming ]
[ rule . unexported-return ]
[ rule . indent-error-flow ]
[ rule . errorf ]
[ rule . empty-block ]
[ rule . superfluous-else ]
[ rule . unused-parameter ]
[ rule . unreachable-code ]
[ rule . redefines-builtin-id ]また、各ルールのカスタム除外をセットアップすることもできます。
これは、Global -excludeプログラムArgの代替手段です。
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
Exclude =[ " **/*.pb.go " ]
[ rule . context-as-argument ]
Exclude =[ " src/somepkg/*.go " , " TEST " ]次の除外パターンを使用できます
src/pkg/mypkg/some.gosrc/**/*.pb.go~.(pb|auto|generated).go$持っている必要がありますTEST ( **/*_test.goと同じ)*および~パターンはすべてのファイルを除外します(ルールの無効化と同じ効果)b。 "" (空)パターンは何も除外しません注:TOMLファイルのトップレベルで使用できる
excludeを台無しにしないでください。つまり、「ファイルパターンを除外」ではなく「パッケージパターンを除外」を意味します。
利用可能なすべてのルールのリスト。 golintから移植されたルールは変更されておらず、 golint列に示されています。
| 名前 | config | 説明 | golint | タイプしました |
|---|---|---|---|---|
context-keys-type | n/a | context.WithValue内の基本タイプの使用を許可しません。 | はい | はい |
time-equal | n/a | equalityチェック時間の場合、 ==および!=代わりにtime.Time.Equalを使用することをお勧めします。 | いいえ | はい |
time-naming | n/a | 時間変数の命名に関する規則。 | はい | はい |
unchecked-type-assertions | n/a | 結果をチェックせずにタイプタイプのアサーションを許可します。 | いいえ | はい |
var-declaration | n/a | 可変宣言の周りの冗長性を減らします。 | はい | はい |
unexported-return | n/a | 公的な返品がエクスペリとされていないタイプからのものである場合、警告します。 | はい | はい |
errorf | n/a | errors.New(fmt.Sprintf())をfmt.Errorf()に置き換える必要があります | はい | はい |
blank-imports | n/a | 空白の輸入を許可します | はい | いいえ |
context-as-argument | n/a | context.Context 、関数の最初の引数である必要があります。 | はい | いいえ |
dot-imports | n/a | 禁止.輸入。 | はい | いいえ |
error-return | n/a | エラー戻りパラメーターは最後にする必要があります。 | はい | いいえ |
error-strings | []弦 | エラー文字列に関する規則。 | はい | いいえ |
error-naming | n/a | エラー変数の命名。 | はい | いいえ |
exported | []弦 | エクスポートされたシンボルに関する条約の命名とコメント。 | はい | いいえ |
if-return | n/a | エラーを返すときに冗長。 | いいえ | いいえ |
increment-decrement | n/a | i++とi--を使用しますi += 1およびi -= 1の代わりに。 | はい | いいえ |
var-naming | イニシャル主義のAllowListとブロックリスト | 命名規則。 | はい | いいえ |
package-comments | n/a | パッケージのコメント規則。 | はい | いいえ |
range | n/a | コレクションを反復するときに、冗長変数を防ぎます。 | はい | いいえ |
receiver-naming | マップ(オプション) | 受信機の命名に関する規則。 | はい | いいえ |
indent-error-flow | []弦 | 冗長な他のステートメントを防ぎます。 | はい | いいえ |
argument-limit | int(デフォルトは8) | 関数が受信できる引数の最大数を指定します | いいえ | いいえ |
cyclomatic | int(デフォルトは10です) | 最大の環状複雑さのために制限を設定します。 | いいえ | いいえ |
max-public-structs | int(デフォルトは5) | ファイル内のパブリック構造体の最大数。 | いいえ | いいえ |
file-header | 文字列(デフォルトはなし) | 各ファイルが必要なヘッダー。 | いいえ | いいえ |
empty-block | n/a | 空のコードブロックで警告します | いいえ | はい |
superfluous-else | []弦 | 冗長他のステートメントを防ぎます( indent-error-flowを拡張) | いいえ | いいえ |
confusing-naming | n/a | 大文字によってのみ異なる名前の方法で警告する | いいえ | いいえ |
get-return | n/a | 結果をもたらさないゲッターについて警告します | いいえ | いいえ |
modifies-parameter | n/a | 関数パラメーターへの割り当てについて警告します | いいえ | いいえ |
confusing-results | n/a | 潜在的に混乱する機能の結果を名前を付けることを提案します | いいえ | いいえ |
deep-exit | n/a | main()またはinit()以外のFUNCでのプログラム出口を探します | いいえ | いいえ |
unused-parameter | n/a | 未使用の関数パラメーターの名前を変更または削除することをお勧めします | いいえ | いいえ |
unreachable-code | n/a | 到達不可能なコードで警告します | いいえ | いいえ |
add-constant | 地図 | 魔法の数字と文字列リテラルに定数を使用することをお勧めします | いいえ | いいえ |
flag-parameter | n/a | コントロールカップリングを作成するブールパラメーターについて警告します | いいえ | いいえ |
unnecessary-stmt | n/a | 不必要なステートメントを削除または簡素化することを提案します | いいえ | いいえ |
struct-tag | []弦 | json 、 xml 、 yamlなどの一般的な構造体タグをチェック | いいえ | いいえ |
modifies-value-receiver | n/a | 価値通過メソッドレシーバーへの割り当てについて警告します | いいえ | はい |
constant-logical-expr | n/a | 一定の論理式について警告します | いいえ | いいえ |
bool-literal-in-expr | n/a | ロジック式からブールリテラルを削除することを提案します | いいえ | いいえ |
redefines-builtin-id | n/a | ビルトイン識別子の再定義について警告します | いいえ | いいえ |
function-result-limit | int(デフォルトは3) | 関数が返す可能性のある結果の最大数を指定します | いいえ | いいえ |
imports-blocklist | []弦 | 指定されたパッケージをインポートすることを許可しません | いいえ | いいえ |
range-val-in-closure | n/a | ゴルチンとして派遣された閉鎖値で範囲値が使用される場合は警告します | いいえ | いいえ |
range-val-address | n/a | 範囲値の住所が危険に使用される場合、警告します | いいえ | はい |
waitgroup-by-value | n/a | sync.waitgroupをバリューパラメーターとして取得する関数について警告します | いいえ | いいえ |
atomic | n/a | sync/atomicパッケージの一般的な誤った使用法を確認してください | いいえ | いいえ |
empty-lines | n/a | ブロックに向かって見出しまたは後続のニューラインがあるときに警告します | いいえ | いいえ |
line-length-limit | int(デフォルトは80) | 1行内の文字の最大数を指定します | いいえ | いいえ |
call-to-gc | n/a | ゴミコレクターへの明示的な呼び出しについて警告します | いいえ | いいえ |
duplicated-imports | n/a | 2回以上インポートされるパッケージを探します | いいえ | いいえ |
import-shadowing | n/a | インポートに影を落とすスポット識別子 | いいえ | いいえ |
bare-return | n/a | 裸のリターンについて警告します | いいえ | いいえ |
unused-receiver | n/a | 未使用のメソッドレシーバーの名前を変更または削除することをお勧めします | いいえ | いいえ |
unhandled-error | []弦 | 関数呼び出しによって返される未処理のエラーについて警告します | いいえ | はい |
cognitive-complexity | int(デフォルトは7になります) | 認知的複雑さを最大限にするために制限を設定します。 | いいえ | いいえ |
string-of-int | n/a | IntからStringへの疑わしいキャストについて警告します | いいえ | はい |
string-format | 地図 | 1つ以上のユーザーが構成する正規表現に失敗する特定の文字列リテラルについて警告します | いいえ | いいえ |
early-return | []弦 | 営巣を減らすために述語が反転する可能性がある場合、斑点の場合 | いいえ | いいえ |
unconditional-recursion | n/a | (直接的な)無限の再帰につながる機能呼び出しに関する警告 | いいえ | いいえ |
identical-branches | n/a | 同一の分岐とelse分岐を備えたthen -elseステートメントの場合のスポット | いいえ | いいえ |
defer | 地図 | いくつかの延期ゴッチャスに警告します | いいえ | いいえ |
unexported-naming | n/a | 誤って釈放されていないシンボルに警告します | いいえ | いいえ |
function-length | int、int(デフォルトは50のステートメント、75行) | 声明または行を超える関数について警告します | いいえ | いいえ |
nested-structs | n/a | 構造体内の構造体について警告します | いいえ | いいえ |
useless-break | n/a | ケース条項の役に立たないbreakステートメントについて警告します | いいえ | いいえ |
banned-characters | [] string(デフォルトは[] string {}にデフォルトです) | 識別子で禁止された文字をチェックします | いいえ | いいえ |
optimize-operands-order | n/a | 非効率的な条件式をチェックします | いいえ | いいえ |
use-any | n/a | interface{} anyに置き換えることを提案します | いいえ | いいえ |
datarace | n/a | 潜在的なデータアラースをスポットします | いいえ | いいえ |
comment-spacings | []弦 | 奇形のコメントについて警告します | いいえ | いいえ |
redundant-import-alias | n/a | インポートされたパッケージ名に一致するインポートエイリアスについて警告します | いいえ | いいえ |
import-alias-naming | stringまたはmap [string] string(デフォルトは正規表現パターン ^[az] [a-z0-9] {0、} $)を許可します | インポートエイリアスの命名に関する規則。 | いいえ | いいえ |
enforce-map-style | 文字列(デフォルトは「any」になります) | マップ初期化には、 make(map[type]type)またはmap[type]type{}の一貫した使用法を強制します。 make(map[type]type, size)構造に影響しません。 | いいえ | いいえ |
enforce-slice-style | 文字列(デフォルトは「any」になります) | スライス初期化のために、[[]タイプ、0)または[]type{}のmake([]type, 0)または[]タイプの一貫した使用法を強制します。 make(map[type]type, non_zero_len, or_non_zero_cap)構造には影響しません。 | いいえ | いいえ |
enforce-repeated-arg-type-style | 文字列(デフォルトは「any」になります) | 繰り返される引数および/または戻り値タイプの一貫したスタイルを強制します。 | いいえ | いいえ |
max-control-nesting | int(デフォルトは5) | 制御構造の最大ネストのために制限を設定します。 | いいえ | いいえ |
comments-density | int(デフォルトは0です) | コメント /コード関係を最小限に抑えます | いいえ | いいえ |
file-length-limit | マップ(オプション) | ファイルごとに最大行数を実施します | いいえ | いいえ |
filename-format | 正規表現(オプション) | ファイル名のフォーマットを強制します | いいえ | いいえ |
redundant-build-tag | n/a | 冗長性について警告// +build | いいえ | いいえ |
use-errors-new | n/a | errors.Newに置き換えることができるfmt.Errorfへの呼び出し | いいえ | いいえ |
ここでは、既存のルールを構成する方法を見つけることができます。
var-namingこのルールは、列の2つのスライス、AllowList、および初期主義のブロックリストを受け入れます。デフォルトでは、ルールはgolintの代替として正確に動作しますが、オプションではリラックスできます(Golint/Lint/Issues/89を参照)
[ rule . var-naming ]
arguments = [[ " ID " ], [ " VM " ]]このようにして、ReviveはcustomIdと呼ばれる識別子については警告しませんが、 customVm customVMと呼ばれるべきであると警告します。
このセクションには、利用可能なすべてのフォーマッタをリストし、それぞれのスクリーンショットを提供します。


デフォルトのフォーマッタは、 golintと同じ出力を生成します。

プレーンフォーマッタは、デフォルトのフォーマッタと同じ出力を生成し、ルールの説明にURLを追加します。

UNIXフォーマッタは、デフォルトのフォーマッタと同じ出力を生成しますが、 []のルールを囲みます。

jsonフォーマッタは、JSON形式で出力を生成します。
ndjsonフォーマッタはNewline Delimited JSON形式で出力を生成します。
checkstyle Formatterは、Checkstyleのような形式で出力を生成します。
sarif FORMATTERは、SARIFで出力を生成します。静的分析結果は、OASISによって定義および促進された静的分析ツールの出力の標準JSONベースの形式であるインターチェンジ形式です。
標準の現在のサポートバージョンはSARIF-V2.1.0です。
このツールは、カスタムルールまたはフォーマッタで拡張できます。このセクションには、そのような実装方法に関する追加情報が含まれています。
カスタムルールを使用してリナーを拡張するには、このリポジトリにプッシュするか、ライブラリとしてreviveを使用できます(以下を参照)
カスタムフォーマッタを追加するには、このリポジトリにプッシュするか、フォークする必要があります。これは、Linuxでのみ動作する(既知の問題がある)限られた-buildmode=pluginサポートによるものです。
各ルールは、 lint.Ruleインターフェイスを実装する必要があります。
type Rule interface {
Name () string
Apply ( * File , Arguments ) [] Failure
} Argumentsタイプは、型[]interface{}のエイリアスです。ルールの引数は、構成ファイルから渡されます。
特定の識別子を持つ構造に名前を付けることを私たちに許可するBanStructNameRuleというルールを開発したとしましょう。 TOML構成ファイルを使用して、禁止された識別子を設定できます。
[ rule . ban-struct-name ]
arguments = [ " Foo " ]上にスニペットを使用して:
ban-struct-name名前でルールを有効にします。ルールのName()メソッドはban-struct-name一致する文字列を返す必要があります。Fooでルールを構成します。引数のリストは、現在並んでいるターゲットファイルと一緒にApply(*File, Arguments)に渡されます。サンプルルールの実装はここにあります。
reviveを使用しますルールがユースケースに固有である場合(つまり、 reviveのルールセットに追加するのは良い候補ではありません)。リンティングエンジンとしてreviveを使用してリナーに追加できます。
次のコードは、アプリケーションでreviveの使用方法を示しています。例では、1つのルールのみが追加されています( myRule )。もちろん、必要なだけ追加することができます。ルールは、プログラムで構成するか、標準のrevive構成ファイルで構成できます。 reviveの完全なルールセットも、アプリケーションによって実行可能です。
package main
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/lint"
"github.com/mgechev/revive/revivelib"
)
func main () {
cli . RunRevive ( revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}))
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... }あなたはまだあなたのライブラリの一部として、またはあなたのCLIの一部として、そのCLIなしでreviveさらに使用することができます:
package mylib
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/revivelib"
"github.com/mgechev/revive/lint"
)
// Error checking removed for clarity
func LintMyFile ( file string ) {
conf , _ := config . GetConfig ( "../defaults.toml" )
revive , _ := revivelib . New (
conf , // Configuration file
true , // Set exit status
2048 , // Max open files
// Then add as many extra rules as you need
revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}),
)
failuresChan , err := revive . Lint (
revivelib . Include ( file ),
revivelib . Exclude ( "./fixtures" ),
// You can use as many revivelib.Include or revivelib.Exclude as required
)
if err != nil {
panic ( "Shouldn't have failed: " + err . Error ())
}
// Now let's return the formatted errors
failures , exitCode , _ := revive . Format ( "stylish" , failuresChan )
// failures is the string with all formatted lint error messages
// exit code is 0 if no errors, 1 if errors (unless config options change it)
// ... do something with them
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... }各フォーマッタは、次のインターフェイスを実装する必要があります。
type Formatter interface {
Format ( <- chan Failure , Config ) ( string , error )
Name () string
} Formatメソッドは、 Failureインスタンスのチャネルと有効なルールの構成を受け入れます。 Name()メソッドは、既存のルールの名前とは異なる文字列を返す必要があります。この文字列は、 revive CLIツールを呼び出すときにフォーマッタを指定するときに使用されます。
サンプルフォーマッタについては、このファイルをご覧ください。
golintと比較して、 revive個々のルールごとにファイルを別のゴルウチンに覆うため、パフォーマンスが向上します。 MacBook Proの基本的なパフォーマンスベンチマークは、Kubernetesでの2013年初期のランニングです。
time golint kubernetes/... > /dev/null
real 0m54.837s
user 0m57.844s
sys 0m9.146s # no type checking
time revive -config untyped.toml kubernetes/... > /dev/null
real 0m8.471s
user 0m40.721s
sys 0m3.262sタイプチェックを必要とするルールを使用する場合、パフォーマンスはgolintよりも2倍高速に低下する可能性があることに注意してください。
# type checking enabled
time revive kubernetes/... > /dev/null
real 0m26.211s
user 2m6.708s
sys 0m17.192s現在、タイプチェックはデフォルトで有効になっています。タイプチェックせずにリナーを実行する場合は、構成ファイルから型と入力されたすべてのルールを削除します。
デフォルトでは、 revive 、TTYに接続されているかどうかに基づいて出力を色付けするかどうかを決定します。これはほとんどのユースケースで機能しますが、コマンドのパイプラインでreviveを使用する場合、予想どおりに動作しない場合があります。
着色を強制するには、実行中の環境にREVIVE_FORCE_COLOR=1追加してください。たとえば、:
REVIVE_FORCE_COLOR=1 revive -formatter friendly ./... | tee revive.log| Mgechev | チャバカバ | denisvmedia | mfederowicz | xuri | アレクサンダー |
| ldez | doniacld | クリバーン | morphy2k | Bernhardreisenberger | Dshemin |
| ブチュゾフ | comdiv | ハイネマン | グサモコバロフ | ムデラ | Tymonx |
| Sina-Devel | Rawen17 | Dominiquelefevre | git-hulk | shmsr | ytnsym |
| zimmski | MapReal19 | CCE | スカジ | ccoveille | Tamird |
| Markelog | ミハイトドール | dvejmz | アベルタイ | DAMIF94 | Groxx |
| Stephenbuttolph | Stephenbrown2 | lSTYTJ0413 | カスケード | ridvansumset | rliebz |
| rdeusser | rmarku | rnikoopour | ラファマドリズ | PACO0X | PA-M |
| CINAR | natefinch | ヌナツサ | ミカリシム | Zeripath | y-yagi |
| TechKnowLogick | オカンガン | 意地悪 | LIKYH | Kerneltravel | jmckenzieark |
| haya14busa | Fregin | Ydah | ウィラバイド | ヘイビト | ヴィンセントバロン |
| スコップ | vkrol | Kirillsluchaev | ジャレマ | タルテール | Tmzane |
| Felipedavid | euank | エンティアジズム | Juneezee | echoix | 吐き出す |
| Petethepig | dirk007 | Yangdiangzb | デレクペルキンス | Bboreham | 態度 |
| hatamiarash7 | アラグル | amincheloh | クルティ | abirdcfly | Abhinav |
| r-ricci | Mmcloughlin | マシュー・オービン | Martinsirbe | アボリマ | ムコブレン |
| 非常に魅力的です | Johnrichardrinehart | 壁 | Jefersonf | ジェームズメイド | ジャラジズ |
| グロンジャー | ネクタイ | Quasilyte | Davidhsingyuchen | gfariasalves-ionos | Gburanov |
| ginglis13 | フレッサー |
mit