[3.0] Refactor PrettifyNames and finalize naming features#2564
Draft
Exanite wants to merge 151 commits intodotnet:develop/3.0from
Draft
[3.0] Refactor PrettifyNames and finalize naming features#2564Exanite wants to merge 151 commits intodotnet:develop/3.0from
Exanite wants to merge 151 commits intodotnet:develop/3.0from
Conversation
…ld used by other bindings The default acronym threshold was changed during #29, which was merged as part of dotnet#2503.
Considering we decided to follow Microsoft's Framework Design Guidelines (acronym threshold of 2) for the bindings and rest of the API, might as well be consistent here.
… separation hack (no longer necessary)
…mbers are normalized
This lets us handle prefixing and prettification separately, which notably is important if we add prefixes after prettification. We want to prefix the final name, not the intermediate name in this case.
…igured (cherry picked from commit bc94260)
…ous that it is not the last trimmer
This no longer makes sense to keep and enabling features by baseline version seems fiddly. If we need to toggle features for newer versions, we can explicitly add a boolean config option.
…essor and ReapplyAffixesNameProcessor
Kinda a cop out decision, but it keeps thing simple (and thus maintainable) and implementing it fully seems overkill for what we need.
… for function pointer types are named
This is because we no longer output the separating underscore in ExtractNestedTyping
… of INameTrimmer registrations
…ed-struct-name-affixes
…nvention Note that the goal is to eventually remove the name overrides for the `EFXEAXREVERBPROPERTIESflLateReverbPan` and `-Delegate` cases entirely. This is because these are theoretically possible to handle automatically and the reason it doesn't work is due to an edge case interaction with the name override system. See the "Tasks" section here for more info: dotnet#2555
…dditionalDiscriminatorAffixes
This wasn't an actual observed issue, but is a possible edge case I noticed when I was reading the code. The underlying data collection is a hashset or dictionary, both of which have non-deterministic iteration order. This commit adds a tie-breaker to prevent this issue from possibly happening.
…inatorAffixes_ReversedPriority and add more comments on why the tests exist
…ot getting chosen properly
…t comments/variable names to be clearer
… and update test cases to reflect expected behavior
I expected this to be an issue *eventually*, but apparently it also affects the SDL output already. This is probably because SDL has multiple overloads of the SDL_main method, which my test case does not test for.
This was referenced Apr 9, 2026
This new snapshot matches the expected output that I wrote in the comments earlier. I just forgot to update the snapshot.
…penAL overrides that are now unnecessary
… update test to indicate that one level of scoping is now supported
…e verbatim value of the referenced name
…e code and config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of the PR
Context
This PR chains off of #2557 and completes the final tasks noted in the PR.
This is a separate PR since this PR has a fundamentally different focus than #2557: this PR focuses on PrettifyNames itself while #2557 focuses on moving the prefix trimming code out of PrettifyNames.
What the PR does
The core goal of this PR is to make PrettifyNames easier to understand and maintain.
This PR rewrites the core PrettifyNames logic to be done by "INameProcessors", apply sequential transformations to the names in the generated bindings.
INameProcessorreplaces the oldINameTrimmerinterface.INameProcessoris private toPrettifyNamesunlikeINameTrimmer.INameTrimmerused to be an external extension point for thePrettifyNameslogic and was registered to the DI container.This is no longer necessary because there are other ways to configure and extend the PrettifyNames logic now.
This PR also does the following:
GetSymbolsWithNameand LINQRelated issues, Discord discussions, or proposals
The "parent" PR: #2557
Further Comments
Tasks
INameProcessorsALBUFFERCALLBACKTYPESOFTDelegateuses the native name ofBufferCallbackSOFT(native nameALBUFFERCALLBACKTYPESOFT) as a prefix. This should allowPrettifyNamesto replaceALBUFFERCALLBACKTYPESOFTinALBUFFERCALLBACKTYPESOFTDelegatewithBufferCallbackSOFT, thus resulting inBufferCallbackSOFTDelegate. However, this is not currently the case because the name lookup fails.INameProcessorrewrite task above