เร็วกำหนดค่าได้ขยายได้ยืดหยุ่นและสวยงามสำหรับการเดินทาง การแทนที่ Golint Revive เป็นกรอบสำหรับการพัฒนากฎที่กำหนดเองและให้คุณกำหนดค่าที่กำหนดไว้ล่วงหน้าอย่างเข้มงวดสำหรับการปรับปรุงกระบวนการพัฒนาและการตรวจสอบรหัสของคุณ
var-namingrevive เป็นห้องสมุดgo install github.com/mgechev/revive@latestหรือรับการปฏิบัติการที่ปล่อยออกมาจากหน้ารีลีส
คุณสามารถติดตั้งสาขาหลัก (รวมถึงการกระทำครั้งสุดท้าย) ด้วย:
go install github.com/mgechev/revive@master เนื่องจากพฤติกรรมเริ่มต้นของ revive เข้ากันได้กับ golint โดยไม่ต้องให้ธงเพิ่มเติมใด ๆ ความแตกต่างที่คุณสังเกตเห็นคือการดำเนินการที่เร็วขึ้น
revive รองรับการตั้งค่าสถานะ -config ซึ่งค่าควรสอดคล้องกับไฟล์ TOML ที่อธิบายว่ากฎใดที่จะใช้สำหรับผ้าสำลีของ revive หากไม่ได้ให้ไว้แล้ว revive จะพยายามใช้ไฟล์ config ทั่วโลก (สันนิษฐานว่าอยู่ที่ $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 กับ Bazel ให้ดูกฎที่ Atlassian รักษาไว้
รองรับ VSCODE ใน VSCODE-GO
สนับสนุน Goland ผ่านผู้เฝ้าดูไฟล์
รองรับอะตอมผ่าน Linter-Revive
สนับสนุน VIM ผ่านการวิเคราะห์ความหนาแน่น/ALE
let g: ale_linters = {
' go ' : [ ' revive ' ],
}สนับสนุน NeoVim ผ่าน Null-LS.NVIM
require ( " null-ls " ). setup ({
sources = {
require ( " null-ls " ). builtins . diagnostics . revive
},
})CodeAc.io - บริการตรวจสอบรหัสอัตโนมัติรวมกับ GitHub, BitBucket และ Gitlab (แม้กระทั่งโฮสต์ตัวเอง) และช่วยให้คุณต่อสู้กับหนี้ทางเทคนิค ตรวจสอบคำตอบแบบดึงของคุณด้วย Revive โดยอัตโนมัติ (ฟรีสำหรับโครงการโอเพ่นซอร์ส)
ในการเปิดใช้งาน revive ใน golangci-lint คุณต้องเพิ่ม revive ในรายการของ Linters ที่เปิดใช้งาน:
# golangci-lint configuration file
linters :
enable :
- revive จากนั้น revive สามารถกำหนดค่าได้โดยการเพิ่มรายการไปยังส่วน linters-settings ของการกำหนดค่าตัวอย่างเช่น:
# 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"] การกำหนดค่าข้างต้นช่วยให้กฎสามข้อของ revive : อะตอม , จำกัด เส้นความยาว และ ข้อผิดพลาดที่ไม่ได้รับการจัดการ และส่งผ่านข้อโต้แย้งบางอย่างไปยังสองข้อสุดท้าย ส่วนการกำหนดค่าของเอกสารนี้ให้รายละเอียดเกี่ยวกับวิธีการกำหนดค่า revive โปรดทราบว่าในขณะที่การกำหนดค่า revive อยู่ใน Toml แต่ golangci-lint อยู่ใน Yaml
โปรดสังเกตว่าหากไม่มีการกำหนดค่าเป็นพิเศษ revive จะทำงานตามที่ go-lint ทำเช่นกฎ go-lint ทั้งหมดจะถูกเปิดใช้งาน (รายละเอียดตารางกฎที่มีอยู่คือกฎ go-lint คืออะไร) เมื่อมีการกำหนดค่าจะเปิดใช้งานเฉพาะกฎในการกำหนดค่าเท่านั้น
revive ยอมรับพารามิเตอร์บรรทัดคำสั่งต่อไปนี้:
-config [PATH] - พา ธ ไปยังไฟล์กำหนดค่าในรูปแบบ TOML, ค่าเริ่มต้นเป็น $HOME/revive.toml ถ้ามีอยู่
-exclude [PATTERN] - รูปแบบสำหรับไฟล์/ไดเรกทอรี/แพ็คเกจที่จะถูกแยกออกสำหรับผ้าสำลี คุณสามารถระบุไฟล์ที่คุณต้องการยกเว้นสำหรับผ้าสำลีเป็นชื่อแพ็คเกจ (เช่น github.com/mgechev/revive ) แสดงรายการเป็นไฟล์แต่ละไฟล์ (เช่น file.go ), ไดเรกทอรี (เช่น ./foo/... ) หรือการรวมกันของทั้งสาม หากไม่มีการระบุรูปแบบการยกเว้น vendor/... จะถูกแยกออกเป็นค่าเริ่มต้น
-formatter [NAME] - Formatter ที่จะใช้สำหรับเอาต์พุต รูปแบบที่มีอยู่ในปัจจุบันคือ:
default - จะส่งออกความล้มเหลวในลักษณะเดียวกับที่ golint ทำjson - ส่งออกความล้มเหลวในรูปแบบ JSONndjson - ส่งออกความล้มเหลวเป็นสตรีมในรูปแบบนิวไลน์ที่คั่นด้วย JSON (NDJSON)friendly - ส่งออกความล้มเหลวเมื่อพบ แสดงบทสรุปของความล้มเหลวทั้งหมดstylish - จัดรูปแบบความล้มเหลวในตาราง โปรดทราบว่ามันไม่ได้สตรีมเอาท์พุทดังนั้นจึงอาจถูกมองว่าช้ากว่าเมื่อเทียบกับคนอื่น ๆcheckstyle - เอาต์พุตความล้มเหลวในรูปแบบ XML ที่เข้ากันได้กับของ Java's CheckStyle -max_open_files - จำนวนสูงสุดของไฟล์เปิดในเวลาเดียวกัน ค่าเริ่มต้นเป็นไม่ จำกัด
-set_exit_status - ตั้งค่าสถานะการออกเป็น 1 หากพบปัญหาใด ๆ ให้เขียนทับ errorCode และ warningCode ในการกำหนดค่า
-version - รับเวอร์ชัน Revive
revive -config revive.toml -exclude file1.go -exclude file2.go -formatter friendly github.com/mgechev/revive package/...revive.tomlrevive จะละเว้น file1.go และ file2.gofriendlygithub.com/mgechev/revive และไฟล์ใน packageการใช้ความคิดเห็นคุณสามารถปิดใช้งาน Linter สำหรับไฟล์ทั้งหมดหรือช่วงของบรรทัดเท่านั้น:
//revive:disable
func Public () {}
//revive:enable ตัวอย่างด้านบนจะปิด revive ระหว่าง revive:disable และ revive:enable ความคิดเห็น หากคุณข้าม revive:enable Linter จะถูกปิดใช้งานสำหรับส่วนที่เหลือของไฟล์
ด้วย revive:disable-next-line และ revive:disable-line คุณสามารถปิด revive ได้ในบรรทัดรหัสเฉพาะ
คุณสามารถทำเช่นเดียวกันในระดับกฎ ในกรณีที่คุณต้องการปิดใช้งานเฉพาะกฎเฉพาะคุณสามารถใช้:
//revive:disable:unexported-return
func Public () private {
return private
}
//revive:enable:unexported-return ด้วยวิธีนี้ revive จะไม่เตือนคุณว่าคุณกำลังส่งคืนวัตถุประเภทที่ไม่ได้รับการคัดเลือกจากฟังก์ชั่นที่ส่งออก
คุณสามารถจัดทำเอกสารว่าทำไมคุณถึงปิดใช้งาน linter โดยการเพิ่มข้อความต่อท้ายในคำสั่งเช่น
//revive:disable Until the code is stable //revive:disable:cyclomatic High complexity score but easy to understand นอกจากนี้คุณยังสามารถกำหนดค่า revive เพื่อบังคับใช้เอกสารการปิดการใช้งานของ linter โดยการเพิ่มคำสั่งโดยการเพิ่มคำสั่ง
[ 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 สิ่งนี้จะใช้ไฟล์ configuration defaults.toml , formatter default และจะเรียกใช้ผ้าสำลีเหนือแพ็คเกจ github.com/mgechev/revive
revive -config config.toml -formatter friendly github.com/mgechev/revive สิ่งนี้จะใช้ config.toml , formatter friendly และจะเรียกใช้ผ้าสำลีเหนือแพ็คเกจ 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 ]คุณยังสามารถตั้งค่าไม่รวมเฉพาะสำหรับแต่ละกฎ
มันเป็นทางเลือกสำหรับโปรแกรม -exclude โลก 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 "" รูปแบบ (ว่าง) ไม่รวมอะไรเลยหมายเหตุ: อย่ายุ่งกับ
excludeที่สามารถใช้ในระดับบนสุดของไฟล์ TOML ซึ่งหมายถึง "ไม่รวมรูปแบบแพ็คเกจ" ไม่ใช่ "ยกเว้นรูปแบบไฟล์"
รายการกฎที่มีอยู่ทั้งหมด กฎที่พอร์ตจาก golint จะไม่เปลี่ยนแปลงและระบุไว้ในคอลัมน์ golint
| ชื่อ | การกำหนดค่า | คำอธิบาย | golint | ที่พิมพ์ออกมา |
|---|---|---|---|---|
context-keys-type | N/A | ไม่อนุญาตให้ใช้ประเภทพื้นฐานใน context.WithValue | ใช่ | ใช่ |
time-equal | N/A | แนะนำให้ใช้ time.Time.Equal เท่ากันแทน == และ != สำหรับเวลาตรวจสอบความเท่าเทียมกัน | เลขที่ | ใช่ |
time-naming | N/A | การประชุมรอบ ๆ การตั้งชื่อตัวแปรเวลา | ใช่ | ใช่ |
unchecked-type-assertions | N/A | disallows พิมพ์การยืนยันโดยไม่ตรวจสอบผลลัพธ์ | เลขที่ | ใช่ |
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 & Blocklist ของ Iniphinisms | กฎการตั้งชื่อ | ใช่ | เลขที่ |
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 | มองหาการออกจากโปรแกรมใน funcs นอกเหนือจาก main() หรือ init() | เลขที่ | เลขที่ |
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 | เตือนว่ามีการใช้ช่วงช่วงในการปิดที่จัดส่งเป็น goroutine | เลขที่ | เลขที่ |
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) | ระบุจำนวนอักขระสูงสุดในบรรทัด | เลขที่ | เลขที่ |
call-to-gc | N/A | เตือนการโทรอย่างชัดเจนไปยังนักสะสมขยะ | เลขที่ | เลขที่ |
duplicated-imports | N/A | มองหาแพ็คเกจที่นำเข้าสองครั้งขึ้นไป | เลขที่ | เลขที่ |
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-format | แผนที่ | เตือนเกี่ยวกับตัวอักษรสตริงที่เฉพาะ | เลขที่ | เลขที่ |
early-return | [] สตริง | สปอตข้อความที่มีคำสั่งที่อาจมีการกลับหัวเพื่อลดการทำรังเพื่อลดการทำรัง | เลขที่ | เลขที่ |
unconditional-recursion | N/A | เตือนการเรียกใช้ฟังก์ชันที่จะนำไปสู่การเรียกซ้ำที่ไม่มีที่สิ้นสุด (โดยตรง) | เลขที่ | เลขที่ |
identical-branches | N/A | สปอตคำสั่ง if-then-else ที่มีเหมือน then และ else สาขา | เลขที่ | เลขที่ |
defer | แผนที่ | เตือน Gotchas ที่เลื่อนออกไป | เลขที่ | เลขที่ |
unexported-naming | N/A | เตือนสัญลักษณ์ที่ไม่ได้ส่งออกอย่างผิด ๆ | เลขที่ | เลขที่ |
function-length | int, int (ค่าเริ่มต้นถึง 50 คำสั่ง 75 บรรทัด) | เตือนฟังก์ชั่นที่เกินข้อความหรือบรรทัดสูงสุด | เลขที่ | เลขที่ |
nested-structs | N/A | เตือนโครงสร้างภายในโครงสร้าง | เลขที่ | เลขที่ |
useless-break | N/A | เตือนเกี่ยวกับคำสั่ง break ที่ไร้ประโยชน์ในกรณีที่มีข้อ | เลขที่ | เลขที่ |
banned-characters | [] สตริง (ค่าเริ่มต้นเป็น [] สตริง {}) | ตรวจสอบอักขระที่ถูกแบนในตัวระบุ | เลขที่ | เลขที่ |
optimize-operands-order | N/A | ตรวจสอบการแสดงออกที่ไม่มีเงื่อนไข | เลขที่ | เลขที่ |
use-any | N/A | เสนอให้แทนที่ interface{} ด้วยนามแฝง any | เลขที่ | เลขที่ |
datarace | N/A | สปอตฐานข้อมูลที่มีศักยภาพ | เลขที่ | เลขที่ |
comment-spacings | [] สตริง | เตือนความคิดเห็นที่ไม่ถูกต้อง | เลขที่ | เลขที่ |
redundant-import-alias | N/A | เตือนเกี่ยวกับนามแฝงนำเข้าที่ตรงกับชื่อแพ็คเกจที่นำเข้า | เลขที่ | เลขที่ |
import-alias-naming | สตริงหรือแผนที่ [สตริง] สตริง (ค่าเริ่มต้นที่จะอนุญาตรูปแบบ regex ^[az] [a-z0-9] {0,} $) | การประชุมรอบการตั้งชื่อของนามแฝงนำเข้า | เลขที่ | เลขที่ |
enforce-map-style | สตริง (ค่าเริ่มต้นเป็น "ใด ๆ ") | บังคับใช้การใช้งานที่สอดคล้องกันของ make(map[type]type) หรือ map[type]type{} สำหรับการเริ่มต้นแผนที่ ไม่ส่งผลกระทบต่อ make(map[type]type, size) การก่อสร้าง | เลขที่ | เลขที่ |
enforce-slice-style | สตริง (ค่าเริ่มต้นเป็น "ใด ๆ ") | บังคับใช้การใช้งานที่สอดคล้องกันของ make([]type, 0) หรือ []type{} สำหรับการเริ่มต้นชิ้น ไม่ส่งผลกระทบต่อ make(map[type]type, non_zero_len, or_non_zero_cap) | เลขที่ | เลขที่ |
enforce-repeated-arg-type-style | สตริง (ค่าเริ่มต้นเป็น "ใด ๆ ") | บังคับใช้สไตล์ที่สอดคล้องกันสำหรับการโต้แย้งซ้ำและ/หรือประเภทค่าคืน | เลขที่ | เลขที่ |
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 | จุดโทรไปยัง fmt.Errorf ที่สามารถแทนที่ด้วย errors.New | เลขที่ | เลขที่ |
ที่นี่คุณสามารถค้นหาวิธีการกำหนดค่ากฎที่มีอยู่:
var-naming กฎนี้ยอมรับสตริงสองชิ้น ได้แก่ Allowlist และรายการบล็อกของการเริ่มต้น โดยค่าเริ่มต้นกฎจะทำงานเป็นทางเลือกใน golint แต่เป็นทางเลือกคุณสามารถผ่อนคลายได้ (ดู Golint/Lint/ปัญหา/89)
[ rule . var-naming ]
arguments = [[ " ID " ], [ " VM " ]] ด้วยวิธีนี้ Revive จะไม่เตือนตัวระบุที่เรียกว่า customId แต่จะเตือนว่า customVm ควรเรียกว่า customVM
ส่วนนี้แสดงรายการฟอร์ทเตอร์ที่มีอยู่ทั้งหมดและให้ภาพหน้าจอสำหรับแต่ละรูปแบบ


Formatter เริ่มต้นสร้างผลลัพธ์เช่นเดียวกับ golint

รูปแบบธรรมดาสร้างผลลัพธ์เช่นเดียวกับตัวฟอร์มเริ่มต้นและผนวก URL เข้ากับคำอธิบายกฎ

UNIX Formatter สร้างผลลัพธ์เช่นเดียวกับ Formatter เริ่มต้น แต่ล้อมรอบกฎใน []

Formatter json สร้างผลลัพธ์ในรูปแบบ JSON
Formatter ndjson สร้างผลลัพธ์ในรูปแบบ Newline Delimited JSON
รูปแบบ checkstyle สร้างเอาต์พุตในรูปแบบที่คล้ายกับสไตล์การตรวจสอบ
sarif Formatter สร้างผลลัพธ์ใน Sarif สำหรับ รูปแบบการวิเคราะห์แบบคงที่รูปแบบการแลกเปลี่ยนรูป แบบมาตรฐาน JSON สำหรับเอาต์พุตของเครื่องมือการวิเคราะห์แบบคงที่ที่กำหนดและส่งเสริมโดย OASIS
รุ่นที่รองรับปัจจุบันของมาตรฐานคือ Sarif-V2.1.0
เครื่องมือสามารถขยายได้ด้วยกฎที่กำหนดเองหรือ Formatters ส่วนนี้มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้งานดังกล่าว
ในการขยาย Linter ด้วยกฎที่กำหนดเองคุณสามารถส่งไปยังที่เก็บนี้หรือใช้ revive เป็นไลบรารี (ดูด้านล่าง)
ในการเพิ่มรูปแบบที่กำหนดเองคุณจะต้องผลักมันไปยังที่เก็บนี้หรือส้อม นี่เป็นเพราะการสนับสนุนปลั๊กอินที่ จำกัด -buildmode=plugin ซึ่งทำงานบน Linux เท่านั้น (พร้อมปัญหาที่ทราบ)
แต่ละกฎต้องใช้อินเทอร์เฟซ 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-nameFoo รายการอาร์กิวเมนต์จะถูกส่งผ่านไป Apply(*File, Arguments) พร้อมกับไฟล์เป้าหมายที่เราเป็นผ้าสำลีในปัจจุบันการใช้กฎตัวอย่างสามารถพบได้ที่นี่
revive เป็นห้องสมุด หากกฎมีความเฉพาะเจาะจงกับกรณีการใช้งานของคุณ (เช่นไม่ใช่ตัวเลือกที่ดีที่จะเพิ่มในชุดกฎของ revive ) คุณสามารถเพิ่มลงใน linter ของคุณโดยใช้ revive เป็นเครื่องยนต์ผ้าสำลี
รหัสต่อไปนี้แสดงวิธีใช้ revive ในแอปพลิเคชันของคุณ ในตัวอย่างมีเพียงกฎเดียวเท่านั้นที่จะถูกเพิ่ม ( 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 { ... } คุณยังสามารถก้าวต่อไปและใช้ revive ได้โดยไม่ต้องใช้ CLI เป็นส่วนหนึ่งของห้องสมุดหรือ CLI ของคุณ:
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 จะทำงานได้ดีขึ้นเพราะมันผ้าคลุมไฟล์สำหรับแต่ละกฎแต่ละตัวเป็น goroutine แยกต่างหาก นี่คือมาตรฐานประสิทธิภาพพื้นฐานสำหรับ MacBook Pro ต้นปี 2013 Run on 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 โปรดทราบว่าหากคุณใช้กฎที่ต้องมีการตรวจสอบประเภทประสิทธิภาพอาจลดลงได้เร็วกว่า golint 2x:
# type checking enabled
time revive kubernetes/... > /dev/null
real 0m26.211s
user 2m6.708s
sys 0m17.192sขณะนี้การตรวจสอบประเภทถูกเปิดใช้งานโดยค่าเริ่มต้น หากคุณต้องการเรียกใช้ linter โดยไม่ต้องตรวจสอบประเภทให้ลบกฎที่พิมพ์ทั้งหมดออกจากไฟล์การกำหนดค่า
โดยค่าเริ่มต้น revive จะกำหนดว่าจะระบายสีออกหรือไม่โดยขึ้นอยู่กับว่ามันเชื่อมต่อกับ TTY หรือไม่ สิ่งนี้ใช้งานได้สำหรับกรณีการใช้งานส่วนใหญ่ แต่อาจไม่ประพฤติตามที่คาดไว้หากคุณใช้ revive ในท่อของคำสั่งโดยที่ stdout กำลังถูกส่งไปยังคำสั่งอื่น
ในการบังคับให้ทำสีให้เพิ่ม REVIVE_FORCE_COLOR=1 ไปยังสภาพแวดล้อมที่คุณใช้งานตัวอย่างเช่น:
REVIVE_FORCE_COLOR=1 revive -formatter friendly ./... | tee revive.log| mgechev | ชาวาวาวา | denisvmedia | mfederowicz | Xuri | อเล็กซานเดอร์ |
| Ldez | doniacld | คู่หู | morphy2k | Bernhardreisenberger | dshemin |
| Butuzov | ความสงบ | เฮย์นันน์ | Gsamokovarov | Mdelah | Tymonx |
| Sina Devel | rawen17 | Dominiquelefevre | git-hulk | SHMSR | ytnsym |
| Zimmski | MAPREAL19 | CCE | Skaji | Ccoveille | tamird |
| มาร์กเซลล็อก | Mihaitodor | dvejmz | ซุ่มซ่าม | damif94 | Groxx |
| สตีเฟ่นบัททอลฟ์ | Stephenbrown2 | LSYTJ0413 | qascade | ridvansumset | Rliebz |
| คนเดินเล่น | rmarku | rnikoopour | Rafamadriz | paco0x | PA-M |
| โรงภาพยนตร์ | เนทฟินช์ | นันนาสซา | Michalhisim | Zeripath | Y-Yagi |
| Techknowlogick | Okhowang | meanguy | ชอบ | เคอร์เนล | jmckenzieark |
| Haya14busa | เฟริน | Ydah | วิลลาไบด์ | Heyvito | Vincentbaron |
| หอยทาก | vkrol | Kirillsluchaev | jarema | ทาร์เทล | tmzane |
| felipedavid | Euank | ความนิยม | juneezee | เสียงสะท้อน | ส่งเสียงออกมา |
| petethepig | Dirk007 | Yangdiangzb | derekperkins | Bboreham | ทิพย์ |
| Hatamiarash7 | อารากูร์ | Amincheloh | Kulti | abirdcfly | abhinav |
| R-Ricci | mmcloughlin | Mathieu-Aubin | Martinsirbe | Avorima | moukoublen |
| น่ากลัวมาก | johnrichardrinehart | กำแพง | jefersonf | Jamesmaidment | Jalaziz |
| ความอึดอัด | ผูก | ค้ำจุน | Davidhsingyuchen | Gfariasalves-ionos | Gburanov |
| Ginglis13 | ผู้เหี่ยวแห้ง |
มิกซ์