В моей DSL у меня есть() для многих вещей, например, если условия и некоторые объявления, такие как block (a; b; c; d;);Xtext Custom DSL formatting
В моей функции configureFormatting я сделать это в следующем порядке:
for (Pair<Keyword, Keyword> pair : grammarAccess.findKeywordPairs("(", ")"))
{
c.setNoSpace().after(pair.getFirst());
c.setNoSpace().before(pair.getSecond());
}
c.setIndentation(block.getLeftParenthesisKeyword(),block.getRightParenthesisKeyword());
c.setLinewrap().after(block.getLeftParenthesisKeyword());
c.setLinewrap().before(block.getRightParenthesisKeyword());
Ожидаемое является:
block (
int z;
int a;
int y;
);
if (a = 1)
Фактический результат:
block (int z;
int a;
int y;);
if (a = 1)
Это не решило мою проблему. В результате все, что имеет скобки, находится на новой строке, которая не то, что я хочу. То, что я хочу, было иметь такие вещи, как условие If, подобное этому, если (a = 1) без пробелов и других вещей, имеющих скобки, которые я хочу выглядеть как отступ в блоке, и на линиях между скобками, а не рядом с самими скобками. Вы меня понимаете? –
Конечно, я не рассматривал другой вариант использования в вашей грамматике, но рад, что вы нашли решение. Кстати, новый API-интерфейс Formatter (по-прежнему отмечен как бета-версия): http://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#formatting это более мощный и простой в использовании. –
Да, я это видел. Но на данный момент я не могу работать с бета-версией. Большое спасибо. –