Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Forcing CRLF line separator in my project

I want to ensure CRLF (Windows style) line separator in my project. I am checking a few alternatives, but not sure which one is the best for this.

Desired Behavior:

If a file is not CRLF, which IntelliJ IDEA shows at the bottom:

I want my maven profile, let's say mvn clean install -P tests to fail, saying something like "Invalid line separator, not CRLF"

Thanks a lot.

like image 981
stack man Avatar asked Jan 30 '18 10:01

stack man


People also ask

How do I set the default line separator in Intellij?

From the main menu, select File | File Properties | Line Separators, and then select a line ending style from the list.

What is a CRLF line separator?

There are two ways to represent a line ending in a source code file. CRLF (carriage return + line feed); or just LF (line feed).

What are line separators?

The line separator used by the in-memory representation of file contents is always the newline character. When a file is being loaded, the line separator used in the file on disk is stored in a per-buffer property, and all line-endings are converted to newline characters for the in-memory representation.


3 Answers

I had the same issue on Linux. When I commit with IDEA then I get my line separators converted to LF. When I do commit with SmartGit then all stays CRLF.

All I did - command:

git config --global core.autocrlf false

And now everything is fine.

like image 190
Mike Menko Avatar answered Oct 25 '22 01:10

Mike Menko


I don't think it is possible to cause the Maven build to fail due to invalid line separators in your project's files unless someone has created a plugin to do that. However, you can configure a code inspection in Intellij IDEA to fail for that reason. This is how you could provoke such a failure:

  • Navigate to File -> Settings -> Editor -> Inspections -> Inconsistent Line Separators then check the box for Inconsistent Line Separators and select Error from the drop list for Severity:

IDEAsettings

  • Navigate to File -> Settings -> Editor -> Code Style and specify the default line separator by selecting Windows (\r\n) from the Line separator drop list (if not already set).
  • Invalidate the line separator setting for some open file in your project. For example: File -> Line Separators -> CR - Classic Mac (\r)
  • Run an inspection on your project (Analyze -> Inspect Code -> Whole Project) and you should now get an error:

IDEAinspection

JetBrains has an open bug ticket to force compilation failure based on inspection errors, so this approach is not exactly what you were asking for. But in the absence of any Maven-based solution it might be best you can do. See the Code Inspection documentation from JetBrains for more information.

One other possible approach is to look at TeamCity, another JetBrains tool for continuous integration. I haven't used it, but perhaps it allows you to configure failure when there are inspection errors (though from a quick look at their documentation I couldn't see how).


Update:

It looks like TeamCity might be worth a look after all. Its documentation on Build Failure Conditions states:

When using code examining tools in your build, like code coverage, duplicates finders, inspections and so on, your build generates various numeric metrics. For these metrics you can specify a threshold which, when exceeded, will fail a build.

like image 22
skomisa Avatar answered Oct 25 '22 01:10

skomisa


Previous answer stated:

I don't think it is possible to cause the Maven build to fail due to invalid line separators in your project's files unless someone has created a plugin to do that.

But there is plugins for that. You can have a checkstyle rule:

<module name="RegexpMultiline">
    <property name="format" value="(?<!\r)\n"/>
    <property name="maximum" value="0"/>
    <property name="message" value="Invalid line separator, not CRLF"/>
</module>

And then configure build to use checkstyle plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <failsOnError>true</failsOnError>
        <consoleOutput>true</consoleOutput>
        <includeTestSourceDirectory>true</includeTestSourceDirectory>
        <checkstyleRules>
            <module name="Checker">
                <module name="RegexpMultiline">
                    <property name="format" value="(?<!\r)\n"/>
                    <property name="maximum" value="0"/>
                    <property name="message" value="Invalid line separator, not CRLF"/>
                </module>
            </module>
        </checkstyleRules>
    </configuration>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>checkstyle</goal>
             </goals>
        </execution>
    </executions>
</plugin>

It binds to "verify" phase by default that should be already activated if you run install.

like image 30
eis Avatar answered Oct 25 '22 01:10

eis