Skip to content

rust-analyzer fails to call cargo metadata with custom target spec #20959

@PatchMixolydic

Description

@PatchMixolydic

rust-analyzer version: rust-analyzer version: 0.4.2665-standalone [/home/patchmixolydic/.vscode-oss/extensions/rust-lang.rust-analyzer-0.4.2665-linux-x64/server/rust-analyzer]

rustc version: rustc 1.93.0-nightly (34f954f 2025-10-25)

editor or extension: VSCodium, extension version 0.4.2665 (prerelease)

relevant settings:
.cargo/config.toml:

[build]
target = "x86_64-unknown-snowkernel.json"

x86_64-unknown-snowkernel.json:

{
    "arch": "x86_64",
    "code-model": "kernel",
    "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128",
    "disable-redzone": true,
    "executables": true,
    "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float",
    "linker": "rust-lld",
    "linker-flavor": "ld.lld",
    "llvm-target": "x86_64-unknown-none-elf",
    "max-atomic-width": 64,
    "os": "none",
    "panic-strategy": "abort",
    "plt-by-default": false,
    "position-independent-executables": false,
    "relocation-model": "static",
    "rustc-abi": "x86-softfloat",
    "target-c-int-width": 32,
    "target-endian": "little",
    "target-pointer-width": 64
}

repository link (if public, optional): MCVE

Opening src/main.rs in VSCodium causes rust-analyzer to fail with a warning:

Error log
[Error - 12:04:22 PM] Server process exited with code 0.
2025-11-02T12:04:22.917411284-06:00  WARN `cargo metadata` failed and returning succeeded result with `--no-deps` error=`cargo metadata` exited with an error: error: target path "x86_64-unknown-snowkernel.json" is not a valid file

Caused by:
  No such file or directory (os error 2)


Stack backtrace:
   0: anyhow::error::<impl core::convert::From<E> for anyhow::Error>::from
   1: project_model::cargo_workspace::FetchMetadata::exec
   2: project_model::sysroot::Sysroot::load_workspace
   3: std::sys::backtrace::__rust_begin_short_backtrace
   4: core::ops::function::FnOnce::call_once{{vtable.shim}}
   5: std::sys::thread::unix::Thread::new::thread_start
   6: <unknown>
   7: <unknown>
2025-11-02T12:04:23.21419815-06:00  WARN `cargo metadata` failed and returning succeeded result with `--no-deps` error=`cargo metadata` exited with an error: error: target path "x86_64-unknown-snowkernel.json" is not a valid file

Caused by:
  No such file or directory (os error 2)


Stack backtrace:
   0: anyhow::error::<impl core::convert::From<E> for anyhow::Error>::from
   1: project_model::cargo_workspace::FetchMetadata::exec
   2: project_model::sysroot::Sysroot::load_workspace
   3: std::sys::backtrace::__rust_begin_short_backtrace
   4: core::ops::function::FnOnce::call_once{{vtable.shim}}
   5: std::sys::thread::unix::Thread::new::thread_start
   6: <unknown>
   7: <unknown>
2025-11-02T12:04:23.4442489-06:00  WARN `cargo metadata` failed and returning succeeded result with `--no-deps` error=`cargo metadata` exited with an error: error: target path "x86_64-unknown-snowkernel.json" is not a valid file

Caused by:
  No such file or directory (os error 2)


Stack backtrace:
   0: anyhow::error::<impl core::convert::From<E> for anyhow::Error>::from
   1: project_model::cargo_workspace::FetchMetadata::exec
   2: project_model::sysroot::Sysroot::load_workspace
   3: std::sys::backtrace::__rust_begin_short_backtrace
   4: core::ops::function::FnOnce::call_once{{vtable.shim}}
   5: std::sys::thread::unix::Thread::new::thread_start
   6: <unknown>
   7: <unknown>
2025-11-02T12:04:23.56289269-06:00 ERROR Received compiler message for unknown package: path+file:///home/patchmixolydic/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/compiler-builtins/compiler-builtins#compiler_builtins@0.1.160
 path+file:///home/patchmixolydic/Programming/Rust/ra-target-json#0.1.0
2025-11-02T12:04:23.567259565-06:00 ERROR Received compiler message for unknown package: path+file:///home/patchmixolydic/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/compiler-builtins/compiler-builtins#compiler_builtins@0.1.160
 path+file:///home/patchmixolydic/Programming/Rust/ra-target-json#0.1.0
2025-11-02T12:04:25.468548069-06:00  WARN overly long loop turn took 152.574921ms (event handling took 151.982301ms): PrimeCaches(End { cancelled: false })

In the project this was minimized from, this also breaks autocompletion and typechecking (eg. calling <[T]>::iter on SpinMutexGuard<'_, Vec<T>> produces an unknown type), though it seems to work in simpler cases.

Running cargo metadata manually seems to work fine. The target spec is accepted by rustc (via cargo build/cargo run) and can successfully build a kernel.

Metadata

Metadata

Assignees

Labels

A-cargocargo related issuesC-bugCategory: bug

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions