rust-lang / rust-lang/rust-analyzer
FP `Syntax Error: expected an item`
Open
Nobody has claimed this yet.
A-parser
C-bug
E-easy
E-has-instructions
good first issue
- Dominant language
- Rust
- Stars
- 16.9k
- Forks
- 2.2k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 72
Description
The following code
#!//bin/bash
// This could not possibly be a shebang & also a valid rust file, since a Rust file
// can't start with `[`
/*
[ (mixing comments to also test that we ignore both types of comments)
*/
[allow(unused_variables)]
//@ check-pass
//@ reference: input.shebang.inner-attribute
fn main() {
let x = 5;
}
comiled with rustc (cargo check):
Checking _sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65 v0.1.0 (/tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.21s
but errors were issued by rust-analyzer diagnostics
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 0 } to LineCol { line: 10, col: 0 }: Syntax Error: expected an item
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 6 } to LineCol { line: 10, col: 6 }: Syntax Error: expected an item
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 6 } to LineCol { line: 10, col: 6 }: Syntax Error: expected an item
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 23 } to LineCol { line: 10, col: 23 }: Syntax Error: expected an item
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 23 } to LineCol { line: 10, col: 23 }: Syntax Error: expected an item
at crate _sneaky_attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65, file /tmp/icemaker_global_tempdir.uJBZExYkqtQ8/rustc_testrunner_tmpdir.EF4dqIfyIExj/_sneaky-attrib_e22c45cc39f58f9436854f11bb2b3302d5e97a65/src/main.rs: Error SyntaxError from LineCol { line: 10, col: 24 } to LineCol { line: 10, col: 24 }: Syntax Error: expected an item
diagnostic scan complete
Error: diagnostic error detected
Stack backtrace:
0: <anyhow::Error>::msg::<&str>
at /home/matthias/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.102/src/backtrace.rs:10:14
1: anyhow::__private::format_err
at /home/matthias/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/anyhow-1.0.102/src/lib.rs:687:13
2: <rust_analyzer::cli::flags::Diagnostics>::run_
at /home/matthias/vcs/github/rust-analyzer/crates/rust-analyzer/src/cli/diagnostics.rs:123:13
3: <rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}
at /home/matthias/vcs/github/rust-analyzer/crates/rust-analyzer/src/cli/diagnostics.rs:20:29
4: <stdx::thread::Builder>::spawn::<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}
at /home/matthias/vcs/github/rust-analyzer/crates/stdx/src/thread.rs:74:13
5: std::sys::backtrace::__rust_begin_short_backtrace::<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:166:18
6: std::thread::lifecycle::spawn_unchecked::<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}::{closure#0}
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/lifecycle.rs:70:13
7: <core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:275:9
8: std::panicking::catch_unwind::do_call::<core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}::{closure#0}>, core::result::Result<(), anyhow::Error>>
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:576:43
9: std::panicking::catch_unwind::<core::result::Result<(), anyhow::Error>, core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}::{closure#0}>>
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:544:19
10: std::panic::catch_unwind::<core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}::{closure#0}>, core::result::Result<(), anyhow::Error>>
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:359:14
11: std::thread::lifecycle::spawn_unchecked::<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1}
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/lifecycle.rs:68:26
12: <std::thread::lifecycle::spawn_unchecked<<stdx::thread::Builder>::spawn<<rust_analyzer::cli::flags::Diagnostics>::run::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#0}, core::result::Result<(), anyhow::Error>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
at /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
13: <alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output = ()> + core::marker::Send> as core::ops::function::FnOnce<()>>::call_once
at /rustc/12c36e2539c54397c51d6ea4401defd8768a4f5b/library/alloc/src/boxed.rs:2318:9
14: <std::sys::thread::unix::Thread>::new::thread_start
at /rustc/12c36e2539c54397c51d6ea4401defd8768a4f5b/library/std/src/sys/thread/unix.rs:123:17
15: <unknown>
16: <unknown>
version information
rust-analyzer 0.0.0 (b2d445b22a 2026-08-11)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the provided Rust snippet using rust-analyzer diagnostics and compare it with cargo check. Start at crates/rust-analyzer/src/cli/diagnostics.rs:123, then trace how the reported syntax errors are produced for the shebang and inner attribute. Done means the diagnostic scan no longer reports false expected an item errors for this input.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers, devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 62/100