protolint-mcp

by yoheimuta

Integrations

  • Supports running protolint in GitHub workflows through various actions including github/super-linter, plexsystems/protolint-action, and yoheimuta/action-protolint

  • Supports JetBrains GoLand through the intellij-protolint plugin for Protocol Buffer linting

  • Integrates with JetBrains IDEs through the intellij-protolint plugin for Protocol Buffer linting

Protolint

protolint ist das steckbare Dienstprogramm zum Lintisieren/Fixieren von Protokollpufferdateien (proto2+proto3):

  • Läuft schnell, da ohne Compiler funktioniert.
  • Der offizielle Styleguide ist leicht zu befolgen. Die Regeln und der Styleguide entsprechen einander genau.
    • Fixer behebt automatisch alle möglichen Verstöße gegen den offiziellen Styleguide.
  • Ermöglicht das Deaktivieren von Regeln mit einem Kommentar in einer Protokollpufferdatei.
    • Es ist nützlich für Projekte, bei denen die API-Kompatibilität gewahrt werden muss, während gleichzeitig der Styleguide so weit wie möglich durchgesetzt werden muss.
    • Einige Regeln können automatisch deaktiviert werden, indem Kommentare zu den festgestellten Verstößen eingefügt werden.
  • Lädt Plugins, um Ihre benutzerdefinierten Lint-Regeln zu enthalten.
  • Auf alle Regeln getestet.
  • Viele Integrationsunterstützungen.
    • Protokoll-Plugin
    • Editor-Integration
    • GitHub-Aktion
    • CI-Integration

Demo

Sobald der MCP-Server konfiguriert ist, können Sie beliebige MCP-Clients wie Claude Desktop bitten, Ihre Protocol Buffer-Dateien wie folgt zu linten und zu reparieren:

Außerdem funktioniert vim-protolint wie folgt.

MCP-Server

Protolint unterstützt jetzt das Model Context Protocol (MCP) , wodurch KI-Modelle direkt mit Protolint interagieren können.

Verwendung

protolint --mcp

Eine ausführliche Dokumentation zur Verwendung und Integration der MCP-Serverfunktionalität von Protolint finden Sie in der MCP-Dokumentation .

Installation

Über Homebrew

Protolint kann für Mac oder Linux mit Homebrew über den Tap yoheimuta/protolint installiert werden.

brew tap yoheimuta/protolint brew install protolint

Da Homebrew-Core protolint, können Sie es auch mit „ brew install protolint. Dies ist der standardmäßig installierte Tap. Er ist einfacher, wird aber nicht vom selben Autor gepflegt. Um ihn aktuell zu halten, empfehle ich, zuerst brew tap yoheimuta/protolint auszuführen.

Über GitHub-Releases

Sie können auch eine vorgefertigte Binärdatei von dieser Versionsseite herunterladen:

Im Downloadbereich jeder Version finden Sie vorgefertigte Binärdateien in .tar.gz-Paketen.

Verwenden Sie das gepflegte Docker-Image

Protolint liefert ein Docker-Image yoheimuta/protolint , mit dem Sie Protolint als Teil Ihres Docker-Workflows verwenden können.

❯❯❯ docker run --volume "$(pwd):/workspace" --workdir /workspace yoheimuta/protolint lint _example/proto [_example/proto/invalidFileName.proto:1:1] File name should be lower_snake_case.proto. [_example/proto/issue_88/oneof_options.proto:11:5] Found an incorrect indentation style " ". " " is correct. [_example/proto/issue_88/oneof_options.proto:12:5] Found an incorrect indentation style " ". " " is correct.

Aus der Quelle

Die Binärdatei kann aus dem Quellcode installiert werden, sofern Go verfügbar ist. Ich empfehle jedoch die Verwendung einer der vorgefertigten Binärdateien, da diese keine Versionsinformationen enthalten.

go install github.com/yoheimuta/protolint/cmd/protolint@latest

Innerhalb von JavaScript / TypeScript

Sie können protolint mit Ihrem Node.js-Paketmanager wie npm oder yarn verwenden.

$ npm install protolint --save-dev

Dadurch wird Ihrem lokalen package.json ein Verweis auf eine Entwicklungsabhängigkeit hinzugefügt.

Während der Installation wird das Skript install.mjs aufgerufen. Es lädt das passende protolint von GitHub herunter. Wie bei @electron/get können Sie den Download mithilfe der folgenden Umgebungsvariablen umgehen:

UmgebungsvariableStandardwertBeschreibung
PROTOLINT_MIRROR_HOSThttps://github.comHTTP/Webserver-Basis-URL, auf der die Binärdateien gehostet werden
PROTOLINT_MIRROR_REMOTE_PATHyoheimuta/protolint/download/releasesPfad zu den Archiven auf dem Remote-Host
PROTOLINT_MIRROR_USERNAMEHTTP Basic-Auth-Benutzername
PROTOLINT_MIRROR_PASSWORDHTTP-Basisauthentifizierungskennwort
PROTOLINT_PROXYHTTP(S)-Proxy mit optionalen Authentifizierungsdaten

Innerhalb des Remote-Pfads müssen die Archive von der Release -Seite gespiegelt werden.

Danach können Sie npx protolint (mit allen bereitgestellten Protolint-Argumenten) in Ihren Dev-Skripten verwenden.

{ ... "scripts": { "protoc": "....", "preprotoc": "npx protolint" }, ... }

Sie können Ihrem package.json einen protolint Knoten hinzufügen, der den Inhalt von protolint.yml unterhalb des lint Knotens enthalten kann, d. h. das Stammelement der Konfiguration wird protolint sein.

Wenn Sie eine Ausgabe erhalten möchten, die mit dem TSC-Compiler übereinstimmt, verwenden Sie Reporter tsc .

Innerhalb von Python-Projekten

Sie können protolint als Linter in Ihren Python-Projekten verwenden. Das Wheel protolint-bin auf pypi enthält die vorkompilierten Binärdateien für verschiedene Plattformen. Fügen Sie einfach die gewünschte Version zu Ihrer pyproject.toml oder requirements.txt hinzu.

Die heruntergeladenen Wheels enthalten die kompilierten Go-Binärdateien für protolint und protoc-gen-protolint . Ihre Plattform muss mit den unterstützten Binärplattformen kompatibel sein.

Sie können die Linter-Konfiguration zum Paket tools.protolint in pyproject.toml hinzufügen.

Verwendung

protolint lint example.proto example2.proto # file mode, specify multiple specific files protolint lint . # directory mode, search for all .proto files recursively protolint . # same as "protolint lint ." protolint lint -config_path=path/to/your_protolint.yaml . # use path/to/your_protolint.yaml protolint lint -config_dir_path=path/to . # search path/to for .protolint.yaml protolint lint -fix . # automatically fix some of the problems reported by some rules protolint lint -fix -auto_disable=next . # this is preferable when you want to fix problems while maintaining the compatibility. Automatically fix some problems and insert disable comments to the other problems. The available values are next and this. protolint lint -auto_disable=next . # automatically insert disable comments to the other problems. protolint lint -v . # with verbose output to investigate the parsing error protolint lint -no-error-on-unmatched-pattern . # exits with success code even if no file is found (file & directory mode) protolint lint -reporter junit . # output results in JUnit XML format protolint lint -output_file=path/to/out.txt # output results to path/to/out.txt protolint lint -plugin ./my_custom_rule1 -plugin ./my_custom_rule2 . # run custom lint rules. protolint list # list all current lint rules being used protolint version # print protolint version protolint --version # print protolint version (global flag) protolint -v # print protolint version (when used as the only argument)

Protolint erfordert standardmäßig keine Konfiguration und sollte für die meisten Projekte sofort funktionieren.

Versionskontrollintegration

Protolint ist als Pre-Commit- Hook verfügbar. Fügen Sie diesen zu Ihrer .pre-commit-config.yaml in Ihrem Repository hinzu, um Protolint mit Go auszuführen:

repos: - repo: https://github.com/yoheimuta/protolint rev: <version> # Select a release here like v0.44.0 hooks: - id: protolint

oder verwenden Sie alternativ dies, um Protolint mit Docker auszuführen:

repos: - repo: https://github.com/yoheimuta/protolint rev: <version> # Select a release here like v0.44.0 hooks: - id: protolint-docker

Editor-Integration

Visual Studio Code

JetBrains IntelliJ IDEA, GoLand, WebStorm, PHPStorm, PyCharm …

Vim ( ALE-Engine )

Vim ( Syntastisch )

GitHub-Aktion

Eine GitHub-Aktion zum Ausführen von Protolint in Ihren Workflows

CI-Integration

Jenkins-Plugins

Umgebungsspezifische Ausgabe

Es ist möglich, Ihr Linting entsprechend der Formatierung der CI/CD-Umgebung zu formatieren. Die Umgebung muss mithilfe des Ausgabeformats festgelegt werden. Aktuell wird folgende Ausgabe realisiert:

UmfeldBefehlszeilenwertBeschreibungBeispiel
Github-Aktionenci-ghGithub-Hilfe::warning file=example.proto,line=10,col=20,title=ENUM_NAMES_UPPER_CAMEL_CASE::EnumField name \"SECOND.VALUE\" must be CAPITALS_WITH_UNDERSCORES
Azure DevOpsci-azAzure DevOps-Hilfe##vso[task.logissue type=warning;sourcepath=example.proto;linenumber=10;columnnumber=20;code=ENUM_NAMES_UPPER_CAMEL_CASE;]EnumField name \"SECOND.VALUE\" must be CAPITALS_WITH_UNDERSCORES
Gitlab CI/CDci-glabReverse Engineering aus BeispielenWARNING: ENUM_NAMES_UPPER_CAMEL_CASE example.proto(10,20) : EnumField name \"SECOND.VALUE\" must be CAPITALS_WITH_UNDERSCORES

Sie können auch den allgemeinen ci Formatierer verwenden, der einen allgemeinen Problem-Matcher erstellt.

Mit dem Wert ci-env können Sie die Vorlage aus den folgenden Umgebungsvariablen angeben:

UmgebungsvariablePrioritätBedeutung
PROTOLINT_CIREPORTER_TEMPLATE_STRING1Zeichenfolge, die eine Go-Vorlage enthält
PROTOLINT_CIREPORTER_TEMPLATE_FILE2Pfad zu einer Datei, die eine Go-Vorlage enthält

Der resultierende Zeilenumbruch darf nicht hinzugefügt werden, da er automatisch hinzugefügt wird.

Die folgenden Felder sind verfügbar:

Severity : Der Schweregrad als Zeichenfolge (entweder Hinweis, Warnung oder Fehler)

File : Pfad zur Datei, die den Fehler enthält

Line : Zeile innerhalb der file , die den Fehler enthält (Startposition)

Column : Spalte innerhalb der file , die den Fehler enthält (Startposition)

Rule : Der Name der Regel, die fehlerhaft ist

Message : Die Fehlermeldung, die den Fehler beschreibt

Erstellen einer Ausgabedatei und eines CI/CD-Fehlerstreams

Sie können eine spezifische Ausgabe erstellen, die zu Ihrer CI/CD-Umgebung passt, und auch eine Ausgabedatei erstellen, z. B. für Ihre statischen Codeanalysetools wie GitHub CodeQL oder SonarQube.

Dies kann durch Hinzufügen des Flags --add-reporter erreicht werden. Beachten Sie, dass der Wert im Format <reporter-name>:<output-file-path> (ohne < und > ) angegeben werden muss.

$ protolint --reporter ci-gh --add-reporter sarif:/path/to/my/output.sarif.json proto/*.proto

Verwendung als Protokoll-Plugin

Protolint verwaltet außerdem die Binärdatei protoc-gen-protolint , die die Lint-Funktionalität als Protoc-Plugin ausführt. Weitere Informationen finden Sie unter cmd/protoc-gen-protolint/README.md .

Dies ist in Situationen nützlich, in denen Sie bereits über einen Protokoll-Plugin-Workflow verfügen.

Anruf vom Go-Code

Sie können Protolint auch aus Go-Code verwenden. Weitere Informationen finden Sie in der Go-Dokumentation und in lib/lint_test.go .

args := []string{"-config_path", "path/to/your_protolint.yaml", "."} var stdout bytes.Buffer var stderr bytes.Buffer err := lib.Lint(test.inputArgs, &stdout, &stderr)

Regeln

Siehe internal/addon/rules im Detail.

Der Regelsatz lautet wie folgt:

  • Offizieller Style Guide . Standardmäßig aktiviert. Regelverstöße können durch Anhängen der Option -fix behoben werden.
  • Inoffizieller Style Guide. Standardmäßig ist diese Regel deaktiviert. Sie können jede Regel mit .protolint.yaml aktivieren.

Mit der Option -fix in der Befehlszeile können alle von behebbaren Regeln gemeldeten Probleme automatisch behoben werden. Siehe „Behebbare Spalten“ weiter unten.

Mit der Option -auto_disable in der Kommandozeile können Sie alle von Auto-Disable-Regeln gemeldeten Probleme automatisch deaktivieren. Diese Funktion ist hilfreich, wenn die Behebung bestehender Verstöße die Kompatibilität beeinträchtigt. Siehe AutoDisable-Spalten weiter unten.

  • *1: Diese Regeln unterstützen AutoDisable nicht, da die Fixes ihre Kompatibilität nicht beeinträchtigen. Sie sollten Protolint mit -fix ausführen.
OffiziellReparierbarAutoDisableAUSWEISZweck
JaENUM_FIELD_NAMES_PREFIXÜberprüft, ob den Enumerationsfeldnamen das Präfix ENUM_NAME_UPPER_SNAKE_CASE vorangestellt ist.
JaENUM_FIELD_NAMES_UPPER_SNAKE_CASEÜberprüft, ob alle Enumerationsfeldnamen in GROSSBUCHSTABEN MIT UNTERSTREICHERN geschrieben sind.
JaENUM_FIELD_NAMES_ZERO_VALUE_END_WITHÜberprüft, ob die Nullwert-Enumeration das Suffix (z. B. „UNSPECIFIED“, „INVALID“) haben soll. Der Standardwert ist „UNSPECIFIED“. Sie können das spezifische Suffix mit .protolint.yaml konfigurieren.
JaENUM_NAMES_UPPER_CAMEL_CASEÜberprüft, ob alle Enumerationsnamen in CamelCase geschrieben sind (mit einem großen Anfangsbuchstaben).
Ja*1DATEINAMEN IN KLEINBUCHSTABENÜberprüft, ob alle Dateinamen lower_snake_case.proto lauten. Sie können die ausgeschlossenen Dateien mit .protolint.yaml konfigurieren.
JaFIELD_NAMES_LOWER_SNAKE_CASEÜberprüft, ob alle Feldnamen durch Unterstriche getrennte Namen sind.
Ja*1IMPORTS_SORTEDÜberprüft, ob alle Importe sortiert sind.
JaMESSAGE_NAMES_UPPER_CAMEL_CASEÜberprüft, ob alle Nachrichtennamen in CamelCase (mit großem Anfangsbuchstaben) geschrieben sind.
Ja*1BEFEHLÜberprüft, ob alle Dateien in der angegebenen Weise sortiert werden sollen.
Ja*1PAKETNAME IN KLEINBUCHSTABENÜberprüft, ob der Paketname nur Kleinbuchstaben enthalten darf.
JaRPC_NAMES_UPPER_CAMEL_CASEÜberprüft, ob alle RPC-Namen in CamelCase geschrieben sind (mit einem großen Anfangsbuchstaben).
JaSERVICE_NAMES_UPPER_CAMEL_CASEÜberprüft, ob alle Dienstnamen in CamelCase (mit großem Anfangsbuchstaben) geschrieben sind.
JaWIEDERHOLTE FELDNAMEN IM PLURALÜberprüft, ob wiederholte Feldnamen Pluralnamen sind.
Ja*1ZITAT_KONSISTENTÜberprüft, ob die Verwendung von Anführungszeichen für Zeichenfolgen konsistent ist. Standardmäßig werden doppelte Anführungszeichen verwendet. Sie können die spezifischen Anführungszeichen mit .protolint.yaml konfigurieren.
Ja*1EINZUGErzwingt einen einheitlichen Einrückungsstil. Der Standardstil besteht aus zwei Leerzeichen. Das Einfügen entsprechender Zeilenumbrüche wird ebenfalls standardmäßig erzwungen. Sie können die Details mit .protolint.yaml konfigurieren.
Ja*1PROTO3_FIELDS_AVOID_REQUIREDÜberprüft, ob alle Felder für Proto3 als erforderlich eingestuft werden.
Ja_PROTO3_GRUPPEN_VERMEIDENÜberprüft, ob für Proto3 alle Gruppen vermieden werden sollten.
Ja_*1MAX_LINE_LENGTHErzwingt eine maximale Zeilenlänge. Die Zeilenlänge wird durch die Anzahl der Unicode-Zeichen in der Zeile definiert. Der Standardwert beträgt 80 Zeichen. Sie können die Details mit .protolint.yaml konfigurieren.
NEIN_-SERVICE_NAMES_END_WITHErzwingt ein konsistentes Suffix für Dienstnamen. Sie können das spezifische Suffix mit .protolint.yaml konfigurieren.
NEIN_-FELDNAMEN _ SCHLIESSEN PRÄPOSITIONEN AUSÜberprüft, ob alle Feldnamen Präpositionen enthalten (z. B. „für“, „während“, „um“). Sie können die spezifischen Präpositionen und ausgeschlossenen Schlüsselwörter mit .protolint.yaml konfigurieren.
NEIN_-MESSAGE_NAMES_EXCLUDE_PREPOSITIONSÜberprüft, ob Nachrichtennamen keine Präpositionen enthalten (z. B. „Mit“, „Für“). Sie können die spezifischen Präpositionen und ausgeschlossenen Schlüsselwörter mit .protolint.yaml konfigurieren.
NEIN_-RPC_NAMES_CASEÜberprüft, ob alle RPC-Namen der angegebenen Konvention entsprechen. Sie müssen die spezifische Konvention mit .protolint.yaml konfigurieren.
NEIN_-MESSAGES_HAVE_COMMENTÜberprüft, ob alle Nachrichten einen Kommentar enthalten. Sie können dies mit .protolint.yaml so konfigurieren, dass Kommentare im Golang-Stil erzwungen werden.
NEIN_-DIENSTE_HABEN_KOMMENTARÜberprüft, ob alle Dienste einen Kommentar haben. Sie können die Erzwingung von Golang-Style-Kommentaren mit .protolint.yaml konfigurieren.
NEIN_-RPCS_HAVE_COMMENTÜberprüft, ob alle RPS einen Kommentar haben. Sie können die Erzwingung von Kommentaren im Golang-Stil mit .protolint.yaml konfigurieren.
NEIN_-FELDER_HABEN_KOMMENTAREÜberprüft, ob alle Felder einen Kommentar enthalten. Sie können die Erzwingung von Kommentaren im Golang-Stil mit .protolint.yaml konfigurieren.
NEIN_-ENUMS_HAVE_COMMENTÜberprüft, ob alle Enumerationen einen Kommentar enthalten. Sie können die Erzwingung von Kommentaren im Golang-Stil mit .protolint.yaml konfigurieren.
NEIN_-ENUM_FIELDS_HAVE_COMMENTÜberprüft, ob alle Enumerationsfelder einen Kommentar enthalten. Sie können die Erzwingung von Kommentaren im Golang-Stil mit .protolint.yaml konfigurieren.
NEIN_-DATEI_HAT_KOMMENTARÜberprüft, ob eine Datei mit einem Dokumentkommentar beginnt.
NEIN_-SYNTAX_CONSISTENTÜberprüft, ob die Syntax einer angegebenen Version entspricht. Der Standardwert ist proto3. Sie können die Version mit .protolint.yaml konfigurieren.

Ich empfehle, dass Sie all_default: true in .protolint.yaml hinzufügen, da alle oben genannten Linter automatisch aktiviert werden, sodass Sie bei jeder Aktualisierung von Protolint immer den maximalen Nutzen daraus ziehen können.

Hier sind einige Beispiele, die zeigen, dass ein guter Stil standardmäßig aktiviert ist. - ist ein schlechter Stil, + ist ein guter Stil:

ENUM_FIELD_NAMES_PREFIX

enum FooBar { - UNSPECIFIED = 0; + FOO_BAR_UNSPECIFIED = 0; }

ENUM_FIELD_NAMES_UPPER_SNAKE_CASE

enum Foo { - firstValue = 0; + FIRST_VALUE = 0; - second_value = 1; + SECOND_VALUE = 1; }

ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH

enum Foo { - FOO_FIRST = 0; + FOO_UNSPECIFIED = 0; }

ENUM_NAMES_UPPER_CAMEL_CASE

- enum foobar { + enum FooBar { FIRST_VALUE = 0; SECOND_VALUE = 1; }

FIELD_NAMES_LOWER_SNAKE_CASE

message SongServerRequest { - required string SongName = 1; + required string song_name = 1; }

IMPORTS_SORTED

- import public "new.proto"; + import "myproject/other_protos.proto"; - import "myproject/other_protos.proto"; + import public "new.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto";

MESSAGE_NAMES_UPPER_CAMEL_CASE

- message song_server_request { + message SongServerRequest { required string SongName = 1; required string song_name = 1; }

BEFEHL

- option java_package = "com.example.foo"; - syntax = "proto3"; - package examplePb; - message song_server_request { } - import "other.proto"; + syntax = "proto3"; + package examplePb; + import "other.proto"; + option java_package = "com.example.foo"; + message song_server_request { }

PAKETNAME IN KLEINBUCHSTABEN

- package myPackage + package my.package

RPC_NAMES_UPPER_CAMEL_CASE

service FooService { - rpc get_something(FooRequest) returns (FooResponse); + rpc GetSomething(FooRequest) returns (FooResponse); }

RPC_NAMES_UPPER_CAMEL_CASE

- service foo_service { + service FooService { rpc get_something(FooRequest) returns (FooResponse); rpc GetSomething(FooRequest) returns (FooResponse); }

WIEDERHOLTE FELDNAMEN IM PLURAL

- repeated string song_name = 1; + repeated string song_names = 1;

EINZUG

enum enumAllowingAlias { UNKNOWN = 0; - option allow_alias = true; + option allow_alias = true; STARTED = 1; - RUNNING = 2 [(custom_option) = "hello world"]; + RUNNING = 2 [(custom_option) = "hello world"]; - } +}
- message TestMessage { string test_field = 1; } + message TestMessage { + string test_field = 1; +}

ZITAT_KONSISTENT

option java_package = "com.example.foo"; - option go_package = 'example'; + option go_package = "example";

Erstellen Ihrer benutzerdefinierten Regeln

Protolint ist der steckbare Linter, sodass Sie frei benutzerdefinierte Lint-Regeln erstellen können.

Ein vollständiges Beispielprojekt (auch bekannt als Plugin) ist in diesem Repo im Verzeichnis _example/plugin enthalten.

Reporter

Protolint verfügt über mehrere integrierte Reporter (auch Formatierer genannt), um das Erscheinungsbild der Lint-Ergebnisse zu steuern.

Sie können einen Reporter mit dem Flag -reporter in der Befehlszeile angeben. Beispielsweise verwendet -reporter junit den JUnit-Reporter.

Die integrierten Reporteroptionen sind:

  • einfach (Standard)
  • junit
  • json
  • Sarif
  • Sonar (generisches Problemformat von SonarQube)
  • Unix
  • tsc (kompatibel zum TypeScript-Compiler)

Konfigurieren

Regeln in einer Protokollpufferdatei deaktivieren

Regeln können mit einem Kommentar in einer Protokollpufferdatei im folgenden Format deaktiviert werden. Die Regeln bleiben bis zum Ende der Datei deaktiviert oder bis der Linter einen entsprechenden Aktivierungskommentar findet:

// protolint:disable <ruleID1> [<ruleID2> <ruleID3>...] ... // protolint:enable <ruleID1> [<ruleID2> <ruleID3>...]

Es ist auch möglich, einen Deaktivierungsbefehl zu ändern, indem :next oder :this angehängt wird, um den Befehl nur auf diese (aktuelle) bzw. die nächste Zeile anzuwenden.

Zum Beispiel:

enum Foo { // protolint:disable:next ENUM_FIELD_NAMES_UPPER_SNAKE_CASE firstValue = 0; // no error second_value = 1; // protolint:disable:this ENUM_FIELD_NAMES_UPPER_SNAKE_CASE THIRD_VALUE = 2; // spits out an error }

Wenn Sie die Befehlszeilenoption -auto_disable auf next oder this setzen, werden beim Erkennen von Problemen Deaktivierungsbefehle eingefügt.

Sie können die Option -fix zusammen angeben. Die Regeln, die auto_disable unterstützen, unterdrücken die Verstöße, die eine Schemainkompatibilität verursachen, anstatt sie zu beheben.

Konfigurationsdatei

Protolint kann mit einer Konfigurationsdatei namens .protolint.yaml betrieben werden.

Die Spezifikation der Konfigurationsdatei finden Sie unter _example/config/.protolint.yaml .

Protolint durchsucht standardmäßig automatisch das aktuelle Arbeitsverzeichnis nach der Konfigurationsdatei und die nachfolgenden übergeordneten Verzeichnisse bis hin zum Stammverzeichnis des Dateisystems. Mit dem Flag -config_dir_path kann das angegebene Verzeichnis durchsucht werden. Mit dem Flag --config_path kann auch die angegebene Datei durchsucht werden.

Beendigungscodes

Beim Lint-Testen von Dateien wird Protolint mit einem der folgenden Exitcodes beendet:

  • 0 : Das Linting war erfolgreich und es liegen keine Linting-Fehler vor.
  • 1 : Das Linting war erfolgreich und es liegt mindestens ein Linting-Fehler vor.
  • 2 : Das Linting war aufgrund aller anderen Fehler, wie z. B. Analyse-, internen und Laufzeitfehlern, nicht erfolgreich.

Motivation

Seit dem 20.12.2018 gibt es ähnliche Protobuf-Linter.

Eines davon ist ein Plug-in für den Protocol Buffers-Compiler von Google.

  • Wenn Sie die Dateien nur linten möchten, kann das Erstellen der Kompilierungsumgebung mühsam sein.
  • Und das Kompilieren der Dateien nimmt im Allgemeinen viel mehr Zeit in Anspruch als das Parsen der Dateien.

„Other“ ist ein Befehlszeilentool, das auch Protocol Buffer-Dateien lintet.

  • Obwohl es neben Lint noch viele andere Funktionen bietet, erscheint es für Benutzer, die nur den Linter möchten, umständlich.
  • Die Lint-Regel neigt dazu, eigensinnig zu sein.
  • Darüber hinaus stimmen die Regeln und der offizielle Styleguide nicht exakt überein. Es ist daher erforderlich, sowohl die Regeln als auch den Styleguide im Detail zu verstehen und die Regeln dann präzise zu kombinieren.

Andere Werkzeuge

Ich habe am 17.12.2019 einen Artikel geschrieben, in dem ich verschiedene Protocol Buffer Linters, einschließlich Protolint, verglichen habe.

Abhängigkeiten

Entwicklung

Freigeben

Um den Release-Prozess zu optimieren und menschliche Fehler zu reduzieren, ist im Repository ein release.sh -Skript enthalten. Dieses Skript automatisiert die Schritte zum Erstellen und Pushen eines neuen Release-Tags.

Anwendung

Führen Sie den folgenden Befehl aus, um eine neue Version zu erstellen:

bash release.sh <version> [message]

Lizenz

Die MIT-Lizenz (MIT)

Related MCP Servers

  • A
    security
    A
    license
    A
    quality
    dbt-mcp
    Last updated -
    16
    182
    Python
    Apache 2.0
    • Linux
    • Apple
  • A
    security
    A
    license
    A
    quality
    interactive-mcp
    Last updated -
    5
    705
    29
    TypeScript
    MIT License
    • Apple
    • Linux

View all related MCP servers

ID: n36s0xdbks