svls: SystemVerilog Language Server

소개



이 문서는 SystemVerilog Advent Calendar 2020의 25 일째입니다.
7일째의 기사와 약간 입고 있습니다만, svls라고 하는 SystemVerilog용의 Language Server에 대해 소개합니다.

Language Server란 Microsoft가 사양 책정한 Language Server Protocol(LSP)이라는 프로토콜을 말하는 서버입니다.
이 서버는 접속해 오는 에디터에 대해, 태그 점프나 보완, 린트, 포맷 등 다양한 기능을 제공합니다.
종래 이러한 기능은 에디터마다 구현되고 있었습니다만, 공통의 프로토콜이 생겼기 때문에, 1개 Language Server를 쓰면 대응하는 모든 에디터가 이 기능을 이용할 수 있게 되었습니다.

최근의 현대적인 프로그래밍 언어에서는 이 Language Server가 표준으로 제공되는 경우가 많지만, 불행히도 SystemVerilog에는 이러한 동작이 없습니다. (별로 진지하게 조사한 적은 없지만, 상용 툴에서도 들은 적이 없습니다)
없으면 만들려고 하는 것으로, 7일째에 소개한 SystemVerilog 파서 라이브러리 를 사용해 Language Server를 구현한 것이 이 svls입니다. 구현 언어는 Rust입니다.

svls



무슨 일이 일어나는지 아래 스크린 샷을보십시오.
빨간색 배경에 린트 오류가 표시되고 수정하면 결과가 실시간으로 반영됩니다.
(표시되는 방법은 편집기와 LSP 플러그인에 따라 다릅니다)



또한 구문 오류도 실시간으로 표시됩니다.

여기는 VSCode의 예로, 후미의 ;가 빠져 있는 케이스입니다.
(이하는 gif로 하는 것이 귀찮았으므로 정지화면입니다…)



마우스 호버에 세부 사항 (그렇지 않은 것은 아니지만)이 표시됩니다.



당초 린트 에러 표시를 목적으로 하고 있었습니다만, 이 신택스 에러 표시도 생각외 편리합니다. svls가 사용하는 파서는 언어 규격에 대해 매우 엄격하게 만들고 있습니다. 한편, 상용을 포함해 SystemVerilog의 처리계(시뮬레이터나 합성 툴 등)는 문법이 적당한 것이 많아, 툴에 의해 규격 위반의 기술이 통과하거나 통과하지 않거나 합니다.
따라서 svls를 사용하여 확실히 규격의 범위 내에서 쓰도록 하면 툴의 차이로 문제가 되기 어려워진다고 생각합니다. (또한 규격대로인데 통하지 않는 상용 툴이 있으면, 벤더에게 불평을 말할 수도 있습니다)

사용법



기본적인 흐름은
  • svls 바이너리를 다운로드하고 경로를 통과하는 곳에 넣습니다
  • 편집기의 Language Server로 등록

  • 라는 느낌입니다. 자세한 내용은 아래를 참조하십시오.

    지금은 아래 편집기에서 작동하는 것 같습니다.
  • VSCode
  • Vim
  • Neovim
  • Emacs

  • 그 외에도 Language Server에 대응한 에디터라면 움직일 것입니다.
    SystemVerilog를 자주 쓰는 분에게는 꼭 사용해 주시면 좋겠습니다.

    좋은 웹페이지 즐겨찾기