biome를 formatter로 설정하기
Table of Contents
Doom Emacs의 :editor에는 기본적으로 format 패키지가 있다. 아래처럼 켤 수 있다:
(doom! :editor
(format +onsave +lsp)) ; automated prettiness
이 패키지는 포매팅을 위해서 radian-software/apheleia를 쓰는데, 기본적으로 prettier를 쓴다. 나는 biome가 좋다. biome로 포매팅하도록 바꿔보자.
1. 설정
두 가지 변수를 고치면 된다.
apheleia-formatters- 포매터의 이름과 동작을 정의한 alist
apheleia-mode-alist- 어떤 mode에 어떤 포매터를 쓸 지 정의한 alist
apheleia-formatters로 먼저 biome라는 포매터와 어떻게 동작해야하는지를 정의하고, apheleia-mode-alist에 JavaScript, TypeScript를 쓸 때 biome를 써야 한다고 알려주면 된다.
alist에 어떤 내용이 있는지 보려면 M-x describe-variable 혹은 SPC h v 하고 변수 이름을 입력하면 된다. 두 변수는 아래처럼 생겼다.
; apheleia-formatters
((lsp . +format-lsp-buffer)
(astyle "astyle"
(apheleia-formatters-locate-file "--options" ".astylerc"))
(asmfmt "asmfmt")
(bean-format "bean-format" input)
;; 생략 ...
; apheleia-mode-alist
((lisp-data-mode . lisp-indent)
(lisp-interaction-mode . lisp-indent)
(typescript-tsx-mode . prettier-typescript)
(rjsx-mode . prettier-javascript)
(js2-mode . prettier-javascript)
;; 생략 ...
똑같이 내용을 넣어주면 된다. add-to-list 함수로 apheleia-formatters에 biome를 정의하자:
(add-to-list 'apheleia-formatters │ │ │ │ │ │ │'(biome . ("biome" "check" "--stdin-file-path" filepath "--fix")))
apheleia-mode-alist에서는 정의를 바꿔주면 된다. setf로 편하게 할 수 있다:
(setf (alist-get 'js-json-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'js-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'js-ts-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'js2-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'js3-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'json-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'rjsx-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'tsx-ts-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'typescript-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'typescript-ts-mode apheleia-mode-alist) 'biome │ │ │ (alist-get 'typescript-tsx-mode apheleia-mode-alist) 'biome)
setf는 홀수번째 인자의 요소를 짝수번째 인자의 값으로 대체한다.alist-get은 주어진 키로 주어진 alist에서 그에 상응하는 값을 찾는다.- 둘이 함께 쓰면 alist에서 키에 새로 값을 매핑할 수 있다.
위 설정을 적절한 위치에 넣어준다. 나는 lsp-biome도 쓰고 있어서, lsp-biome와 apheleia가 같이 로드되면 실행되도록 설정하였다. Doom Emacs에서는 after! 매크로로 쉽게 할 수 있다:
(after! (:and lsp-biome apheleia) │ (add-to-list 'apheleia-formatters │ │ │ │ │ │ │ │'(biome . ("biome" "check" "--stdin-file-path" filepath "--fix"))) │ (setf (alist-get 'js-json-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'js-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'js-ts-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'js2-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'js3-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'json-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'rjsx-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'tsx-ts-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'typescript-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'typescript-ts-mode apheleia-mode-alist) 'biome │ │ │ │ (alist-get 'typescript-tsx-mode apheleia-mode-alist) 'biome))