? Arguard
Linter für Go, die statische Anrufargumente gegen die Funktionswächter (AKA -Verträge) überprüft.
Beispiel
Nehmen wir an, Sie haben die folgende Funktion:
func div ( n , d float64 ) float64 {
if d == 0 {
panic ( "denominator must not be zero" )
}
return n / d
} Und dann nennst du es so:
Auch wenn wir userInput nicht kennen, können wir sehen, dass dieser Funktionsaufruf in der Laufzeit in Panik geraten wird, da das zweite Argument immer Null ist.
Der Linter findet und meldet solche Orte mit einer sicheren Teilcodeausführung und der schwarzen Magie.
? Installation
go install github.com/orsinium-labs/arguard@latest
Verwendung
Verfügbare Flaggen:
-
-contracts.follow-imports Mit anderen Worten, Vertragsverstöße (Wachmann) werden nur dann gemeldet, wenn die Funktion mit dem Vertrag und der Funktionsaufruf im selben analysierten Paket befindet. Nützlich für eine bessere Leistung . -
-contracts.report-contracts Nützlich für das Debuggen , um festzustellen, ob ein Vertrag vom Linter erkannt wurde oder nicht. -
-arguard.report-errors : Stellen Sie diese Flagge fest, um Fehler während der Vertragsausführung zu zeigen. Wenn Arguard einen Vertrag nicht ausführt, geht es nur weiter, ohne etwas zu melden. Nützlich zum Debuggen , um zu sehen, warum ein Vertragsfehler nicht gemeldet wurde.
? Qna
- ? Wie funktioniert es? Es gibt zwei Analysatoren im Inneren. Der erste erkennt im Code sicher zu exezierte Verträge (Guards). Der zweite erkennt Aufrufe zu Funktionen mit bekannten Verträgen, extrahiert statisch bekannte Argumente und führt Verträge aus, die mit Yaegi ausgeführt werden können.
- ? Was ist eine Wache (Vertrag)? Eine IF-Bedingung zu Beginn der Funktion (nur andere Verträge können vor sich gehen) mit einer sicheren Kontrollprüfung und dem Körper, der nur einen Fehler zurückgibt oder
panic aufruft. - ? Wie zuverlässig sind Ergebnisse? Wenn es einen Fehler meldet, gibt es höchstwahrscheinlich einen Fehler. Wenn es keinen Fehler meldet, kann es immer noch ein Fehler geben. Es ist ein Linter, kein formeller Prüfer.
- ⚖️ Wie stabil ist das Projekt? Eine statische Analyse in GO kann unordentlich sein, insbesondere wenn wir auch eine Teilcodeausführung durchführen. Der Linter könnte ausfallen, falsch sein oder nicht so schlau sein, wie er möglicherweise sein kann. Trotzdem ist es ein statischer Analysator, keine Produktionsabhängigkeit, daher sollte es sicher sein, ihn für jedes Projekt in jeder Umgebung zu verwenden. Denken Sie jedoch daran, dass es immer noch eine Teilcodeausführung gibt, sodass Sie ihn wahrscheinlich nicht auf nicht vertrauenswürdigem Code ausführen sollten, nur um sicher zu sein.
- ? Würde es Veränderungen brechen? Das Projekt folgt Semver. Jede Veröffentlichung, sogar ein Patch -Eins, kann jedoch mit der Meldung neuer Verstöße in Ihrem Code beginnen. In gewisser Weise kann jede Veröffentlichung brechen.
- ? Gibt es eine Golangci-Lint-Integration? Noch nicht, aber irgendwann wird es sein. Es ist einfach, jeglichen analyse angestrebten Streitabsinter mit Golangci-Lint zu integrieren, und Arguard ist analysegetrieben. Bleiben Sie dran.
- ✏️ Gibt es eine IDE -Integration? Noch nicht. Wenn wir Golangci-Lint-Integration haben, werden IDE-Integrationen kostenlos erhältlich sein.
- ? Ist das eine neue Idee? Das Projekt implementiert eines der Dinge, die sich um einen Vertragsbibliothek für das Design für das Design auswirken können. Deal selbst basiert auf der Weisheit der Generationen, siehe diese Zeitleiste.
- Gibt es eine Go -API, damit ich sie als Bibliothek verwenden kann? Ja. Das Analysepaket bietet eine native Möglichkeit, Analysatoren zu komponieren, und so können Sie das Projekt verwenden. In Main.go finden Sie ein Beispiel, wie Sie mehrere
analysis.Analyzer erstellen und komponieren können.Analyzer -Instanzen. - ? ? ️ Ist es aktiv gepflegt? Das Projekt hat in den besten Traditionen des Unix-Ways einen sehr kleinen und klar definierten Bereich. Ich könnte von Zeit zu Zeit darauf zurückkehren und neue interessante Ideen mitbringen, die ich in schlaflosen Nächten hatte, aber es gibt nichts, was ich täglich aufrechterhalten kann. Wenn es heute funktioniert, wird es dank der kurzen Liste der Abhängigkeiten und des GO 1 -Kompatibilitätsversprechens nicht abbrechen.
- ? Was ist, wenn ich einen Fehler gefunden habe? Geben Sie das Projekt auf, beheben Sie den Fehler, schreiben Sie einige Tests und öffnen Sie eine Pull -Anfrage. Normalerweise fusioniere und lasse ich Beiträge innerhalb eines Tages zusammen.