Xtext 2.8+ 格式化程序,使用注释格式化 HiddenRegion
Xtext 2.8+ formatter, formatting HiddenRegion with comment
我正在使用 Xtext 2.9 格式化程序,我正在尝试 格式化包含 comment 的 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 ")]
这个缩进在评论之前而不是在评论之后。如果在 'error' 关键字之前有单行注释,这会导致格式不正确。
为了更加清晰,这里是我的语法示例代码和所需行为的描述:
package xxx_constants {namespace="xxx::a::b"}:
# asd
error ASSD {0}:
Hello {0,world}
这是预期结果:(左边一个space)
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
如何将我的字符直接放在关键字 'error' 之前而不是评论之前? 谢谢。
我假设您正在创建缩进敏感的语言,因为您明确调用了 BEGIN
和 END
。
对于缩进敏感的语言,我的回答是:您需要覆盖
org.eclipse.xtext.formatting2.internal.HiddenRegionReplacer.applyHiddenRegionFormatting(List<ITextReplacer>)
您使用的方法 append[] 和 prepend[] 与评论无关,稍后会调用 applyHiddenRegionFormatting() 来决定如何在评论之间编织格式。
要使 Xtext 使用您自己的 HiddenRegionReplacer 子类,请覆盖
org.eclipse.xtext.formatting2.AbstractFormatter2.createHiddenRegionReplacer(IHiddenRegion, IHiddenRegionFormatting)
对于 not 对空格敏感的语言 lexing/parsing(这是默认设置),答案是 not 调用setSpace() 创建缩进或换行。
相反,
pkg.interior[indent]
pkg.regionFor.keyword(":").append[newLine]
pkg.append[newLine]
我正在使用 Xtext 2.9 格式化程序,我正在尝试 格式化包含 comment 的 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 ")]
这个缩进在评论之前而不是在评论之后。如果在 'error' 关键字之前有单行注释,这会导致格式不正确。
为了更加清晰,这里是我的语法示例代码和所需行为的描述:
package xxx_constants {namespace="xxx::a::b"}:
# asd
error ASSD {0}:
Hello {0,world}
这是预期结果:(左边一个space)
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
如何将我的字符直接放在关键字 'error' 之前而不是评论之前? 谢谢。
我假设您正在创建缩进敏感的语言,因为您明确调用了 BEGIN
和 END
。
对于缩进敏感的语言,我的回答是:您需要覆盖
org.eclipse.xtext.formatting2.internal.HiddenRegionReplacer.applyHiddenRegionFormatting(List<ITextReplacer>)
您使用的方法 append[] 和 prepend[] 与评论无关,稍后会调用 applyHiddenRegionFormatting() 来决定如何在评论之间编织格式。
要使 Xtext 使用您自己的 HiddenRegionReplacer 子类,请覆盖
org.eclipse.xtext.formatting2.AbstractFormatter2.createHiddenRegionReplacer(IHiddenRegion, IHiddenRegionFormatting)
对于 not 对空格敏感的语言 lexing/parsing(这是默认设置),答案是 not 调用setSpace() 创建缩进或换行。
相反,
pkg.interior[indent]
pkg.regionFor.keyword(":").append[newLine]
pkg.append[newLine]