VScode에서 Rust의 보완 기능을 사용하려고 하는데 이동할 수 없습니다
통과(건너뛸 수 있음)
최근 업무상 C-클래스 언어를 사용해 사용법을 모르는 것은 아니지만, 메모리에서 방출됐느냐, 지침, 참조 교부 등 현대 프로그래밍 언어로 볼 때 굉장히 번거로운 일을 했다고 느낄 수 있다.(나는 결코 싫어하지 않는다.)
Rust의 존재가 C와 C++를 대체하는 것을 목표로 한다는 것은 알지만 한 번도 사용하지 않았다.
비교 대상인 C-클래스 언어를 어렵게 비즈니스에서 사용했기 때문에 이들과 비교할 때 Rust가 얼마나 우수한지 해보고 싶었고, 이것이 내가 Rust를 접하게 된 계기가 됐다.
메시지
나는 컴퓨터에 컴파일러 같은 것을 많이 넣어서 환경을 오염시키는 것을 좋아하지 않는다.
기본적으로 Docker 내에서 환경을 구축하고 그 안에서 놀아요.
Docker로 환경을 구축하는 것 자체가 그리 어려운 일은 아니다.(집에서 하면)
다음 구성을 통해 Rust를 조금이나마 수행할 수 있는 환경을 구축했다.
Dockerfile
FROM rust:1.48-buster
RUN apt-get update & apt-get install git
RUN cargo install cargo-edit #←予め入れて置いた方がいい、結構重め
docker-compose.ymlversion: "3"
services:
rust-app:
container_name: "rust-app"
build:
context: .
dockerfile: Dockerfile
tty: true
volumes:
- ..:/workspace.rust/src/app
.devcontainer.json{
"name": "Learning Rust",
"dockerComposeFile": "docker-compose.yml",
"service": "rust-app",
"workspaceFolder": "/workspace.rust",
// Use this environment variable if you need to bind mount your local source code into a new container.
"remoteEnv": {
"LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}",
},
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-azuretools.vscode-docker",
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "docker --version",
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
}
그럼 이것만으로도 리모트 컨테이너를 컨테이너에 연결해 Rust로 놀 수 있다.하지만 Rust의 확장 기능을 원합니다.
다 채우지 못해서 좀 엄격해요.
첫 번째 선택은 다음과 같습니다.
이렇게 하면 보충도 효과가 있고 커서로 하면 doc도 볼 수 있어서 정말 큰 도움이 됐어요!!!
이런 시기도 있었고...
잘 못 써요.
전혀 보완되지 않아 아무래도 1046791410에 외부 크레인을 설치해도 보완 기능이 반응하지 않아 설치됐는데도 읽지 못했다.
컨테이너를 다시 열면(Remote-Containers:Reopen 명령) 읽을 수 있지만 하나하나 다시 열기도 번거롭다.
확장 기능에 대한 설명을 자세히 읽은 후 다음과 같은 설명이 있습니다.
This extension is deliberately conservative about snippets and doesn't include too many. If you want more, check out Trusty Rusty Snippets.
다 채우기에는 안 어울릴 것 같아요.
나는 그곳에서 다른 확장 기능이 있는지 찾아보고 싶다. 사이트의 설명문에는 또 다른languageserver도 소개되어 있다.
Rust support is powered by a separate language server - either by the official Rust Language Server (RLS) or rust-analyzer, depending on the user's preference. If you don't have it installed, the extension will install it for you (with permission).
rust-analyzer 같은 것도 있는 것 같아요.
더 이상 소용없다
나는 즉시 rust-analyzer를 확장하여 설치했다.
버젼에서도 알 수 있듯이 아직 개발 중인 랑uage 서버지만 RLS보다 보완 기능이 더 핫한 것 같다.
근데 또 안 움직여.
뿐만 아니라 나는 잘못도 토해냈다.
rust-analyzer failed to discover workspace
작업공간을 찾을 수 없습니다...?
원인을 조사하다
rust-analyzer를 가져올 때 폴더는 다음과 같이 구성됩니다.
한 작업 공간에 여러 항목이 있다.
그리고 작업 공간이 확실히 존재한다.
.devcontainer.제이슨.rust로 명시적으로 지정합니다.
뭐가 나쁜데?
workspace.rust/
└src/
└app/
├sample1/
│ ├src/
│ │ └main.rs
│ └Cargo.toml
├sample2/
│ ├src/
│ │ └main.rs
│ └Cargo.toml
├sample3/
│ ├src/
│ │ └main.rs
│ └Cargo.toml
└sample4/
├src/
│ └main.rs
└Cargo.toml
까닭
결론적으로 한 작업 공간에 여러 항목이 존재하기 때문이다.
다음은 원인이 판명된 github의 Issue 링크입니다.
현재 단계는 단일 작업 공간에서 하나의 프로젝트가 아니라면 운영되지 않는다.
다만 복수 지원 준비 자체는 정비 중인 듯 검증이 부족해 이뤄지지 않았다.
수정 및 개선
결과는 다음과 같다.
Dockerfile
FROM rust:1.48-buster
RUN apt-get update & apt-get install git
RUN rustup component add rust-src #新規追加、rust-analyzer導入時に必要
RUN cargo install cargo-edit #←予め入れて置いた方がいい、結構重め
docker-compose.ymlversion: "3"
services:
rust-app:
container_name: "rust-app"
build:
context: .
dockerfile: Dockerfile
tty: true
volumes:
- ..:/workspace.rust
.devcontainer.json{
"name": "Learning Rust",
"dockerComposeFile": "docker-compose.yml",
"service": "rust-app",
"workspaceFolder": "/workspace.rust",
// Use this environment variable if you need to bind mount your local source code into a new container.
"remoteEnv": {
"LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}",
},
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-azuretools.vscode-docker",
/// rust-analyzerを設定 ///
"matklad.rust-analyzer",
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "docker --version",
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
}
폴더 설정을 간단한 형태로 수정했습니다.1046791310 컨테이너를 재건하여 컨테이너에 연결하면...
rust-analyzer는 무사히 반응했다.
Reference
이 문제에 관하여(VScode에서 Rust의 보완 기능을 사용하려고 하는데 이동할 수 없습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/fah_72946_engr/articles/cf53487d3cc5fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)