-
Notifications
You must be signed in to change notification settings - Fork 330
FIX: Use the invariant culture for capitalization when generating code #2156
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
Conversation
|
Glanced at the draft PR and I would just like to suggest to (if possible) get some unit test in that could catch any problems with culture info. |
|
Also I see that some tests are failing due to compilation issues apparently, fixing that in a moment. |
ritamerkl
left a comment
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.
The changes look good to me. Many thanks for going through all the cases!
The PR is still a draft, so this is probably still in work, but just a changelog and a link to a Jira ticket is missing in my POV.
377cefa to
96e30ba
Compare
|
Moving this out of the draft stage:
|
58720fc to
e1de946
Compare
ekcoh
left a comment
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.
Great to get this fix in, I am approving but had some minor comments I let you decide whether they needs to be addressed or not.
| foreach (string folder in excludedFolders) | ||
| { | ||
| if (path.ToLower().Contains(folder.ToLower())) | ||
| if (path.Contains(folder, StringComparison.InvariantCultureIgnoreCase)) |
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.
Great to fix case issues here, but I wonder if this wasn't incorrect to begin with. Shouldn't this be using https://learn.microsoft.com/en-us/dotnet/api/system.io.path?view=net-9.0 which should take platform-specific behavior of underlying file systems into account instead? Its probably fine, but it is a bit of a warning flag in my eyes when code tries to "outsmart" the filesystem implementation. Its also interesting previous code was doing ToLower() on a constant that is already in lowercase (its not an arbitrary input). The point I am after is that on some OS you may have both a XR, Xr, xR and xr directory and they are all different. (e.g. linux)
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 guess for paths, we should probably use https://github.com/lucasmeijer/NiceIO because it makes pathing so easily and cool. For this instance, I would agree it might have been somewhat incorrect on case-sensitive file systems - which are normally Linux and the default Mac. Won't target changing behaviour here though.
| { | ||
| var registeredPackages = UnityEditor.PackageManager.PackageInfo.GetAllRegisteredPackages(); | ||
| var plugInName = PlugInName + EditorUserBuildSettings.activeBuildTarget.ToString().ToLower(); | ||
| var plugInName = PlugInName + EditorUserBuildSettings.activeBuildTarget.ToString(); |
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 looks like you fixed a separate issue here right? Or are active build targets package names ToUpper? I am confused around how this previously was supposed to work. The new code looks solid though, effectively ignoring case.
| { | ||
| return string.Compare(a.ToLower(CultureInfo.InvariantCulture), b.m_StringLowerCase, | ||
| StringComparison.InvariantCultureIgnoreCase) == 0; | ||
| return string.Compare(a, b.m_StringLowerCase, StringComparison.InvariantCultureIgnoreCase) == 0; |
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.
Minor: One could call the other operator, e.g. return (b == a) to avoid the redundant code
| { | ||
| return string.Compare(a.ToLower(CultureInfo.InvariantCulture), b.m_StringLowerCase, | ||
| StringComparison.InvariantCultureIgnoreCase) != 0; | ||
| return string.Compare(a, b.m_StringLowerCase, StringComparison.InvariantCultureIgnoreCase) != 0; |
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.
Minor: One could call the other operator, e.g. return (b != a)
… the current culture
21c0680 to
ee83350
Compare
|
Did not forget about this one, will check today/tomorrow |
Pauliusd01
left a comment
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.
LGTM, I checked generating and using input actions with non latin characters (Chinese, Russian, Japanese, Arabic, Hebrew, Korean, Thai, Vietnamese, Turkish) on Windows and Mac with Chinese, English and Turkish locales.
But I have to note that I wasn't able to repro the original turkish i character issue on my end. The latin letters i and I stayed the same after generating them on a different locale
Description
A customer with the Turkish locale set, noticed that when we're generating function names for Input Actions, we're using the wrong function. This way, the "info" input action results in Onİnfo method name (notice the dot above the I, it's apparently how the capital for i looks like in Turkish).
Testing status & QA
Pending a QA pass, local testing by dev, a new regression test added
Overall Product Risks
Checklist
Before review:
Changed,Fixed,Addedsections.Area_CanDoX,Area_CanDoX_EvenIfYIsTheCase,Area_WhenIDoX_AndYHappens_ThisIsTheResult.During merge:
NEW: ___.FIX: ___.DOCS: ___.CHANGE: ___.RELEASE: 1.1.0-preview.3.After merge: