INCOMPLETE_INCLUDE in rustc_lint::builtin - Rust
Description: The `incomplete_include` lint detects the use of the `include!` macro with a file that contains more than one expression.

Skip to main content

## INCOMPLETE_INCLUDE

# Static INCOMPLETE_INCLUDE

Source

    pub static INCOMPLETE_INCLUDE: &'static Lint

Expand description

The `incomplete_include` lint detects the use of the `include!` macro with a file that contains more than one expression.

#### §Example

ⓘ

    fn main() {
        include!("foo.txt");
    }

where the file `foo.txt` contains:

    println!("hi!");

produces:

    error: include macro expected single expression in source
     --> foo.txt:1:14
      |
    1 | println!("1");
      |              ^
      |
      = note: `#[deny(incomplete_include)]` on by default

#### §Explanation

The `include!` macro is currently only intended to be used to include a single expression or multiple items. Historically it would ignore any contents after the first expression, but that can be confusing. In the example above, the `println!` expression ends just before the semicolon, making the semicolon “extra” information that is ignored. Perhaps even more surprising, if the included file had multiple print statements, the subsequent ones would be ignored!

One workaround is to place the contents in braces to create a block expression. Also consider alternatives, like using functions to encapsulate the expressions, or use proc-macros.

This is a lint instead of a hard error because existing projects were found to hit this error. To be cautious, it is a lint for now. The future semantics of the `include!` macro are also uncertain, see issue #35560.