Xtext 自定义 DSL 格式
Xtext Custom DSL formatting
在我的 DSL 中,我有 () 用于很多东西,例如 if 条件和一些声明,例如 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)
您看到实际结果是因为在 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 )
}
希望对您有所帮助!
好吧,我已经弄明白了。这很简单。我做了以下内容:
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());
在我的 DSL 中,我有 () 用于很多东西,例如 if 条件和一些声明,例如 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)
您看到实际结果是因为在 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 )
}
希望对您有所帮助!
好吧,我已经弄明白了。这很简单。我做了以下内容:
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());