我正在使用Xtext 2.9格式化程序,我正在尝试格式化hiddenRegion ,其中包含评论。以下是我想要格式化的文档区域的一部分:
Columns: 1:offset 2:length 3:kind 4: text 5:grammarElement
Kind: H=IHiddenRegion S=ISemanticRegion B/E=IEObjectRegion
35 0 H
35 15 S ""xxx::a::b"" Refblock:namespace=Namespace
50 0 H
50 1 S "}" Refblock:RCBRACKET
E Refblock PackageHead:Block=Refblock path:PackageHead/Block=Package'xxx_constants'/head=Model/packages[0]
51 0 H
51 1 S ":" PackageHead:COLON
E PackageHead Package:head=PackageHead path:Package'xxx_constants'/head=Model/packages[0]
52 >>>H "\n " Whitespace:TerminalRule'WS'
"# asd" Comment:TerminalRule'SL_COMMENT'
15 "\n " Whitespace:TerminalRule'WS'<<<
B Error'ASSD' Package:expressions+=Expression path:Package'xxx_constants'/expressions[0]=Model/packages[0]
67 5 S "error" Error:'error'
72 1 H " " Whitespace:TerminalRule'WS'
和语法的相应部分
Model:
{Model}
(packages+=Package)*;
Expression:
Error | Warning | Enum | Text;
Package:
{Package}
'package' name=Name head=PackageHead
(BEGIN
(imports+=Import)*
(expressions+=Expression)*
END)?;
Error:
{Error}
('error') name=ENAME parameter=Parameter COLON
(BEGIN
(expressions+=Estatement)+
END)?;
PackageHead:
Block=Refblock COLON;
问题是当我尝试在错误关键字之前添加一些字符时 例如
error.regionFor.keyword('error').prepend[setSpace("\n ")]
此缩进在评论之前加上而不在其后面。如果在“错误”关键字之前进行单行注释,则会导致格式不正确。
为了更清晰,这里是我的语法的示例代码和所需行为的描述:
package xxx_constants {namespace="xxx::a::b"}:
# asd
error ASSD {0}:
Hello {0,world}
预期结果 :(左侧一个空格)
package xxx_constants {namespace="xxx::a::b"}:
# asd
error ASSD {0}:
Hello {0,world}
这是带有前置方法的实际结果
package xxx_constants {namespace="xxx::a::b"}:
# asd
error ASSD {0}:
Hello {0,world}
正如文档结构所说,HiddenRegion在这种情况下是声明:
# asd
error
如何在关键字“错误”之前直接添加我的字符,而不是在评论之前?谢谢。
答案 0 :(得分:1)
我认为您正在创建缩进敏感语言,因为您明确地调用了public function handle()
{
\App\Investment::calculate();
sleep(30);
\App\Investment::calculate();
}
和BEGIN
。
对于缩进敏感语言,我的答案是:您要覆盖
END
方法append []和prepend []你正在使用对注释是不可知的,稍后调用applyHiddenRegionFormatting()来决定如何在注释之间编织格式。
要使Xtext使用您自己的HiddenRegionReplacer子类,请覆盖
org.eclipse.xtext.formatting2.internal.HiddenRegionReplacer.applyHiddenRegionFormatting(List<ITextReplacer>)
对于不的语言,执行空格敏感的lexing / parsing(默认情况下),答案是不调用setSpace()来创建缩进或换行。
相反,做
org.eclipse.xtext.formatting2.AbstractFormatter2.createHiddenRegionReplacer(IHiddenRegion, IHiddenRegionFormatting)