발표는 먼저 LSP의 개념과 작동 방식을 설명합니다. LSP는 언어 서버를 한 번 구축하면 다양한 에디터에서 언어 지능을 활용할 수 있게 하여, 과거 에디터별 플러그인을 개별 개발해야 했던 비효율성을 해결합니다. 에디터가 파일을 열면 언어별 프로세스가 백그라운드에서 실행되며, JSON RPC를 통해 표준 입출력으로 통신하여 자동 완성, 진단 등의 기능을 제공합니다.
이어서 Stimulus LSP의 개발 사례를 상세히 소개합니다. Stimulus LSP의 주요 목표는 Stimulus 컨트롤러의 data
속성(예: data-controllers
, data-targets
, data-actions
)에 대한 정확한 자동 완성 및 진단 기능을 제공하는 것입니다. 초기 구현은 정적 속성 완성에서 시작하여, Acorn과 같은 JavaScript 파서를 활용해 애플리케이션 내 Stimulus 컨트롤러의 동적 정보(메서드, 타겟 등)를 추출하여 자동 완성 및 값 제안 기능을 고도화했습니다. 개발 과정에서는 하드코딩된 경로 문제, 다양한 컨트롤러 등록 방식 지원의 필요성 등 여러 난관에 부딪혔으며, 결국 파서를 전면 재작성하여 정확성과 신뢰성을 크게 향상시켰습니다.
발표자는 AI 기반 코드 완성 도구와 LSP의 차이점을 명확히 하며, LSP가 제공하는 신뢰성과 정확성에 기반한 진단 기능의 중요성을 강조합니다. AI가 생성한 코드에 오류가 발생했을 때 LSP가 이를 감지하고 수정 제안(Quick Fix)을 제공하는 것이 개발 생산성 유지에 필수적이라는 입장입니다. 이는 Ruby의 ‘Did you mean’ 기능처럼, Stimulus 코드의 잘못된 참조에 대해서도 유사한 제안을 할 수 있음을 시사합니다.
향후 계획으로는 Stimulus LSP의 진단 기능을 독립적인 CLI 도구인 Stimulus Lint로 추출하여 CI 시스템에서도 코드 품질 검사를 가능하게 할 예정입니다. 또한 Turbo 관련 기능에 대한 LSP 지원인 Turbo LSP를 개발 중이며, 이를 위해 ERB 문서 내 HTML과 Ruby 코드를 통합적으로 이해하는 파서 개발이 중요하다고 강조합니다. 이 통합 파서는 Rails 헬퍼, 조건문 등을 인식하여 더 정교한 진단과 자동 완성을 제공하고, Haml, Slim 등 다른 템플릿 언어 지원의 기반이 될 수 있습니다. 추가적으로, Turbo Frames 및 Stimulus Controllers를 시각적으로 강조하고 디버깅을 돕는 Hotwire 브라우저 확장 기능 개발과 Turbo Streams 디버그 바, Turbo Frame 새로고침 버튼 등 다양한 기능 개선 아이디어를 공유했습니다.