dtolnay / paste

Macros for all your token pasting needs
Apache License 2.0
1.02k stars 56 forks source link

Edge cases with `:camel` #73

Open Elrendio opened 2 years ago

Elrendio commented 2 years ago

Hey :wave:

Thanks for the awesome crate 🙏

Reading from the code they're seems to be some un-intentional edge cases with :camel. For example:

  1. my__ident will be converted to MyIdent and not My_Ident.
  2. _my_ident will be converted MyIdent intead of _MyIdent (maybe intentional)

I don't think any of the PascalCase, the CamelCase nor the snake_case conventions specify those edge cases.

My use case for 1 is the following: We have a data base containing a table with quite a lot of colums, the columns name are therefore scoped with scope_with_multiple_words__my_name. The database is accessed with diesel, the column name is therefore taken as such. I need to convert those columns to a Grpc enum, the enum variants are scoped as: ScopeWithMultipleWords_MyName

I don't have a specific use case for 2, just found that it was weird to remove the first _ if someone intentionally put it there.

Would you be open to such change? If yes, I can submit a PR :blush:

(I do realise it's a breaking change, I just don't think there's a lot of people with ident containing two or more consecutive underscore)

mdeville commented 1 day ago

@Elrendio Here's a proposed solution in https://github.com/dtolnay/paste/pull/104

You can add test cases in this playground to see it this fits your need https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=7f87df1a5cfad900ab78270d2b90e28f