Closed hu-chia closed 1 month ago
QQ群里解释了。
搬运一下作者的解释,以防后续翻到这个问题的同学郁闷:
scriban不能直接调用某个对象的成员函数,所以用了这个委婉的办法 至于类型名不支持格式化,那是因为确实觉得类型名没必要再格式化了,就没提供支持 至于说期望模板不用主动调用format这些命名约定就能智能生效,这个我们觉得至少在scriban引擎下是做不到的,就算做到了也很费劲。因为它不允许调用成员函数,所以起码得对Name之类返回一个Formatted包装类后再调用属性才行
我的理解是设计上没有考虑支持类型名称的代码风格转换,这个配置不生效是设计预期内的内容。
感谢作者的迅速回复并表示接受。
现象
配置指定
namingConversion.{codeTarget}.type
后生成代码中的类名和文件名没有按照预期转换为期望的名称风格。期望
该配置可以开箱即用(即配置即生效,不需要修改模板或C#代码)。
原因
该配置项用来构造luban的
ICodeStyle
的实例,该实例会在渲染模板时注入上下文中。但存在以下问题:ICodeStyle
中的成员方法格式化原始数值配置中的命名,因此需要用户在模板的实现中主动调用;scriban
,该模板引擎出于安全考虑不允许直接调用对象的成员方法,因此ICodeStyle
中的方法并没有暴露给模板;Luban.TemplateExtensions.TypeTemplateExtension
,提供了一组静态方法,可以在模板中使用,传入模板上下文的__code_style
对象,由用户自己对标识符进行格式化,但这组静态方法缺少FormatType
,除了Type
以外的其他五种标识符都有对应方法(不知是有意为之还是无意缺失);综上,这个配置目前而言是一个无效配置,对于特定用户而言,标识符的处理仍然需要在模板中实现,可以自己实现,也可以采用luban提供的
format_xxxx_name
这组方法来实现,这组方法会尊重配置中的代码风格。对于生成代码的文件名,似乎并没有合适的机制来实现此类需求。如果以上行为属于设计的一部分,请随意关闭该issue。