google / google/google-java-format
Trouble with character ranges
- 主要语言
- Java
- 星标
- 6.2k
- 派生
- 937
- 平均合并
- 6 分钟
- 30 天内合并 PR
- 3
描述
Please have a look at the following two unit tests which should both work, but only the second does:
@Test
public void testCharaterRangesFormatWithAnnotation() throws Exception {
final String text = "package foo; public class Bar {\n" +
" @SuppressWarnings(\"unchecked\")\n" +
" // some comment \n" +
" public void doSomething(String arg) { System.out.println(\"Hello World\"); } public boolean doSomethingElse(Object obj) { return false; } }";
final String expected = "package foo;\n" +
"\n" +
"public class Bar {\n" +
// START -- this should not be formatted
" @SuppressWarnings(\"unchecked\")\n" +
" // some comment \n" +
" public void doSomething(String arg) { System.out.println(\"Hello World\"); }\n" +
// END -- this should not be formatted
"\n" +
" public boolean doSomethingElse(Object obj) {\n" +
" return false;\n" +
" }\n" +
"}\n" +
"";
Collection> characterRanges = new ArrayList<>();
characterRanges.add(Range.open(0, 66));
characterRanges.add(Range.open(171, 234));
Formatter formatter = new Formatter(JavaFormatterOptions.builder().style(JavaFormatterOptions.Style.GOOGLE).build());
String actual = formatter.formatSource(text, characterRanges);
Assert.assertEquals("Formatting should change the code", expected, actual);
}
@Test
public void testCharaterRangesFormatWithoutAnnotation() throws Exception {
final String text = "package foo; public class Bar {\n" +
" @SuppressWarnings(\"unchecked\")\n" +
" // some comment \n" +
" public void doSomething(String arg) { System.out.println(\"Hello World\"); } public boolean doSomethingElse(Object obj) { return false; } }";
final String expected = "package foo;\n" +
"\n" +
"public class Bar {\n" +
" @SuppressWarnings(\"unchecked\")\n" +
// START -- this should not be formatted
" // some comment \n" +
" public void doSomething(String arg) { System.out.println(\"Hello World\"); }\n" +
// END -- this should not be formatted
"\n" +
" public boolean doSomethingElse(Object obj) {\n" +
" return false;\n" +
" }\n" +
"}\n" +
"";
Collection> characterRanges = new ArrayList<>();
characterRanges.add(Range.open(0, 31));
characterRanges.add(Range.open(171, 234));
Formatter formatter = new Formatter(JavaFormatterOptions.builder().style(JavaFormatterOptions.Style.GOOGLE).build());
String actual = formatter.formatSource(text, characterRanges);
Assert.assertEquals("Formatting should change the code", expected, actual);
}
When I run those tests I get this as an result:
Failures:
FormatterTest.testCharaterRangesFormatWithAnnotation:58 Formatting should change the code expected:<...ings("unchecked")
[ // some comment
public void doSomething(String arg) {] System.out.println(...> but was:<...ings("unchecked")
[// some comment
public void doSomething(String arg) {
] System.out.println(...>
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
It seems there is an issue when there is an annotation before a comment or a method, it seems the formatter is formatting code outside of the given character range.
Regards,
Fabian
贡献指南
评估
这个 Issue 还没有评估数据。