zerovoids.dev
zerovoids.dev

Ø NEWS

gopls, 코드를 고치기 전에 필요한 조건을 묻는다

gopls가 태그 종류와 이름 규칙, 구현할 인터페이스를 편집기에서 입력받아 리팩터링에 반영한다.

Go 구조체에 태그를 추가하면 무조건 camelCase 형식의 json 태그가 붙던 작업에 선택지가 생겼다. Go 언어 서버 gopls는 이제 편집기에서 태그 종류와 이름 규칙을 물은 뒤 코드를 수정한다. json과 db 태그를 함께 넣고 태그 값의 이름 표기를 snake_case로 바꾸는 요청도 이 대화 안에서 처리한다.

이 기능의 바탕은 편집기와 언어 서버가 코드 자동 완성·진단·수정 요청을 주고받는 표준인 LSP다. 기존 LSP에서는 대부분의 코드 변환이 실행 즉시 수정안을 반환했다. 서버가 커서 위치와 주변 코드만으로 의도를 알아내야 했고, 정보가 부족하면 정해진 기본값을 적용하거나 해당 작업을 제공하지 못했다.

편집기와 언어 서버 사이에 입력 절차를 넣다

Go 팀은 Dart 팀과 협력해, 언어 서버가 코드 수정안을 만들기 전에 사용자에게 필요한 입력을 받는 방식을 LSP에 제안했다. 여러 단계의 대화창을 언어별로 특정 편집기에 따로 구현하던 기능을 공통 프로토콜로 다루려는 설계다. 현재 동작하는 지원은 gopls v0.24.0과 공식 VS Code Go 확장 v0.56.0에서 제공된다.

인터페이스 구현에도 이 입력 절차가 쓰인다. 구체 타입에서 메서드 추가 작업을 선택하면 작업 공간과 표준 라이브러리의 인터페이스 이름을 검색할 수 있다. 선택한 인터페이스에 타입 매개변수가 있으면 사용할 타입을 추가로 묻고, 그 결과에 맞춰 수신자 이름과 메서드 시그니처를 갖춘 골격 코드를 생성한다.

태그 삭제 역시 대상을 지정할 수 있게 됐다. 삭제할 태그 키로 db를 입력하면 json 태그를 남긴 채 db 태그만 지운다.