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

lint: Do not provide suggestions for non standard characters #77805

Merged
merged 1 commit into from
Nov 21, 2020

Conversation

JohnTitor
Copy link
Member

Fixes #77273

Only provide suggestions if the case-fixed result is different than the original.

@rust-highfive
Copy link
Collaborator

r? @ecstatic-morse

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Oct 10, 2020
@JohnTitor
Copy link
Member Author

r? @estebank

Comment on lines +14 to +16
// FIXME: How we should handle this?
struct 𝕟𝕠𝕥_𝕒_𝕔𝕒𝕞𝕖𝕝;
//~^ WARN: type `𝕟𝕠𝕥_𝕒_𝕔𝕒𝕞𝕖𝕝` should have an upper camel case name
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@estebank Do you have any ideas to improve this case?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can probably improve this in a separate pr if needed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JohnTitor I just took a look at this. The problem is that is_lowercase(𝕟) is true but to_uppercase(𝕟) == 𝕟. Changing char_has_case to instead of asking whether the char is lowercase ^ uppercase, we can do c.to_lowercase().to_string() != c.to_uppercase().to_string(). That check would be more reliable to us to decide how to reconstitute the suggestion. But I would go one step further and say that maybe we shouldn't be warning for structs that have a first char that is lowercase but can't be uppercased 🤔

(Yes, I know this is 3 months later. I've had this tab open since then to look into this once I had enough time 😅)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what do you think of the suggestion given in #77805 (comment) : check if the tranformed string would also produce a warning, and don't warn if it does.

Copy link
Contributor

@estebank estebank Jan 29, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That could make sense. After all the PascalCase convention for types is good to differentiate them from bindings and functions, but when writing a struct or trait called 𝛅 you probably are encoding "business logic" with prior conventions. It doesn't make that much sense to complain about it. The problem is that then we wouldn't lint any of these cases then. Maybe we need two lints, for different levels of checks: one for the "simple" rule check of what PascalCase is "supposed to be" and another for the more lenient but also more useful in practice check of "can this string be mechanically changed into a valid form". But that would be... likely controversial. I guess if you're doing "mathy" things, you would just have to disable the lint...

I am somewhat surprised at the behavior here because although 𝕟 doesn't have a corresponding upper-case character, 𝕞 does: 𝕄, but to_uppercase doesn't touch it, it ignores all math symbols and gives you the same symbol, which is why the to_lowercase(x) != to_uppercase(x) check would be more resilient.

@camelid camelid added the A-lint Area: Lints (warnings about flaws in source code) such as unused_mut. label Oct 30, 2020
@camelid camelid added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 20, 2020
@Dylan-DPC-zz
Copy link

looks good to me
r? @Dylan-DPC

@bors r+ rollup

@bors
Copy link
Contributor

bors commented Nov 20, 2020

📌 Commit 410fc0e has been approved by Dylan-DPC

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 20, 2020
let cc = to_camel_case(name);
// We cannot provide meaningful suggestions
// if the characters are in the category of "Lowercase Letter".
if name.to_string() != cc {
Copy link
Contributor

@ogoffart ogoffart Nov 20, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion:

Suggested change
if name.to_string() != cc {
if is_camel_case(cc) {

And similar could be done for the snake_case branch.

This way we would not give a suggestion if the resulting string is not conform to the style it tries to enforce.

(I'd even say that in this case, we should probably not even warn. If a mathematical symbol that does not have a representation in the given style, then it should be fine to use it)

Edit: fixed the condition

Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Nov 21, 2020
…=Dylan-DPC

lint: Do not provide suggestions for non standard characters

Fixes rust-lang#77273

Only provide suggestions if the case-fixed result is different than the original.
@bors
Copy link
Contributor

bors commented Nov 21, 2020

⌛ Testing commit 410fc0e with merge 539402c...

@bors
Copy link
Contributor

bors commented Nov 21, 2020

☀️ Test successful - checks-actions
Approved by: Dylan-DPC
Pushing 539402c to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Nov 21, 2020
@bors bors merged commit 539402c into rust-lang:master Nov 21, 2020
@rustbot rustbot added this to the 1.50.0 milestone Nov 21, 2020
@JohnTitor JohnTitor deleted the non-standard-char-sugg branch January 29, 2021 04:28
estebank added a commit to estebank/rust that referenced this pull request Jan 29, 2021
JohnTitor added a commit to JohnTitor/rust that referenced this pull request Feb 1, 2021
Fix invalid camel case suggestion involving unicode idents

Follow up to rust-lang#77805.
henryboisdequin pushed a commit to henryboisdequin/rust that referenced this pull request Feb 1, 2021
Fix invalid camel case suggestion involving unicode idents

Follow up to rust-lang#77805.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-lint Area: Lints (warnings about flaws in source code) such as unused_mut. merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
9 participants