mlua-debugger.nvim 플러그인
계속해서 mlua.nvim
동작 개선
발표 이후로도 mlua.nvim 플러그인은 주로 제 사용성을 위해서 개선하고 있었습니다.
몇 가지의 큰 시행착오 끝에, 결국 이런저런 레이지로딩 및 퍼지 파인딩의 복잡한 로직은 버려버리고, 간단히 원본 vscode 익스텐션의 흐름을 따라가기로 했습니다. 그래도 잘 동작합니다.
실행 공간 표시
그리고 추가적인 기능으로 실행 공간 표시를 진행하도록 했습니다.
vscode에서처럼 아이콘을 사용하는건 뭔가 Vim이나 Neovim과는 안 어울린다고 판단했기에, 간단한 버추얼 텍스트로 해당 상황일 때 표시하도록 했습니다.

그리고 이제 미뤄놨던 디버거 연결 작업을 해보기로 했습니다.
디버거 연결
계획
그래도 이 역시, 베이스가 되는 익스텐션이 있기에, 이것만 잘 따서 nvim-dap와 nvim-dap-ui에 갖다주면 될 줄 알았습니다. 하는 김에 mlua.nvim에 합치고요.
그렇게 대충 짜서 넘겨줬더니....
연결 "만" 됩니다.
애초에 DAP 표준이 아님
원인을 분석해보니 일반적으로 JSON-RPC 형태인 DAP와는 달리 MSW는 독자적인 바이너리 규격으로 디버그 프로토콜을 사용하고 있었습니다. 그러니 포트번호를 통해 연결은 대충 성공했어도 통신이 제대로 될 리 없었죠.
하지만 요새는 좋은 세상입니다.
그래도 규칙성이 있는 패턴이고, 원본 익스텐션이라는 정답도 있었기에, 금방 llm을 통해 이 규격을 해석해서 연결했습니다.
UI 연결
다음으로 UI를 만드는 작업이었습니다.
원래는 nvim-dap-ui를 사용해 때울 생각이었지만, 이는 dap 규격에 맞게 MSW의 디버거 메시지를 변환하고 보내고 다시 변환하고 하는 귀찮은 과정이 소요됩니다. 그러므로, 스탠드얼론으로 디버거와 UI까지 처리하는 플러그인을 따로 분리하는게 맞다는 생각이 들었습니다.
그래서 mlua-debugger.nvim이라는 플러그인을 분리하기에 이르렀습니다.
https://github.com/seokgukim/mlua-debugger.nvim
디버거를 디버깅
어쨌든 방법에 대해 짬이 좀 쌓여도 처음부터 완벽하게 돌아가는 걸 짤 자신은 없기에, 여러 시행착오를 겪었습니다.
디버깅 세션이 끝나도 하이라이트가 남는다거나, 디버그 실행이 재개됨에도 하이라이트 표시가 남는다거나, UI 배치가 생각보다 이상하다던가 하는 부분을 뛰어넘어서 대략적으로 최초 버전이라 할 만한 내용이 나왔습니다.

앞으로의 계획
어쨌든 저 편하려고 이거저거 만들어낸 것까지는 좋은데, 애초에 Neovim을 MSW 유저들이 별로 사용하지는 않아서 대충 되는대로 유지보수 할 생각입니다.
제가 쓰다가 불편하면 고치는거고 아님 말고 식이 되겠지요.
(물론 중대한 버그야 대응하겠지만)
아무튼 디버거가 클라이언트 쪽에 뭔가 검증이 걸려있을 거 같아서 미뤄뒀었는데, 해 보니까 의외로 포트 연결 후에 프로토콜만 맞춰주면 되는 문제였어서 괜찮았습니다.
이제 진짜 편하게 네오빔 써야지.