Skip to content

Unqualified line! macro usage inside info! causes issues with ratatui_macros #3023

@kdheepak

Description

@kdheepak

Just importing ratatui_macros::line causes tracing::info to compile error:

use ratatui_macros::line;
use tracing::info;

fn main() {
    info!("Hello, world!");
}

Here's the error:

error: expected a literal
 --> src/main.rs:5:5
  |
5 |     info!("Hello, world!");
  |     ^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: only literals (like `"foo"`, `-42` and `3.14`) can be passed to `concat!()`
  = note: this error originates in the macro `line` which comes from the expansion of the macro `info` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
   --> src/main.rs:5:5
    |
5   |     info!("Hello, world!");
    |     ^^^^^^^^^^^^^^^^^^^^^^
    |     |
    |     expected `u32`, found `Line<'_>`
    |     arguments to this enum variant are incorrect
    |

with this Cargo.toml

[package]
name = "test-ratatui-macros"
version = "0.1.0"
edition = "2021"

[dependencies]
log = "0.4.22"
ratatui = "0.27.0"
ratatui-macros = "0.4.2"
tracing = "0.1.40"

I get similar errors with other macros from tracing, but I don't get any errors with log::info! or other macros from log.

Here's the diff of cargo expand without and with use ratatui_macros::line;

--- without_ratatui_macros.txt  2024-06-30 00:19:44
+++ with_ratatui_macros.txt     2024-06-30 00:19:54
@@ -3,6 +3,7 @@
 use std::prelude::rust_2021::*;
 #[macro_use]
 extern crate std;
+use ratatui_macros::line;
 use tracing::info;
 fn main() {
     {
@@ -10,11 +11,11 @@
         static __CALLSITE: ::tracing::callsite::DefaultCallsite = {
             static META: ::tracing::Metadata<'static> = {
                 ::tracing_core::metadata::Metadata::new(
-                    "event src/main.rs:5",
+                    (/*ERROR*/),
                     "test_ratatui_macros",
                     ::tracing::Level::INFO,
                     ::core::option::Option::Some("src/main.rs"),
-                    ::core::option::Option::Some(5u32),
+                    ::core::option::Option::Some(::ratatui::text::Line::default()),
                     ::core::option::Option::Some("test_ratatui_macros"),
                     ::tracing_core::field::FieldSet::new(
                         &["message"],

tracing seems to be adding a line like this ::core::option::Option::Some(::ratatui::text::Line::default()), when use ratatui_macros::line is in the file.

The issue stems from unqualified usages of line! like these:

line!()

Making them std::line!() should resolve this issue.

Thanks to @joshka for helping figure out the issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions