2015-06-17 2 views
0

В моей 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) 

ответ

0

Ну, я понял это. Это было просто. Я сделал следующее:

for (Pair<Keyword, Keyword> pair : grammarAccess.findKeywordPairs("(", ")")) 
{ 
    if(pair.getFirst() != block.getLeftParenthesisKeyword()) 
     c.setNoSpace().after(pair.getFirst()); 
    if(pair.getSecond() != block.getRightParenthesisKeyword())  
     c.setNoSpace().before(pair.getSecond()); 
} 
c.setIndentation(block.getLeftParenthesisKeyword(),block.getRightParenthesisKeyword()); 
c.setLinewrap().after(block.getLeftParenthesisKeyword()); 
c.setLinewrap().before(block.getRightParenthesisKeyword()); 
1

вы видите фактический результат, потому что в пределах for-loop вы явно устанавливаете, что вам не нужны пробелы после первого '(' и до ')'.

Попробуйте следующее:

for (Pair<Keyword, Keyword> pair : grammarAccess.findKeywordPairs("(", ")")) { 
    c.setIndentation(pair.getFirst(), pair.getSecond()); // indent between () 
    c.setLinewrap().after(pair.getFirst()); // linewrap after (
    c.setLinewrap().before(pair.getSecond()); // linewrap before) 
    c.setNoSpace().after(pair.getSecond()); // no space after) 
} 

Надежда, что помогает!

+0

Это не решило мою проблему. В результате все, что имеет скобки, находится на новой строке, которая не то, что я хочу. То, что я хочу, было иметь такие вещи, как условие If, подобное этому, если (a = 1) без пробелов и других вещей, имеющих скобки, которые я хочу выглядеть как отступ в блоке, и на линиях между скобками, а не рядом с самими скобками. Вы меня понимаете? –

+0

Конечно, я не рассматривал другой вариант использования в вашей грамматике, но рад, что вы нашли решение. Кстати, новый API-интерфейс Formatter (по-прежнему отмечен как бета-версия): http://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#formatting это более мощный и простой в использовании. –

+0

Да, я это видел. Но на данный момент я не могу работать с бета-версией. Большое спасибо. –

Смежные вопросы