rust-lang / rust-lang/rust-analyzer

FP `Syntax Error: expected an item`

Open
#23,144 9 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.