Skip to content

Commit 92579ca

Browse files
committed
WIP: add logic to detect line ending in file
1 parent aecaeea commit 92579ca

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import java.util.Collections;
2222
import java.util.Map;
2323
import java.util.Properties;
24+
import java.util.regex.MatchResult;
25+
import java.util.regex.Matcher;
26+
import java.util.regex.Pattern;
2427

2528
import org.eclipse.jdt.core.formatter.CodeFormatter;
2629
import org.eclipse.jface.text.IRegion;
@@ -116,6 +119,9 @@ public TextEdit format(String source, int offset, int length, String lineSeparat
116119
@Override
117120
public TextEdit format(int kind, String source, int offset, int length, int indentationLevel,
118121
String lineSeparator) {
122+
if (lineSeparator == null) {
123+
lineSeparator = detectLineSeparator(source);
124+
}
119125
return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator);
120126
}
121127

@@ -142,6 +148,9 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) {
142148

143149
@Override
144150
public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) {
151+
if (lineSeparator == null) {
152+
lineSeparator = detectLineSeparator(source);
153+
}
145154
return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator);
146155
}
147156

@@ -201,4 +210,18 @@ private static void applyConfig(Properties properties, JavaFormatConfig javaForm
201210

202211
}
203212

213+
private String detectLineSeparator(String contents) {
214+
Pattern newlinePattern = Pattern.compile("(?<sep>\r?\n)$", Pattern.MULTILINE);
215+
Matcher matcher = newlinePattern.matcher(contents);
216+
if (!matcher.find()) {
217+
return DEFAULT_LINE_SEPARATOR;
218+
}
219+
String firstMatch = matcher.group("sep");
220+
while (matcher.find()) {
221+
if (!matcher.group("sep").equals(firstMatch)) {
222+
return Formatter.DEFAULT_LINE_SEPARATOR;
223+
}
224+
}
225+
return firstMatch;
226+
}
204227
}

spring-javaformat/spring-javaformat-formatter/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
import io.spring.javaformat.config.JavaFormatConfig;
3030

31+
import static org.assertj.core.api.Assertions.linesOf;
32+
3133
/**
3234
* Base class for formatter tests.
3335
*
@@ -74,6 +76,10 @@ protected final String read(File file) throws Exception {
7476
return new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);
7577
}
7678

79+
protected final String read(File file, String lineSeparator) {
80+
return String.join(lineSeparator, linesOf(file, StandardCharsets.UTF_8));
81+
}
82+
7783
protected static Collection<Object[]> files(String expectedOverride) {
7884
Collection<Object[]> files = new ArrayList<>();
7985
File sourceDir = new File("src/test/resources/source");

0 commit comments

Comments
 (0)