-
Notifications
You must be signed in to change notification settings - Fork 506
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
Ktlint 1.3.* converts crlf to lf on Windows #2747
Comments
When running on Windows, and `end_of_line` property not set in `.editorconfig` the line separators should not be changed from CRLF to LF whenever the file does not contain any lint violation that can be autocorrected. Closes #2747
I think that I have found the problem. Can you please help to verify whether the solution is working as I do not have a Windows computer? The problem seems to be restricted to files in which not lint violations is found that can be autocorrected. In such files the line endings were indeed changed from CRLF to LF. In files in which a lint violation is found, and which could also be autocorrected, the line endings were not changed. Please run Ktlint CLI latest snapshot build or ktlint-cli-1.4.0-20240723.140247-11-all.jar on your project to check that line endings are no longer changed. *edited: update direct link to jar to refer to fat jar |
As I understand from the description of this pull request, ktlint will still change the ending to lf in case of finding problems in the file. If this is indeed the case, this will cause confusion in file endings, they will not be standardised under default settings in projects developed on Windows machines. What are your thoughts on this? I'm ready to test this version of the formatter if you explain whether crlf would change to cr in case the file requires formatting, but the .editorconfig doesn't specify the corresponding rule. |
My expectation is that the problem only occurred in files where no Ktlint violations were autocorrected. In that case the end of line separator was not determined whilst still updating the end of line separator with the default value. For files in which a violation was found, the behavior was not changed in Ktlint 1.3. So in this case the end of line separator was, and still is, correctly determined. |
Good to know. I can't figure out how I can run |
Sorry, I should have pointed you to the fat jar and to the run instructions for Windows. |
Okay… Now there are a few problems:
|
This behavior was changed in #1831 (ktlint version |
Although I've already added a workaround for these problems using I understand that this behavior was introduced quite a while ago, but I don't think anyone is going to be frustrated by the fact that their files are no longer randomly switching from crlf to cr. The second issue you didn't mention is also an obvious bug. |
Faced the same issue while upgrading ktlint from 1.2.1 to 1.3.1. I do format all the code, but see no changes, only different line-endings. But as @mxkmn has noted, the line endings of auto-fixed files get indeed transformed from CRLF to LF even without explicit
I am not aware of any potential harm of changing line endings of Kotlin source code, so I tend to agree that most probably nobody will be frustrated if ktlint will stop converting from CRLF to LF on auto-formatting for Windows users. It's also interesting, that if you generate a project on Windows either with |
It will be a problem for projects that have started using ktlint with ktlint
This is a direct result of the change I made to fix the original problem. An incorrect line ending is not seen as a format violation itself. Before checking for violation, all code is normalized to
|
We used Kotlinter-gradle in our project, and I want to know how to disable it completely. In my project, we have set different rules in Git to satisfy the end-of-line requirements for all team members. https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings We use different rules in different os. You know not everyone uses Windows or Macos in the team. But these Git settings will unite the format in the repository(remote), and in the local system, we use different end-of-lines. |
Sorry, this is not possible. For internal processing all line endings are normalized before linting/formatting starts. When formatting is done, all line endings in the file will be based on the |
Currently, I follow the Github guide, https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings and set When I sync my pr to develop branch by |
I hope there is an option to disable the processing of the line endings. |
As said, this is not possible. At least not in reasonable limits as I can see right now. But proof me wrong, and submit a PR ;-) |
When I sync my pr to the develop branch by I want to remove the useless format line endings and keep it as it is. As I said before, to unite the line-ending settings of the team, we apply different strategies in Git config on the developer's OS. I worked well before this linter changes. |
See my earlier comment: #2747 (comment) |
In other words, we want to use git to control the line endings and unite codes from all team members in the remote repository, we allow developers to use different line endings on different OS, git command will convert the line endings to the developer's OS compatible when reading from and writing to the remote repository. Is it possible to disable the Klint line ending properties like others? |
No, line endings are not transformed by a rule. Your best way forward is to configure git. Maybe https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings?platform=windows helps. |
@paul-dingemans Yes, we followed this guide and configured git. Git will use local line endings, which are converted automatically between the local OS system(Windows and Linux users will use the OS special line endings) and the remote repository when fetching and committing codes. It works well. Now kotliner/klint broke the rule. |
https://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
The git configuration on the local machine of the developer should convert the git line-endings to OS specific line endings. |
Expected Behavior
Ktlint should not affect the line break settings unless the break type is specified in .editorconfig
Observed Behavior
Ktlint sets default line breaks in Unix, not in Windows, without asking. This cannot be disabled. The Difference Editor in Idea is filled with a bunch of files that contain no changes other than line breaks. The different line breaks are not sent as commits to the repository, because git stores lf data by default as it is.
The only solution is to add
*.kt text eol=lf
to .gitattributes and clone the repository again, but I'm not happy with that.Steps to Reproduce
Just create a new .kt file without special .editorconfig rules on Windows (so the file will have crlf endings) and run ktlint.
Your Environment
.editorconfig
settings: nothing specialThe text was updated successfully, but these errors were encountered: