在我的DSL中,我有很多东西,例如条件和一些声明,例如block(a; b; c; d;);
在我的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 :(得分:1)
你看到了实际的结果,因为在for循环中你明确地设置了你不想在第一个'('和'之前'之后的空格。
尝试以下方法:
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 )
}
希望有所帮助!
答案 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());