Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Callbacks: Give ItemInfo a mangled_name field. generated_link_name_override shouldn't receive the result of generated_name_override. #3107

Open
Molot2032 opened this issue Feb 2, 2025 · 0 comments · May be fixed by #3108

Comments

@Molot2032
Copy link
Contributor

generated_link_name_override and generated_name_override are passed an ItemInfo struct:

pub struct ItemInfo<'a> {
    /// The name of the item
    pub name: &'a str,
    /// The kind of item
    pub kind: ItemKind,
}

The code calling these callbacks (paraphrased):

    let mut name = base_item_name;
    if let Some(overriden_name) = callbacks.generated_name_override(ItemInfo {
        name,
        kind
    }) {
        name = override_name;
    }
    let mangled_name: Option<String> = get_mangled_name(); // Note: currently not made available to the callbacks.

    let link_name: Option<String> = callbacks.generated_link_name_override(ItemInfo {
        name, // Note: given the modified version from generated_name_override.
        kind
    });
    ...

Note that generated_link_name_override's passed name is first modified by generated_name_override. I found this counter-intuitive.
Also, link_name_override is not passed the mangled name at all.

I propose two changes:

  1. generated_link_name_override's received ItemInfo will not affected by the previous callback.
    • If a user wants this old behaviour they can simply call their implementation of generated_name_override at the start.
  2. ItemInfo will get a new field mangled_name: Option<&str>, providing clang's mangled name for the item.
    • Admittedly, I can only think of two uses so far: mapping incorrect mangled names to correct ones, and gleaning extra information about an item from its mangled name. Regardless, why not provide this to the user just in case it comes in handy? Intuitively, a callback named "link name override" should probably receive the link name that would be inserted by default, no?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant