Linter cepat, dapat dikonfigurasi, diperluas, fleksibel, dan indah untuk Go. Penggantian drop-in Golint. Revive menyediakan kerangka kerja untuk pengembangan aturan khusus, dan memungkinkan Anda mendefinisikan preset yang ketat untuk meningkatkan proses pengembangan & tinjauan kode Anda .
var-namingrevive sebagai Perpustakaango install github.com/mgechev/revive@latestAtau dapatkan yang dapat dieksekusi dari halaman rilis.
Anda dapat menginstal cabang utama (termasuk komit terakhir) dengan:
go install github.com/mgechev/revive@master Karena perilaku default revive kompatibel dengan golint , tanpa memberikan bendera tambahan, satu -satunya perbedaan yang Anda perhatikan adalah eksekusi yang lebih cepat.
revive mendukung bendera -config yang nilainya harus sesuai dengan file TOML yang menggambarkan aturan mana yang akan digunakan untuk Linting revive . Jika tidak disediakan, revive akan mencoba menggunakan file konfigurasi global (diasumsikan berada di $HOME/revive.toml ). Kalau tidak, jika tidak ada konfigurasi file TOML ditemukan maka revive menggunakan set aturan linting default bawaan.
Volume harus dipasang untuk berbagi repositori saat ini dengan wadah. Silakan merujuk ke dokumentasi 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 untuk volumeghcr.io/mgechev/revive:v1.3.7 adalah nama gambar dan versinya sesuai dengan perintah reviveJika Anda ingin menggunakan Revive dengan Bazel, lihat aturan yang dipertahankan Atlassian.
Dukungan untuk vScode di vscode-go.
Dukungan untuk Goland melalui pengamat file.
Dukungan untuk atom melalui linter-revive.
Dukungan untuk VIM melalui analisis padat/ale.
let g: ale_linters = {
' go ' : [ ' revive ' ],
}Dukungan untuk Neovim melalui null-ls.nvim.
require ( " null-ls " ). setup ({
sources = {
require ( " null-ls " ). builtins . diagnostics . revive
},
})CODEAC.IO - Layanan tinjauan kode otomatis terintegrasi dengan GitHub, Bitbucket dan GitLab (bahkan diselenggarakan sendiri) dan membantu Anda melawan utang teknis. Periksa permintaan tarik Anda dengan Revive secara otomatis. (Gratis untuk proyek open-source)
Untuk mengaktifkan revive di golangci-lint Anda perlu menambahkan revive ke daftar Linters yang diaktifkan:
# golangci-lint configuration file
linters :
enable :
- revive Kemudian revive dapat dikonfigurasi dengan menambahkan entri ke bagian linters-settings dari konfigurasi, misalnya:
# 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"] Konfigurasi di atas memungkinkan tiga aturan revive : atom , garis panjang garis dan tidak ditangani-error dan meneruskan beberapa argumen ke dua yang terakhir. Bagian konfigurasi dokumen ini memberikan detail tentang cara mengkonfigurasi revive . Perhatikan bahwa sementara konfigurasi revive ada di TOML, yaitu golangci-lint ada di YAML.
Harap perhatikan bahwa jika tidak ada konfigurasi tertentu yang disediakan, revive akan berperilaku seperti yang dilakukan go-lint , yaitu semua aturan go-lint diaktifkan (tabel aturan yang tersedia merinci apa aturan go-lint ). Ketika konfigurasi disediakan, hanya aturan dalam konfigurasi yang diaktifkan.
revive menerima parameter baris perintah berikut:
-config [PATH] - Path ke file konfigurasi dalam format TOML, default ke $HOME/revive.toml jika ada.
-exclude [PATTERN] - pola untuk file/direktori/paket yang akan dikecualikan untuk berbaris. Anda dapat menentukan file yang ingin Anda kecualikan untuk berbaris baik sebagai nama paket (yaitu github.com/mgechev/revive ), daftarkannya sebagai file individual (yaitu file.go ), direktori (yaitu ./foo/... ), atau kombinasi ketiganya. Jika tidak ada pola pengecualian yang ditentukan, vendor/... akan dikecualikan secara default.
-formatter [NAME] - Formatter yang akan digunakan untuk output. Formatter yang tersedia saat ini adalah:
default - Akan mengeluarkan kegagalan dengan cara yang sama seperti yang dilakukan golint .json - Mengeluarkan kegagalan dalam format JSON.ndjson - Mengeluarkan kegagalan sebagai aliran dalam format Newline Delimited JSON (NDJSON).friendly - menghasilkan kegagalan saat ditemukan. Menunjukkan ringkasan semua kegagalan.stylish - Memformat kegagalan dalam tabel. Perlu diingat bahwa itu tidak mengalirkan output sehingga mungkin dianggap lebih lambat dibandingkan dengan yang lain.checkstyle - Mengeluarkan kegagalan dalam format XML yang kompatibel dengan Java's CheckStyle. -max_open_files - Jumlah maksimum file terbuka secara bersamaan. Default ke tidak terbatas.
-set_exit_status - atur status keluar ke 1 jika ada masalah yang ditemukan, implites errorCode dan warningCode di konfigurasi.
-version - Dapatkan versi Revive.
revive -config revive.toml -exclude file1.go -exclude file2.go -formatter friendly github.com/mgechev/revive package/...revive.tomlrevive akan mengabaikan file1.go dan file2.gofriendlygithub.com/mgechev/revive dan file dalam packageMenggunakan komentar, Anda dapat menonaktifkan linter untuk seluruh file atau hanya berbagai baris:
//revive:disable
func Public () {}
//revive:enable Cuplikan di atas, akan menonaktifkan revive antara revive:disable dan revive:enable Komentar. Jika Anda melewatkan revive:enable , linter akan dinonaktifkan untuk sisa file.
Dengan revive:disable-next-line dan revive:disable-line Anda dapat menonaktifkan revive pada baris kode tertentu.
Anda dapat melakukan hal yang sama pada tingkat peraturan. Jika Anda hanya ingin menonaktifkan aturan tertentu, Anda dapat menggunakan:
//revive:disable:unexported-return
func Public () private {
return private
}
//revive:enable:unexported-return Dengan cara ini, revive tidak akan memperingatkan Anda bahwa Anda mengembalikan objek dari tipe yang tidak diekspor, dari fungsi yang diekspor.
Anda dapat mendokumentasikan mengapa Anda menonaktifkan linter dengan menambahkan teks trailing di arahan, misalnya
//revive:disable Until the code is stable //revive:disable:cyclomatic High complexity score but easy to understand Anda juga dapat mengkonfigurasi revive untuk menegakkan Dokumentasi LINTER DISABLING DETANSI dengan menambahkan
[ directive . specify-disable-reason ]dalam konfigurasi. Anda dapat mengatur keparahan (default ke peringatan ) dari pelanggaran arahan ini
[ directive . specify-disable-reason ]
severity = " error " revive dapat dikonfigurasi dengan file TOML. Berikut konfigurasi sampel dengan penjelasan tentang properti individual:
# 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 " Secara default revive hanya akan mengaktifkan aturan serat yang disebutkan dalam file konfigurasi. Misalnya, file konfigurasi sebelumnya membuat revive untuk mengaktifkan hanya aturan linting cyclomatic dan package-comments .
Untuk mengaktifkan semua aturan yang tersedia, Anda perlu menambahkan:
enableAllRules = trueIni akan memungkinkan semua aturan yang tersedia tidak peduli aturan apa yang disebutkan dalam file konfigurasi.
Untuk menonaktifkan aturan, Anda cukup menandainya sebagai dinonaktifkan dalam konfigurasi. Misalnya:
[ rule . line-length-limit ]
Disabled = trueSaat mengaktifkan semua aturan yang masih Anda butuhkan/dapat memberikan konfigurasi khusus untuk aturan. File berikut adalah contoh konfigurasi di mana semua aturan diaktifkan, kecuali yang dinonaktifkan secara eksplisit, dan beberapa aturan dikonfigurasi dengan argumen tertentu:
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 " ] Konfigurasi default dari revive dapat ditemukan di defaults.toml . Ini akan memungkinkan semua aturan yang tersedia di golint dan menggunakan konfigurasi default mereka (yaitu cara mereka hardcoded di golint ).
revive -config defaults.toml github.com/mgechev/revive Ini akan menggunakan file konfigurasi defaults.toml , formatter default , dan akan menjalankan linting di atas paket github.com/mgechev/revive .
revive -config config.toml -formatter friendly github.com/mgechev/revive Ini akan menggunakan config.toml , formatter friendly , dan akan berjalan di atas paket github.com/mgechev/revive .
Cuplikan berikut berisi konfigurasi revive yang disarankan yang dapat Anda gunakan dalam proyek Anda:
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 ]Anda juga dapat mengatur kustom tidak dikecualikan untuk setiap aturan.
Ini adalah alternatif untuk Arg Program Global -exclude .
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 " ]Anda dapat menggunakan pola mengecualikan berikut
src/pkg/mypkg/some.gosrc/**/*.pb.go~.(pb|auto|generated).go$TEST terkenal (sama seperti **/*_test.go )* dan ~ pola mengecualikan semua file (efek yang sama dengan menonaktifkan aturan) b. Pola "" (kosong) tidak termasuk apa -apaCatatan: Jangan main -main dengan
excludeyang dapat digunakan di tingkat atas file toml, itu berarti "mengecualikan pola paket", bukan "mengecualikan pola file"
Daftar semua aturan yang tersedia. Aturan yang diangkut dari golint dibiarkan tidak berubah dan ditunjukkan di kolom golint .
| Nama | Konfigurasi | Keterangan | golint | Diketik |
|---|---|---|---|---|
context-keys-type | n/a | Melarang penggunaan tipe dasar dalam context.WithValue Tanpa nilai. | Ya | Ya |
time-equal | n/a | Menyarankan untuk menggunakan time.Time.Equal bukan == dan != Untuk waktu pemeriksaan kesetaraan. | TIDAK | Ya |
time-naming | n/a | Konvensi di sekitar penamaan variabel waktu. | Ya | Ya |
unchecked-type-assertions | n/a | Melarang jenis pernyataan tanpa memeriksa hasilnya. | TIDAK | Ya |
var-declaration | n/a | Mengurangi redudansi di sekitar deklarasi variabel. | Ya | Ya |
unexported-return | n/a | Peringatkan ketika pengembalian publik berasal dari tipe yang tidak diekspor. | Ya | Ya |
errorf | n/a | Harus menggantikan errors.New(fmt.Sprintf()) dengan fmt.Errorf() | Ya | Ya |
blank-imports | n/a | Melarang impor kosong | Ya | TIDAK |
context-as-argument | n/a | context.Context harus menjadi argumen pertama dari suatu fungsi. | Ya | TIDAK |
dot-imports | n/a | Melarang . impor. | Ya | TIDAK |
error-return | n/a | Parameter pengembalian kesalahan harus terakhir. | Ya | TIDAK |
error-strings | []rangkaian | Konvensi di sekitar string kesalahan. | Ya | TIDAK |
error-naming | n/a | Penamaan variabel kesalahan. | Ya | TIDAK |
exported | []rangkaian | Penamaan dan mengomentari konvensi tentang simbol yang diekspor. | Ya | TIDAK |
if-return | n/a | Redundan jika saat mengembalikan kesalahan. | TIDAK | TIDAK |
increment-decrement | n/a | Gunakan i++ dan i-- bukannya i += 1 dan i -= 1 . | Ya | TIDAK |
var-naming | Izin Daftar & Daftar Inisialisme | Aturan penamaan. | Ya | TIDAK |
package-comments | n/a | Konvensi Komentar Paket. | Ya | TIDAK |
range | n/a | Mencegah variabel redundan saat mengulangi koleksi. | Ya | TIDAK |
receiver-naming | peta (opsional) | Konvensi di sekitar penamaan penerima. | Ya | TIDAK |
indent-error-flow | []rangkaian | Mencegah pernyataan lagi yang berlebihan. | Ya | TIDAK |
argument-limit | int (default ke 8) | Menentukan jumlah argumen maksimum yang dapat diterima fungsi | TIDAK | TIDAK |
cyclomatic | int (default ke 10) | Menetapkan pembatasan untuk kompleksitas siklomatik maksimum. | TIDAK | TIDAK |
max-public-structs | int (default ke 5) | Jumlah maksimum struct publik dalam suatu file. | TIDAK | TIDAK |
file-header | string (default ke tidak ada) | Header yang harus dimiliki setiap file. | TIDAK | TIDAK |
empty-block | n/a | Memperingatkan pada blok kode kosong | TIDAK | Ya |
superfluous-else | []rangkaian | Mencegah pernyataan yang berlebihan (memperluas indent-error-flow ) | TIDAK | TIDAK |
confusing-naming | n/a | Memperingatkan metode dengan nama yang hanya berbeda dengan kapitalisasi | TIDAK | TIDAK |
get-return | n/a | Memperingatkan getters yang tidak menghasilkan hasil apa pun | TIDAK | TIDAK |
modifies-parameter | n/a | Memperingatkan penugasan ke parameter fungsi | TIDAK | TIDAK |
confusing-results | n/a | Menyarankan untuk menyebutkan hasil fungsi yang berpotensi membingungkan | TIDAK | TIDAK |
deep-exit | n/a | Mencari program keluar dalam fungsi selain main() atau init() | TIDAK | TIDAK |
unused-parameter | n/a | Menyarankan untuk mengganti nama atau menghapus parameter fungsi yang tidak digunakan | TIDAK | TIDAK |
unreachable-code | n/a | Memperingatkan kode yang tidak terjangkau | TIDAK | TIDAK |
add-constant | peta | Menyarankan menggunakan konstan untuk angka ajaib dan literal string | TIDAK | TIDAK |
flag-parameter | n/a | Memperingatkan parameter boolean yang membuat kopling kontrol | TIDAK | TIDAK |
unnecessary-stmt | n/a | Menyarankan menghapus atau menyederhanakan pernyataan yang tidak perlu | TIDAK | TIDAK |
struct-tag | []rangkaian | Memeriksa tag struct umum seperti json , xml , yaml | TIDAK | TIDAK |
modifies-value-receiver | n/a | Memperingatkan penugasan untuk penerima metode yang ditempatkan bernilai | TIDAK | Ya |
constant-logical-expr | n/a | Memperingatkan ekspresi logis konstan | TIDAK | TIDAK |
bool-literal-in-expr | n/a | Menyarankan menghapus literal boolean dari ekspresi logika | TIDAK | TIDAK |
redefines-builtin-id | n/a | Memperingatkan tentang redefinisi pengidentifikasi builtin | TIDAK | TIDAK |
function-result-limit | int (default ke 3) | Menentukan jumlah hasil maksimum yang dapat dikembalikan fungsi | TIDAK | TIDAK |
imports-blocklist | []rangkaian | Melarang mengimpor paket yang ditentukan | TIDAK | TIDAK |
range-val-in-closure | n/a | Memperingatkan jika nilai rentang digunakan dalam penutupan yang dikirim sebagai goroutine | TIDAK | TIDAK |
range-val-address | n/a | Memperingatkan jika alamat nilai rentang digunakan berbahaya | TIDAK | Ya |
waitgroup-by-value | n/a | Memperingatkan fungsi mengambil sync.waitgroup sebagai parameter value | TIDAK | TIDAK |
atomic | n/a | Periksa penggunaan yang salah dari paket sync/atomic | TIDAK | TIDAK |
empty-lines | n/a | Memperingatkan saat ada menuju atau membuntuti newline di blok | TIDAK | TIDAK |
line-length-limit | int (default ke 80) | Menentukan jumlah karakter maksimum dalam satu baris | TIDAK | TIDAK |
call-to-gc | n/a | Memperingatkan panggilan eksplisit ke pengumpul sampah | TIDAK | TIDAK |
duplicated-imports | n/a | Mencari paket yang diimpor dua kali atau lebih | TIDAK | TIDAK |
import-shadowing | n/a | Pengidentifikasi tempat yang membayangi impor | TIDAK | TIDAK |
bare-return | n/a | Memperingatkan pengembalian telanjang | TIDAK | TIDAK |
unused-receiver | n/a | Menyarankan untuk mengganti nama atau menghapus penerima metode yang tidak digunakan | TIDAK | TIDAK |
unhandled-error | []rangkaian | Memperingatkan kesalahan yang tidak ditangani dikembalikan oleh panggilan fungsi | TIDAK | Ya |
cognitive-complexity | int (default ke 7) | Menetapkan pembatasan untuk kompleksitas kognitif maksimum. | TIDAK | TIDAK |
string-of-int | n/a | Memperingatkan gips yang mencurigakan dari int ke string | TIDAK | Ya |
string-format | peta | Memperingatkan literal string spesifik yang gagal satu atau lebih ekspresi reguler yang dikonfigurasi pengguna | TIDAK | TIDAK |
early-return | []rangkaian | Bintik-bintik If-Then-Else Pernyataan di mana predikat dapat dibalik untuk mengurangi bersarang | TIDAK | TIDAK |
unconditional-recursion | n/a | Memperingatkan panggilan fungsi yang akan menyebabkan rekursi (langsung) tak terbatas | TIDAK | TIDAK |
identical-branches | n/a | Bintik-bintik Pernyataan If-Then-Else Dengan Identik then Dan else Cabang | TIDAK | TIDAK |
defer | peta | Memperingatkan beberapa gotcha tundukan | TIDAK | TIDAK |
unexported-naming | n/a | Memperingatkan simbol yang tidak diekspor secara salah bernama | TIDAK | TIDAK |
function-length | int, int (default ke 50 pernyataan, 75 baris) | Memperingatkan pada fungsi yang melebihi pernyataan atau garis maks | TIDAK | TIDAK |
nested-structs | n/a | Memperingatkan pada struct di dalam structs | TIDAK | TIDAK |
useless-break | n/a | Memperingatkan tentang pernyataan break yang tidak berguna dalam kasus klausul | TIDAK | TIDAK |
banned-characters | [] string (default ke [] string {}) | Cek karakter yang dilarang di pengidentifikasi | TIDAK | TIDAK |
optimize-operands-order | n/a | Memeriksa ekspresi bersyarat yang tidak efisien | TIDAK | TIDAK |
use-any | n/a | Mengusulkan untuk mengganti interface{} dengan aliasnya any | TIDAK | TIDAK |
datarace | n/a | Tempat data potensial | TIDAK | TIDAK |
comment-spacings | []rangkaian | Memperingatkan komentar cacat | TIDAK | TIDAK |
redundant-import-alias | n/a | Memperingatkan alias impor yang cocok dengan nama paket yang diimpor | TIDAK | TIDAK |
import-alias-naming | String atau peta [string] string (default untuk memungkinkan pola regex ^[az] [a-z0-9] {0,} $) | Konvensi di sekitar penamaan alias impor. | TIDAK | TIDAK |
enforce-map-style | String (default ke "apapun") | Menegakkan penggunaan make(map[type]type) yang konsisten atau map[type]type{} untuk inisialisasi peta. Tidak mempengaruhi konstruksi make(map[type]type, size) . | TIDAK | TIDAK |
enforce-slice-style | String (default ke "apapun") | Menegakkan penggunaan make([]type, 0) atau []type{} yang konsisten untuk inisialisasi irisan. Tidak mempengaruhi Konstruksi make(map[type]type, non_zero_len, or_non_zero_cap) . | TIDAK | TIDAK |
enforce-repeated-arg-type-style | String (default ke "apapun") | Menegakkan gaya yang konsisten untuk argumen berulang dan/atau jenis nilai pengembalian. | TIDAK | TIDAK |
max-control-nesting | int (default ke 5) | Menetapkan pembatasan untuk bersarang maksimum struktur kontrol. | TIDAK | TIDAK |
comments-density | int (default ke 0) | Menegakkan hubungan komentar / kode minimum | TIDAK | TIDAK |
file-length-limit | peta (opsional) | Menegakkan jumlah maksimum baris per file | TIDAK | TIDAK |
filename-format | ekspresi reguler (opsional) | Menegakkan pemformatan nama file | TIDAK | TIDAK |
redundant-build-tag | n/a | Memperingatkan tentang redundan // +build baris komentar | TIDAK | TIDAK |
use-errors-new | n/a | Bintik -bintik panggilan ke fmt.Errorf yang dapat diganti dengan errors.New | TIDAK | TIDAK |
Di sini Anda dapat menemukan bagaimana Anda dapat mengonfigurasi beberapa aturan yang ada:
var-naming Aturan ini menerima dua iris string, daftar izin dan daftar blocklist dari inisialisme. Secara default, aturan tersebut berperilaku persis sebagai alternatif di golint tetapi secara opsional, Anda dapat menenangkannya (lihat Golint/Lint/Issues/89)
[ rule . var-naming ]
arguments = [[ " ID " ], [ " VM " ]] Dengan cara ini, Revive tidak akan memperingatkan untuk pengidentifikasi yang disebut customId tetapi akan memperingatkan bahwa customVm harus disebut customVM .
Bagian ini mencantumkan semua formatter yang tersedia dan menyediakan tangkapan layar untuk masing -masing.


Formatter default menghasilkan output yang sama dengan golint .

Formatter polos menghasilkan output yang sama dengan formatter default dan menambahkan URL ke deskripsi aturan.

Formatter UNIX menghasilkan output yang sama dengan formatter default tetapi mengelilingi aturan di [] .

Formatter json menghasilkan output dalam format JSON.
Formatter ndjson menghasilkan output dalam format Newline Delimited JSON .
Formatter checkstyle menghasilkan output dalam format seperti checkstyle.
Formatter sarif menghasilkan output dalam sarif, untuk hasil analisis statis format pertukaran , format standar berbasis JSON untuk output alat analisis statis yang ditentukan dan dipromosikan oleh oasis.
Versi standar yang didukung saat ini adalah Sarif-V2.1.0.
Alat ini dapat diperluas dengan aturan atau format kustom. Bagian ini berisi informasi tambahan tentang cara mengimplementasikannya.
Untuk memperluas linter dengan aturan khusus Anda dapat mendorongnya ke repositori ini atau menggunakan revive sebagai perpustakaan (lihat di bawah)
Untuk menambahkan formatter khusus, Anda harus mendorongnya ke repositori ini atau memperparahnya. Hal ini disebabkan oleh dukungan -buildmode=plugin yang hanya berfungsi di Linux (dengan masalah yang diketahui).
Setiap aturan perlu mengimplementasikan antarmuka lint.Rule :
type Rule interface {
Name () string
Apply ( * File , Arguments ) [] Failure
} Jenis Arguments adalah alias dari []interface{} . Argumen aturan disahkan dari file konfigurasi.
Mari kita misalkan kita telah mengembangkan aturan yang disebut BanStructNameRule yang melarang kita untuk menyebutkan struktur dengan pengidentifikasi yang diberikan. Kami dapat mengatur pengidentifikasi terlarang dengan menggunakan file konfigurasi TOML:
[ rule . ban-struct-name ]
arguments = [ " Foo " ]Dengan cuplikan di atas kami:
ban-struct-name . Metode Name() aturan kami harus mengembalikan string yang cocok dengan ban-struct-name .Foo . Daftar argumen akan diteruskan untuk Apply(*File, Arguments) bersama dengan file target yang kami linting saat ini.Implementasi aturan sampel dapat ditemukan di sini.
revive sebagai Perpustakaan Jika aturan khusus untuk kasus penggunaan Anda (yaitu itu bukan kandidat yang baik untuk ditambahkan ke aturan revive ) Anda dapat menambahkannya ke linter Anda menggunakan revive sebagai mesin serat.
Kode berikut menunjukkan cara menggunakan revive di aplikasi Anda. Dalam contoh hanya satu aturan yang ditambahkan ( myRule ), tentu saja, Anda dapat menambahkan sebanyak yang Anda butuhkan. Aturan Anda dapat dikonfigurasi secara terprogram atau dengan file konfigurasi revive standar. Kumpulan aturan lengkap revive juga dapat ditindaklanjuti oleh aplikasi Anda.
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 { ... } Anda masih dapat melangkah lebih jauh dan menggunakan revive tanpa CLI, sebagai bagian dari perpustakaan Anda, atau CLI Anda:
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 { ... }Setiap formatter perlu mengimplementasikan antarmuka berikut:
type Formatter interface {
Format ( <- chan Failure , Config ) ( string , error )
Name () string
} Metode Format menerima saluran instance Failure dan konfigurasi aturan yang diaktifkan. Metode Name() harus mengembalikan string yang berbeda dari nama aturan yang sudah ada. String ini digunakan saat menentukan formatter saat memanggil alat revive CLI.
Untuk formatter sampel, lihatlah file ini.
Dibandingkan dengan golint , revive berkinerja lebih baik karena meletakkan file untuk setiap aturan individu menjadi goroutine yang terpisah. Berikut adalah tolok ukur kinerja dasar di MacBook Pro awal 2013 dijalankan di Kubernetes:
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 Perlu diingat bahwa jika Anda menggunakan aturan yang memerlukan pemeriksaan jenis, kinerja dapat turun ke 2x lebih cepat dari golint :
# type checking enabled
time revive kubernetes/... > /dev/null
real 0m26.211s
user 2m6.708s
sys 0m17.192sSaat ini, jenis pengecekan diaktifkan secara default. Jika Anda ingin menjalankan linter tanpa memeriksa jenis, hapus semua aturan yang diketik dari file konfigurasi.
Secara default, revive menentukan apakah akan mewarnai outputnya atau tidak berdasarkan apakah itu terhubung ke TTY atau tidak. Ini berfungsi untuk sebagian besar kasus penggunaan, tetapi mungkin tidak berperilaku seperti yang diharapkan jika Anda menggunakan revive dalam pipa perintah, di mana stdout sedang disalurkan ke perintah lain.
Untuk memaksa pewarnaan, tambahkan REVIVE_FORCE_COLOR=1 ke lingkungan yang Anda jalankan. Misalnya:
REVIVE_FORCE_COLOR=1 revive -formatter friendly ./... | tee revive.log| Mgechev | Chavacava | Denisvmedia | mfederowicz | xuri | Alexandear |
| ldez | Doniacld | Clivern | Morphy2k | Bernhardreisenberger | Dshemin |
| BUTUZOV | comdiv | Heynemann | gsamokovarov | Mdelah | Tymonx |
| Sina-Devel | Rawen17 | Dominiquelefevre | git-hulk | shmsr | ytnsym |
| Zimmski | Mapreal19 | CCE | Skaji | ccoveille | TAMIRD |
| Markelog | Mihaitodor | dvejmz | Abeltay | Damif94 | GROXX |
| Stephenbuttolph | Stephenbrown2 | lsytj0413 | Qascade | ridvansumset | rliebz |
| rdeusser | RMarku | rnikoopour | Rafamadriz | Paco0x | pa-m |
| Cinar | Natefinch | Nunnatsa | Michalhisim | Zeripath | y-yagi |
| TechknowloGick | Okhowang | MeGuy | Likyh | Kerneltravel | JMCKENZIEARK |
| haya14busa | Fregin | ydah | Willabides | Heyvito | Vincentbaron |
| scop | vkrol | Kirillsluchaev | Jarema | tartale | tmzane |
| felipedavid | eUank | Enuazisme | Juneezee | Echoix | Menghembeskan |
| petethepig | Dirk007 | Yangdiangzb | Derekperkins | Bboreham | Attiss |
| Hatamiarash7 | Aragur | Amincheloh | Kulti | Abirdcfly | Abhinav |
| r-ricci | mmcloughlin | Mathieu-aubin | Martinsirbe | Avorima | Moukublen |
| sangat berbusa | Johnrichardrinehart | dinding | Jefersonf | Jamesmaidment | Jalaziz |
| Grongor | mengikat | quasilyte | Davidhsingyuchen | gfariasalves-ionos | Gburanov |
| ginglis13 | Flesser |
Mit