google / google/google-java-format
Trouble with character ranges
- 主要言語
- Java
- スター
- 6.2k
- フォーク
- 937
- 平均マージ
- 6分
- マージ済み PR(30日)
- 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 はまだ評価されていません。