As I added more and more cases, I found the dir structure hard to navigate. The new structure follows how you read a type: e.g. struct { F *string } -> struct/ptr_string This exposed some redundant cases and some missing cases, too.