피드로 돌아가기
Create Your First Linter in Go
Dev.toDev.to
Backend

Go AST 분석 기반의 맞춤형 Linter 설계 및 golangci-lint 플러그인 통합

Create Your First Linter in Go

Manuel Doncel Martos2026년 5월 27일9intermediate

Context

범용 Linter로는 팀 고유의 컨벤션과 아키텍처 규칙 강제가 불가능한 한계 존재. 개발자의 인지 부하를 줄이고 코드 일관성을 확보하기 위한 맞춤형 정적 분석 도구 필요성 대두.

Technical Solution

  • Go 표준 라이브러리가 제공하는 AST(Abstract Syntax Tree)를 활용한 소스 코드 구조 분석
  • analysis 패키지의 Analyzer 구조체를 통한 비즈니스 로직 캡슐화 및 Run 함수 기반의 노드 탐색
  • ValueSpec 노드를 추적하여 Unexported 상수가 '_' 접두사로 시작하는지 검증하는 규칙 구현
  • Pass 인터페이스를 통한 파일 단위 AST 순회 및 Diagnosis 객체를 이용한 위반 사항 플래깅
  • golangci-lint의 Plugin-module-register 라이브러리를 통한 외부 모듈 형태의 플러그인 통합
  • Custom binary 생성을 통한 프로젝트 전체 범위의 자동 검사 및 Fix 기능 적용

1. 팀 내 반복되는 PR 리뷰 피드백을 AST 기반의 Custom Linter 규칙으로 변환하여 자동화할 것

2. 분석 로직 설계 시 `testdata` 폴더 내 `// want` 주석을 활용해 기대 결과(Expectation)를 명시하고 테스트 케이스를 구축할 것

3. 단순 Linter 실행을 넘어 golangci-lint 플러그인으로 통합하여 CI/CD 파이프라인에 편입시킬 것

원문 읽기