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는 Protocol Buffer 파일(proto2+proto3)을 위한 플러그형 린팅/수정 유틸리티입니다.
- 컴파일러 없이도 작동하므로 빠르게 실행됩니다.
- 공식 스타일 가이드를 따라 하기 쉽습니다. 규칙과 스타일 가이드가 서로 정확히 일치합니다.
- Fixer는 공식적인 스타일 가이드 위반 사항을 모두 자동으로 수정합니다.
- 프로토콜 버퍼 파일에 주석을 추가하여 규칙을 비활성화할 수 있습니다.
- 가능한 한 스타일 가이드를 적용하면서 API 호환성을 유지해야 하는 프로젝트에 유용합니다.
- 발견된 위반 사항에 주석을 삽입하면 일부 규칙을 자동으로 비활성화할 수 있습니다.
- 사용자 정의 린트 규칙을 포함하는 플러그인을 로드합니다.
- 모든 규칙에 대해 테스트를 거쳤습니다.
- 다양한 통합 지원.
- protoc 플러그인
- 편집기 통합
- GitHub 액션
- CI 통합
데모
MCP 서버를 구성한 후 Claude Desktop과 같은 MCP 클라이언트에 다음과 같이 Protocol Buffer 파일을 린트하고 수정하도록 요청할 수 있습니다.
또한 vim-protolint는 다음과 같이 작동합니다.
MCP 서버
이제 protolint에는 AI 모델이 protolint와 직접 상호 작용할 수 있는 MCP(Model Context Protocol) 에 대한 지원이 포함되었습니다.
용법
지엑스피1
protolint의 MCP 서버 기능을 사용하고 통합하는 방법에 대한 자세한 내용은 MCP 설명서를 참조하세요.
설치
Homebrew를 통해
Homebrew의 yoheimuta/protolint 탭을 통해 protolint를 Mac이나 Linux에 설치할 수 있습니다.
homebrew-core 에 protolint,
brew install protolint.
이는 기본적으로 설치되는 기본 탭입니다. 더 쉽지만, 같은 개발자가 관리하지는 않습니다. 최신 상태를 유지하려면 먼저 brew tap yoheimuta/protolint
실행하는 것이 좋습니다.
GitHub 릴리스를 통해
이 릴리스 페이지에서 미리 빌드된 바이너리를 다운로드할 수도 있습니다.
각 릴리스의 다운로드 섹션에서 .tar.gz 패키지로 미리 빌드된 바이너리를 찾을 수 있습니다.
유지 관리된 Docker 이미지를 사용하세요
protolint는 Docker 워크플로의 일부로 protolint를 사용할 수 있도록 하는 Docker 이미지 yoheimuta/protolint를 제공합니다.
출처에서
Go를 사용할 수 있다면 소스에서 바이너리를 설치할 수 있습니다. 하지만 버전 정보가 포함되어 있지 않으므로 미리 빌드된 바이너리 중 하나를 사용하는 것이 좋습니다.
JavaScript/TypeScript 내에서
npm
이나 yarn
같은 Node.js 패키지 관리자를 사용하여 protolint
사용할 수 있습니다.
이렇게 하면 로컬 package.json
에 개발 종속성에 대한 참조가 추가됩니다.
설치 중에 install.mjs 스크립트가 호출됩니다. 이 스크립트는 github에서 해당 protolint
다운로드합니다. @electron/get 과 마찬가지로 다음 환경 변수를 사용하여 다운로드를 우회할 수 있습니다.
환경 변수 | 기본값 | 설명 |
---|---|---|
프로토콜린트_미러_호스트 | https://github.com | 바이너리를 호스팅하는 HTTP/웹 서버 기반 URL |
프로토콜_미러_원격_경로 | 요헤이무타/프로토린트/다운로드/릴리스 | 원격 호스트의 아카이브 경로 |
프로토콜린트_미러_사용자 이름 | HTTP 기본 인증 사용자 이름 | |
프로토콜_미러_비밀번호 | HTTP 기본 인증 비밀번호 | |
프로토콜린트_프록시 | 선택적 인증 데이터가 포함된 HTTP(S) 프록시 |
원격 경로 내에서 릴리스 페이지의 아카이브를 미러링해야 합니다.
그 후에는 개발 스크립트 내에서 npx protolint
(제공된 모든 protolint 인수 포함)를 사용할 수 있습니다.
package.json
에 protolint
노드를 추가할 수 있으며, 이 노드에는 lint
노드 아래의 protolint.yml
내용이 포함될 수 있습니다. 즉, 구성의 루트 요소는 protolint
됩니다.
TSC 컴파일러와 일치하는 출력을 얻으려면 reporter tsc
사용하세요.
Python 프로젝트 내에서
파이썬 프로젝트 내에서 protolint
린터로 사용할 수 있습니다. pypi 의 wheel protolint-bin
에는 다양한 플랫폼용으로 미리 컴파일된 바이너리가 포함되어 있습니다. 원하는 버전을 pyproject.toml
또는 requirements.txt
에 추가하기만 하면 됩니다.
다운로드된 휠에는 protolint
및 protoc-gen-protolint
용으로 컴파일된 Go 바이너리가 포함됩니다. 사용 중인 플랫폼은 지원되는 바이너리 플랫폼과 호환되어야 합니다.
pyproject.toml
의 tools.protolint
패키지에 linter 구성을 추가할 수 있습니다.
용법
protolint는 기본적으로 구성이 필요하지 않으므로 대부분의 프로젝트에서 바로 작동할 것입니다.
버전 제어 통합
protolint는 pre-commit hook으로 제공됩니다. Go에서 protolint를 실행하려면 저장소의 .pre-commit-config.yaml
파일에 다음 내용을 추가하세요.
또는 Docker로 protolint를 실행하려면 다음을 사용하세요.
편집기 통합
비주얼 스튜디오 코드
JetBrains IntelliJ IDEA, GoLand, WebStorm, PHPStorm, PyCharm...
Vim( ALE 엔진 )
Vim( 신타스틱 )
GitHub 액션
워크플로에서 프로토콜을 실행하기 위한 GitHub 작업
CI 통합
젠킨스 플러그인
- warnings-ng 및 violations-lib를 사용하는 모든 항목
환경별 출력
CI/CD 환경의 포맷에 따라 린팅 형식을 지정할 수 있습니다. 출력 형식을 사용하여 환경을 설정해야 합니다. 현재 다음과 같은 출력이 구현되어 있습니다.
환경 | 명령줄 값 | 설명 | 예 |
---|---|---|---|
Github 액션 | 시그마 | Github 도움말 | ::warning file=example.proto,line=10,col=20,title=ENUM_NAMES_UPPER_CAMEL_CASE::EnumField name \"SECOND.VALUE\" must be CAPITALS_WITH_UNDERSCORES |
Azure DevOps | 시-애즈 | Azure DevOps 도움말 | ##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/CD | 시글랍 | 예시를 통한 역엔지니어링 | WARNING: ENUM_NAMES_UPPER_CAMEL_CASE example.proto(10,20) : EnumField name \"SECOND.VALUE\" must be CAPITALS_WITH_UNDERSCORES |
또한, 일반적인 ci
포매터를 사용하면 일반적인 문제 매처가 생성됩니다.
ci-env
값을 사용하면 다음 환경 변수에서 템플릿을 지정할 수 있습니다.
환경 변수 | 우선 사항 | 의미 |
---|---|---|
프로토콜_CIREPORTER_TEMPLATE_STRING | 1 | Go-템플릿을 포함하는 문자열 |
프로토콜_CIREPORTER_템플릿_파일 | 2 | Go 템플릿을 포함하는 파일의 경로 |
결과적으로 줄 바꿈 문자가 추가되므로 추가해서는 안 됩니다. 자동으로 추가됩니다.
사용 가능한 필드는 다음과 같습니다.
Severity
: 심각도를 문자열로 표시(참고, 경고 또는 오류)
File
: 오류가 포함된 파일의 경로
Line
: 오류가 포함된 file
내의 줄(시작 위치)
Column
: 오류가 포함된 file
내의 열(시작 위치)
Rule
: 오류가 발생한 규칙의 이름
Message
: 오류를 설명하는 오류 메시지
출력 파일 및 CI/CD 오류 스트림 생성
CI/CD 환경과 일치하는 특정 출력을 만들 수 있으며, Github CodeQL이나 SonarQube와 같은 정적 코드 분석 도구에 대한 출력 파일도 만들 수 있습니다.
--add-reporter
플래그를 추가하면 됩니다. 값은 <reporter-name>:<output-file-path>
형식이어야 합니다( <
와 >
는 생략).
프로토콜 플러그인으로 사용
protolint는 lint 기능을 protoc 플러그인으로 수행하는 바이너리 protoc-gen-protolint 도 유지합니다. 자세한 내용은 cmd/protoc-gen-protolint/README.md를 참조하세요.
이 기능은 이미 프로토콜 플러그인 워크플로가 있는 상황에서 유용합니다.
Go 코드에서 호출
Go 코드에서도 protocolint를 사용할 수 있습니다. 자세한 내용은 Go 문서 와 lib/lint_test.go를 참조하세요.
규칙
자세한 내용은 internal/addon/rules
참조하세요.
규칙은 다음과 같습니다.
- 공식 스타일 가이드 . 이 기능은 기본적으로 활성화되어 있습니다. 기본적으로
-fix
옵션을 추가하여 이러한 규칙 위반 사항을 수정할 수 있습니다. - 비공식 스타일 가이드입니다. 기본적으로 비활성화되어 있습니다.
.protolint.yaml
사용하여 각 규칙을 활성화할 수 있습니다.
명령줄에서 -fix
옵션을 사용하면 수정 가능한 규칙에서 보고된 모든 문제를 자동으로 수정할 수 있습니다. 아래의 수정 가능한 열을 참조하세요.
명령줄에서 -auto_disable
옵션을 사용하면 자동 비활성화 규칙에서 보고된 모든 문제를 자동으로 비활성화할 수 있습니다. 이 기능은 기존 위반 사항을 수정하여 호환성을 손상시킬 때 유용합니다. 아래 열 자동 비활성화를 참조하세요.
- *1: 이 규칙들은 AutoDisable을 지원하지 않습니다. 수정 사항이 호환성을 해치지 않기 때문입니다. 프로토콜을
-fix
으로 실행해야 합니다.
공식적인 | 수정 가능 | 자동 비활성화 | ID | 목적 |
---|---|---|---|---|
예 | ✅ | ✅ | 열거형_필드_이름_접두사 | 열거형 필드 이름에 ENUM_NAME_UPPER_SNAKE_CASE 접두사가 붙어 있는지 확인합니다. |
예 | ✅ | ✅ | ENUM_FIELD_NAMES_UPPER_SNKE_CASE | 모든 열거형 필드 이름이 대문자와 밑줄로 구성되어 있는지 확인합니다. |
예 | ✅ | ✅ | ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH | 0 값 열거형에 접미사(예: "UNSPECIFIED", "INVALID")가 포함되어야 하는지 확인합니다. 기본값은 "UNSPECIFIED"입니다. .protolint.yaml 파일을 사용하여 특정 접미사를 설정할 수 있습니다. |
예 | ✅ | ✅ | ENUM_NAMES_UPPER_CAMEL_CASE | 모든 열거형 이름이 CamelCase(첫 글자가 대문자)인지 확인합니다. |
예 | ✅ | *1 | 파일 이름 하위 스네이크 케이스 | 모든 파일 이름이 lower_snake_case.proto인지 확인합니다. 제외할 파일은 .protolint.yaml 파일로 설정할 수 있습니다. |
예 | ✅ | ✅ | 필드 이름 하위 스네이크 케이스 | 모든 필드 이름이 밑줄로 구분된 이름인지 확인합니다. |
예 | ✅ | *1 | 수입품_정렬됨 | 모든 가져오기가 정렬되었는지 확인합니다. |
예 | ✅ | ✅ | 메시지 이름 대문자 | 모든 메시지 이름이 CamelCase(첫 글자가 대문자)인지 확인합니다. |
예 | ✅ | *1 | 주문하다 | 모든 파일이 특정 방식으로 정렬되어야 하는지 확인합니다. |
예 | ✅ | *1 | 패키지 이름 하위 케이스 | 패키지 이름에 소문자만 포함되어야 하는지 확인합니다. |
예 | ✅ | ✅ | RPC_이름_대문자_낙타_대문자 | 모든 RPC 이름이 CamelCase(첫 글자가 대문자)인지 확인합니다. |
예 | ✅ | ✅ | 서비스 이름 대문자 | 모든 서비스 이름이 CamelCase(첫 글자가 대문자)인지 확인합니다. |
예 | ✅ | ✅ | 반복되는 필드 이름이 복수화됨 | 반복되는 필드 이름이 복수형 이름인지 확인합니다. |
예 | ✅ | *1 | 일관된 견적 | 문자열에 대한 따옴표 사용이 일관성을 유지하는지 확인합니다. 기본값은 큰따옴표입니다. .protolint.yaml 사용하여 특정 따옴표를 설정할 수 있습니다. |
예 | ✅ | *1 | 톱니 모양 | 일관된 들여쓰기 스타일을 적용합니다. 기본 스타일은 공백 2개입니다. 적절한 줄바꿈도 기본적으로 강제로 적용됩니다. 세부 사항은 .protolint.yaml 사용하여 설정할 수 있습니다. |
예 | ✅ | *1 | PROTO3_FIELDS_AVOID_REQUIRED | proto3에 필요한 모든 필드가 필수가 아닌지 확인합니다. |
예 | _ | ✅ | PROTO3_GROUPS_AVOID | proto3에 대해 모든 그룹을 피해야 함을 확인합니다. |
예 | _ | *1 | 최대 줄 길이 | 최대 줄 길이를 적용합니다. 줄 길이는 줄에 포함된 유니코드 문자 수로 정의됩니다. 기본값은 80자입니다. .protolint.yaml 파일을 사용하여 세부 정보를 설정할 수 있습니다. |
아니요 | _ | - | 서비스 이름 끝 | 서비스 이름에 일관된 접미사를 적용합니다. .protolint.yaml 사용하여 특정 접미사를 설정할 수 있습니다. |
아니요 | _ | - | 필드 이름에서 전치사 제외 | 모든 필드 이름에 전치사(예: "for", "during", "at")가 포함되지 않는지 확인합니다. .protolint.yaml 파일을 사용하여 특정 전치사와 제외 키워드를 설정할 수 있습니다. |
아니요 | _ | - | 메시지 이름에서 전치사를 제외합니다 | 모든 메시지 이름에 전치사(예: "With", "For")가 포함되지 않는지 확인합니다. .protolint.yaml 파일을 사용하여 특정 전치사와 제외 키워드를 설정할 수 있습니다. |
아니요 | _ | - | RPC_이름_대소문자 | 모든 RPC 이름이 지정된 규칙을 따르는지 확인합니다. .protolint.yaml 파일을 사용하여 특정 규칙을 설정해야 합니다. |
아니요 | _ | - | 메시지에 댓글이 있습니다 | 모든 메시지에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | 서비스에 대한 의견이 있습니다 | 모든 서비스에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | RPCS_댓글_있음 | 모든 rps에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | 필드에 주석이 있습니다 | 모든 필드에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | 열거형_주석_있음 | 모든 열거형에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | 열거형 필드에 주석이 있습니다 | 모든 열거형 필드에 주석이 있는지 확인합니다. .protolint.yaml 사용하여 Golang 스타일 주석을 적용하도록 설정할 수 있습니다. |
아니요 | _ | - | 파일에 주석이 있습니다 | 파일이 문서 주석으로 시작하는지 확인합니다. |
아니요 | _ | - | 구문 일관성 | syntax가 지정된 버전인지 확인합니다. 기본값은 proto3입니다. .protolint.yaml 로 버전을 설정할 수 있습니다. |
위의 모든 linter는 자동으로 활성화되어 protolint가 업데이트될 때마다 항상 최대의 이점을 누릴 수 있으므로 .protolint.yaml
에 all_default: true
를 추가하는 것이 좋습니다.
기본적으로 활성화된 좋은 스타일을 보여주는 몇 가지 예는 다음과 같습니다. -
는 나쁜 스타일이고 +
는 좋은 스타일입니다.
열거형_필드_이름_접두사
ENUM_FIELD_NAMES_UPPER_SNKE_CASE
ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH
ENUM_NAMES_UPPER_CAMEL_CASE
필드 이름 하위 스네이크 케이스
수입품_정렬됨
메시지 이름 대문자
주문하다
패키지 이름 하위 케이스
RPC_이름_대문자_낙타_대문자
RPC_이름_대문자_낙타_대문자
반복되는 필드 이름이 복수화됨
톱니 모양
일관된 견적
사용자 정의 규칙 만들기
protolint는 사용자 정의 린트 규칙을 자유롭게 만들 수 있는 플러그형 린터입니다.
완전한 샘플 프로젝트(플러그인이라고도 함)는 _example/plugin 디렉토리의 이 저장소에 포함되어 있습니다.
기자들
protolint에는 린팅 결과의 모양을 제어하기 위한 여러 가지 내장 리포터(일명 포매터)가 함께 제공됩니다.
명령줄에서 -reporter 플래그를 사용하여 리포터를 지정할 수 있습니다. 예를 들어, -reporter junit
junit 리포터를 사용합니다.
기본 제공 리포터 옵션은 다음과 같습니다.
- 일반(기본값)
- 주닛
- 제이슨
- 사리프
- 소나(SonarQube 일반 이슈 형식)
- 유닉스
- tsc(TypeScript 컴파일러와 호환)
구성 중
프로토콜 버퍼 파일에서 규칙 비활성화
다음 형식의 프로토콜 버퍼 파일 내에 주석을 추가하여 규칙을 비활성화할 수 있습니다. 규칙은 파일 끝까지 또는 린터가 일치하는 활성화 주석을 찾을 때까지 비활성화됩니다.
:next 또는 :this를 추가하여 비활성화 명령을 수정할 수도 있습니다. 이렇게 하면 각각 이(현재) 줄이나 다음 줄에만 명령이 적용됩니다.
예를 들어:
명령줄 옵션 -auto_disable
next
로 설정하면 문제가 발견될 때마다 비활성화 명령이 this
됩니다.
-fix
옵션을 함께 지정할 수 있습니다. auto_disable을 지원하는 규칙은 스키마 비호환성을 유발하는 위반 사항을 수정하는 대신 해당 위반 사항을 억제합니다.
구성 파일
protolint는 .protolint.yaml
이라는 이름의 구성 파일을 사용하여 작동할 수 있습니다.
구성 파일 사양은 _example/config/.protolint.yaml을 참조하세요.
protolint는 기본적으로 현재 작업 디렉터리에서 설정 파일을 자동으로 검색하고, 이후 상위 디렉터리부터 파일 시스템의 루트 디렉터리까지 검색합니다. 또한 -config_dir_path
플래그를 사용하여 지정된 디렉터리를 검색할 수 있습니다. --config_path
플래그를 사용하여 지정된 파일을 검색할 수도 있습니다.
종료 코드
파일을 린팅할 때 protolint는 다음 종료 코드 중 하나와 함께 종료됩니다.
0
: 린팅이 성공했으며 린팅 오류가 없습니다.1
: 린팅이 성공했으며 적어도 하나의 린팅 오류가 있습니다.2
: 구문 분석, 내부, 런타임 오류 등 다른 모든 오류로 인해 Linting이 실패했습니다.
동기 부여
2018년 12월 20일 기준으로 유사한 protobuf 린터가 존재합니다.
하나는 Google의 Protocol Buffers 컴파일러용 플러그인입니다.
- 단순히 파일을 린트하고 싶을 때, 컴파일 환경을 만드는 것은 지루할 수 있습니다.
- 그리고 일반적으로 파일을 파싱하는 것보다 파일을 컴파일하는 데 더 많은 시간이 걸립니다.
다른 도구는 Protocol Buffer 파일을 검사하는 명령줄 도구입니다.
- 린트 외에도 많은 기능이 있지만, 린터만 원하는 사용자에게는 사용하기 불편해 보입니다.
- 린트 규칙은 의견을 표현하는 쪽으로 기울어져 있습니다.
- 더욱이, 규칙 세트와 공식 스타일 가이드가 서로 정확히 일치하지 않습니다. 규칙과 가이드를 모두 자세히 이해한 후, 규칙을 정확하게 결합해야 합니다.
기타 도구
저는 2019년 12월 17일에 protolint를 포함한 다양한 Protocol Buffer Linter를 비교하는 기사를 썼습니다.
- https://qiita.com/yoheimuta/items/da7678fcd046b93a2637
- 참고: 이 글은 일본어로 작성되었습니다.
종속성
개발
풀어 주다
릴리스 프로세스를 간소화하고 인적 오류를 줄이기 위해 저장소에 release.sh
스크립트가 포함되어 있습니다. 이 스크립트는 새 릴리스 태그를 생성하고 푸시하는 데 필요한 단계를 자동화합니다.
사용 방법
다음 명령을 실행하여 새 릴리스를 만듭니다.
특허
MIT 라이선스(MIT)
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
프로토린트-MCP
Related MCP Servers
- GoMIT License
- PythonApache 2.0
- Rust
- TypeScriptMIT License