Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions editor/src/messages/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ mod test {
fn generate_message_tree() {
let result = Message::build_message_tree();
let mut file = std::fs::File::create("../hierarchical_message_system_tree.txt").unwrap();
file.write_all(format!("{} `{}`\n", result.name(), result.path()).as_bytes()).unwrap();
file.write_all(format!("{} `{}#L{}`\n", result.name(), result.path(), result.line_number()).as_bytes()).unwrap();
if let Some(variants) = result.variants() {
for (i, variant) in variants.iter().enumerate() {
let is_last = i == variants.len() - 1;
Expand All @@ -80,7 +80,8 @@ mod test {
if tree.path().is_empty() {
file.write_all(format!("{}{}{}\n", prefix, branch, tree.name()).as_bytes()).unwrap();
} else {
file.write_all(format!("{}{}{} `{}`\n", prefix, branch, tree.name(), tree.path()).as_bytes()).unwrap();
file.write_all(format!("{}{}{} `{}#L{}`\n", prefix, branch, tree.name(), tree.path(), tree.line_number()).as_bytes())
.unwrap();
}

// Print children if any
Expand Down Expand Up @@ -116,7 +117,8 @@ mod test {
if data.name().is_empty() && tree.name() != FRONTEND_MESSAGE_STR {
panic!("{}'s MessageHandler is missing #[message_handler_data]", tree.name());
} else if tree.name() != FRONTEND_MESSAGE_STR {
file.write_all(format!("{}{}{} `{}`\n", prefix, branch, data.name(), data.path()).as_bytes()).unwrap();
file.write_all(format!("{}{}{} `{}#L{}`\n", prefix, branch, data.name(), data.path(), data.line_number()).as_bytes())
.unwrap();

for (i, field) in data.fields().iter().enumerate() {
let is_last_field = i == len - 1;
Expand All @@ -133,7 +135,8 @@ mod test {
if data.path().is_empty() {
file.write_all(format!("{}{}{}\n", prefix, "└── ", data.name()).as_bytes()).unwrap();
} else {
file.write_all(format!("{}{}{} `{}`\n", prefix, "└── ", data.name(), data.path()).as_bytes()).unwrap();
file.write_all(format!("{}{}{} `{}#L{}`\n", prefix, "└── ", data.name(), data.path(), data.line_number()).as_bytes())
.unwrap();
}
for (i, field) in data.fields().iter().enumerate() {
let is_last_field = i == len - 1;
Expand Down
5 changes: 3 additions & 2 deletions editor/src/utility_traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ pub trait HierarchicalTree {
fn build_message_tree() -> DebugMessageTree;

fn message_handler_data_str() -> MessageData {
MessageData::new(String::new(), Vec::new(), "")
MessageData::new(String::new(), Vec::new(), "", 0)
}

fn message_handler_str() -> MessageData {
MessageData::new(String::new(), Vec::new(), "")
MessageData::new(String::new(), Vec::new(), "", 0)
}

fn path() -> &'static str {
Expand All @@ -64,5 +64,6 @@ pub trait HierarchicalTree {
pub trait ExtractField {
fn field_types() -> Vec<(String, usize)>;
fn path() -> &'static str;
fn line_number() -> usize;
fn print_field_types();
}
19 changes: 17 additions & 2 deletions editor/src/utility_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ pub struct MessageData {
name: String,
fields: Vec<(String, usize)>,
path: &'static str,
line_number: usize,
}

impl MessageData {
pub fn new(name: String, fields: Vec<(String, usize)>, path: &'static str) -> MessageData {
MessageData { name, fields, path }
pub fn new(name: String, fields: Vec<(String, usize)>, path: &'static str, line_number: usize) -> MessageData {
MessageData { name, fields, path, line_number }
}

pub fn name(&self) -> &str {
Expand All @@ -21,6 +22,10 @@ impl MessageData {
pub fn path(&self) -> &'static str {
self.path
}

pub fn line_number(&self) -> usize {
self.line_number
}
}

#[derive(Debug)]
Expand All @@ -31,6 +36,7 @@ pub struct DebugMessageTree {
message_handler: Option<MessageData>,
message_handler_data: Option<MessageData>,
path: &'static str,
line_number: usize,
}

impl DebugMessageTree {
Expand All @@ -42,6 +48,7 @@ impl DebugMessageTree {
message_handler: None,
message_handler_data: None,
path: "",
line_number: 0,
}
}

Expand All @@ -53,6 +60,10 @@ impl DebugMessageTree {
self.path = path;
}

pub fn set_line_number(&mut self, line_number: usize) {
self.line_number = line_number
}

pub fn add_variant(&mut self, variant: DebugMessageTree) {
if let Some(variants) = &mut self.variants {
variants.push(variant);
Expand Down Expand Up @@ -81,6 +92,10 @@ impl DebugMessageTree {
self.path
}

pub fn line_number(&self) -> usize {
self.line_number
}

pub fn variants(&self) -> Option<&Vec<DebugMessageTree>> {
self.variants.as_ref()
}
Expand Down
7 changes: 7 additions & 0 deletions proc-macros/src/extract_fields.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ pub fn derive_extract_field_impl(input: TokenStream) -> syn::Result<TokenStream>
let generics = &input.generics;
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();

let line_number = struct_name.span().start().line;

let fields = match &input.data {
Data::Struct(data) => match &data.fields {
Fields::Named(fields) => &fields.named,
Expand Down Expand Up @@ -50,6 +52,11 @@ pub fn derive_extract_field_impl(input: TokenStream) -> syn::Result<TokenStream>
fn path() -> &'static str {
file!()
}

fn line_number() -> usize {
#line_number
}

}
};

Expand Down
4 changes: 4 additions & 0 deletions proc-macros/src/hierarchical_tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ pub fn generate_hierarchical_tree(input: TokenStream) -> syn::Result<TokenStream
let input = parse2::<DeriveInput>(input)?;
let input_type = &input.ident;

let line_number = input_type.span().start().line;

let data = match &input.data {
Data::Enum(data) => data,
_ => return Err(syn::Error::new(Span::call_site(), "Tried to derive HierarchicalTree for non-enum")),
Expand Down Expand Up @@ -101,6 +103,8 @@ pub fn generate_hierarchical_tree(input: TokenStream) -> syn::Result<TokenStream

message_tree.set_path(file!());

message_tree.set_line_number(#line_number);

message_tree
}
}
Expand Down
17 changes: 12 additions & 5 deletions proc-macros/src/message_handler_data_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream

let input_type = path.segments.last().map(|s| &s.ident).unwrap();

let handler_line_number = input_type.span().start().line;

// Extract the message type from the trait path
let trait_path = match &impl_block.trait_ {
Some((_, path, _)) => path,
Expand All @@ -40,14 +42,16 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream
// Get just the base identifier (ToolMessageData) without generics
let type_name = &type_path.path.segments.first().unwrap().ident;

let handler_data_line_number = type_name.span().start().line;

quote! {
#input_item
impl #message_type {
pub fn message_handler_data_str() -> MessageData {
MessageData::new(format!("{}", stringify!(#type_name)), #type_name::field_types(), #type_name::path())
MessageData::new(format!("{}", stringify!(#type_name)), #type_name::field_types(), #type_name::path(), #type_name::line_number())
}
pub fn message_handler_str() -> MessageData {
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path())
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())

}
}
Expand All @@ -57,7 +61,7 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream
#input_item
impl #message_type {
pub fn message_handler_str() -> MessageData {
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path())
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
}
}
},
Expand All @@ -67,16 +71,19 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream
syn::Type::Path(type_path) => &type_path.path.segments.first().unwrap().ident,
_ => return Err(syn::Error::new(type_reference.elem.span(), "Expected type path")),
};

let type_line_number = type_ident.span().start().line;

let tr = clean_rust_type_syntax(type_reference.to_token_stream().to_string());
quote! {
#input_item
impl #message_type {
pub fn message_handler_data_str() -> MessageData {
MessageData::new(format!("{}", #tr), #type_ident::field_types(), #type_ident::path())
MessageData::new(format!("{}", #tr), #type_ident::field_types(), #type_ident::path(), #type_ident::line_number())
}

pub fn message_handler_str() -> MessageData {
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path())
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())

}
}
Expand Down
Loading