-
Notifications
You must be signed in to change notification settings - Fork 524
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
Handle keyword Self
after stripping enum type prefix
#998
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems there are more keywords with the same problem: https://github.com/rust-lang/rust/blob/d7723b21910075a3c38c2b6e64b2467394c93724/library/proc_macro/src/bridge/symbol.rs#L82
I suggest fixing this for all these keywords
The thing is, we know that the result starts with an upper-case letter, as it is already converted to PascalCase, so Self really was the only issue. I can definitely do that though! Thank you for your consideration! |
I have moved the sanitizing of identifiers to a common function that can be used by all the others. What do you think? I think it'd definitely a lot safer this way |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Splitting into sanitize_identifier
is great! This handles much more cases now.
I have a few small comments left.
tests/src/enum_keyword_variant.rs
Outdated
@@ -0,0 +1,7 @@ | |||
mod enum_keyword_variant { | |||
// #![deny(unused_results)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This comment can be removed
prost-build/src/ident.rs
Outdated
/// It also tries to handle cases where the stripped name would be | ||
/// invalid - for example, if it were to begin with a number. | ||
/// | ||
/// The stripped name can be `Self`, which is sanitized analogously to [to_upper_camel] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This last line doesn´t add information, as to_upper_camel
docs doesn't explain how it is handled. Either remove or describe how it is sanitized.
prost-build/src/ident.rs
Outdated
#[test] | ||
fn test_strip_enum_prefix() { | ||
assert_eq!(strip_enum_prefix("Foo", "FooBar"), "Bar"); | ||
assert_eq!(strip_enum_prefix("Foo", "Foobar"), "Foobar"); | ||
assert_eq!(strip_enum_prefix("Foo", "Foo"), "Foo"); | ||
assert_eq!(strip_enum_prefix("Foo", "Bar"), "Bar"); | ||
assert_eq!(strip_enum_prefix("Foo", "Foo1"), "Foo1"); | ||
} | ||
|
||
#[test] | ||
fn test_strip_enum_prefix_resulting_in_keyword() { | ||
assert_eq!(strip_enum_prefix("Foo", "FooBar"), "Bar"); | ||
assert_eq!(strip_enum_prefix("Foo", "FooSelf"), "Self_"); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would combine these two tests
@@ -47,6 +73,67 @@ mod tests { | |||
|
|||
use super::*; | |||
|
|||
#[test] | |||
fn test_sanitize_identifier() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this thorough test.
enum Grooming { | ||
UNSPECIFIED = 0; | ||
ASSISTED = 1; | ||
SELF = 2; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this have a keyword as well? for example: ELSE = 3;
Should be all done now |
Thanks for your contribution |
_PROST!_ is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files. This patch update brings new fixes: - fix: include_file should handle proto without package (tokio-rs#1002) - Place Config::format behind the format feature flag - Handle keyword `Self` after stripping enum type prefix (tokio-rs#998) ## Documentation - fix(readme): fix the link and badge for CI (tokio-rs#1049) ## Internal - style(codegen): `Syntax` to a separate file (tokio-rs#1029) - chore(codegen): extract c string escaping to a separate file (tokio-rs#1028) - style(prost-build): `CodeGenerator::boxed` method (tokio-rs#1019) - style(prost-build): Consolidate field data into struct (tokio-rs#1017) - style(prost-build): `BytesType and MapType` into a `collections` module. (tokio-rs#1030) - style(prost-build): Split `Config` and `Module` into a separate module and files (tokio-rs#1020) - style(prost-build): prost_path helper (tokio-rs#1018) - style: Fix toml indent (tokio-rs#1048) - style: Fix clippy warnings and enable clippy in CI (tokio-rs#1008) - build: Use git submodule to download protobuf sources (tokio-rs#1014) - ci: Add TOML validation with `taplo` (tokio-rs#1034) - tests: Create a separate tempdir for each test (tokio-rs#1044) - tests: Remove GoogleMessage3 and GoogleMessage4 benchmarks (tokio-rs#1037) - chore: Update internal crates to Rust edition 2021 (tokio-rs#1039) - chore: Update crate descriptions (tokio-rs#1038) - chore: Fix clippy checks in CI (tokio-rs#1032) - chore: Add Casper Meijn as author (tokio-rs#1025)
_PROST!_ is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files. This patch update brings new fixes: - fix: include_file should handle proto without package (#1002) - Place Config::format behind the format feature flag - Handle keyword `Self` after stripping enum type prefix (#998) ## Documentation - fix(readme): fix the link and badge for CI (#1049) ## Internal - style(codegen): `Syntax` to a separate file (#1029) - chore(codegen): extract c string escaping to a separate file (#1028) - style(prost-build): `CodeGenerator::boxed` method (#1019) - style(prost-build): Consolidate field data into struct (#1017) - style(prost-build): `BytesType and MapType` into a `collections` module. (#1030) - style(prost-build): Split `Config` and `Module` into a separate module and files (#1020) - style(prost-build): prost_path helper (#1018) - style: Fix toml indent (#1048) - style: Fix clippy warnings and enable clippy in CI (#1008) - build: Use git submodule to download protobuf sources (#1014) - ci: Add TOML validation with `taplo` (#1034) - tests: Create a separate tempdir for each test (#1044) - tests: Remove GoogleMessage3 and GoogleMessage4 benchmarks (#1037) - chore: Update internal crates to Rust edition 2021 (#1039) - chore: Update crate descriptions (#1038) - chore: Fix clippy checks in CI (#1032) - chore: Add Casper Meijn as author (#1025)
Fixes #997
Relates to #179