본문 바로가기
학습 내용/Rust

rustfmt와 RLS, rust-analyzer

by yein 2022. 1. 28.

rustfmt

  • rustfmt는 러스트의 formatting 도구로, 이를 이용하여 일정한 스타일로 코드를 작성할 수 있음.
  • 설치하기
    $ rustup component add rustfmt​
  • 러스트 파일에 대해 rustfmt 실행하기
    $ rustfmt main.rs​
  • 위 코드를 통해 파일에 대해 rustfmt를 실행하면 이렇게 공백 문자 2칸 → 4칸이 된다! (러스트에서의 들여쓰기는 공백 문자 4개를 이용한다고 한다.)

움짤입니다 ..



rust-analyzer

  • 그치만 매번 이렇게 명령어를 입력해서 포매팅을 하는 건 어쩌면 조금 귀찮을지도?.. prettier처럼 파일이 저장될 때마다 포매팅해주면 참 좋겠다. 그래서 찾아봤다. (참고)
    • VS Code의 marketplace에서 rust-analyzer를 설치한다.

    • VS Code 설정에서 Editor: Format On Save 체크 안 되어 있다면 체크하기
    • settings.json에 아래 코드 추가해주기
          "editor.formatOnSave": true,
          "editor.formatOnType": true,
          "rust-analyzer.rustfmt.enableRangeFormatting": true,
          "[rust]": {
              "editor.defaultFormatter": "matklad.rust-analyzer",
          },​
      - editor.formatOnType ⇒ ‘입력 후 편집기에서 자동으로 줄의 서식을 지정할지 여부를 제어합니다.’
      - rust-analyzer.rustfmt.enableRangeFormatting ⇒ ‘textDocument/rangeFormatting 요청에 대해 rustfmt의 불안정한 범위 형식 지정 명령을 사용할 수 있습니다. Rustfmt 옵션은 불안정하며 nightly 빌드에서만 사용할 수 있습니다.’라고 하는데, 이 부분 없어도 포매팅 잘 된다. 그래도 아직은 무슨 말인지 잘 모르겠어서 나중에 찾아보려고 우선은 냅뒀다.
      - 대괄호 안에 쓴 언어에 대해서 편집기 설정을 따로 지정해줄 수 있다. 나의 경우, 일반적인(=러스트를 사용하지 않는) 작업할 때는 프리티어를 쓰기 때문에 "editor.defaultFormatter": "esbenp.prettier-vscode" 설정은 그대로 두고 "[rust]": { } 중괄호 안에 러스트 쓸 때의 defaultFormatter로 rust-analyzer를 지정해주었다.

    • 저장 시 자동 포매팅이 잘 되는지 확인한다~



RLS vs rust-analyzer

  • rust-analyzer는 ‘RLS에 대한 대안적인 rust language server’라고 한다.
  • rust-analyzer에 따르면 ‘RLS와 rust-analyzer는 러스트를 이해하기 위해 근본적으로 다른 아키텍처를 사용한다. RLS는 전체 프로젝트에 대한 컴파일러를 실행하고 컴파일 과정에서 파생된 팩트(?)가 포함된 거대한 JSON 파일을 덤프하는 방식으로 동작한다.’고 하고, ‘rust-analyzer는 지속적인 컴파일러 프로세스를 유지함으로써 작동하며, 코드가 변경될 때 on-demand 방식으로 분석할 수 있다.’고 한다. (...오케이)
  • 그래서 RLS는 뭣일까? RLS에 따르면 ‘RLS는 백그라운드에서 실행되는 서버를 제공하여 IDE, 편집기 및 기타 도구에 Rust 프로그램에 대한 정보를 제공한다. 기호 검색, 포맷, 코드 완성 등의 기능을 지원하며 이름 변경과 리팩터링이 가능하다.’고 한다.
  • RLS와 rust-analyzer 중 뭘 쓰는 게 더 좋은 건지 궁금해서 검색을 좀 해봤다. 위키백과에서도 둘 다 가장 유명한 랭귀지 서버라고 하고.. RLS vs rust-analyzer를 구글링해보니 많은 글들이 있었고, 뭐가 더 낫다고 확신할 수는 없는 분위기...? 취향 차이...??? 근데... RLS가 왜 아직도 구린 것인지 한탄하는 레딧 글에 RLS 개발자분이 rust-analyzer이 훨씬 나으니 rust-analyzer 쓰라고 댓글을 달았다 ㅠㅠ ㅋㅋㅋㅋ 그래서 이렇게.. rust-analyzer를 쓰기로 결정.. 으악..