这是一个潜在危险的问题,因为跨学科的问题和答案会有偏见,但无论如何我都会对它进行抨击。一切都很好!
所以,我们走了。我正在为Emacs编写一个主要的编辑模式,因为它几乎没有支持的语言。我就是这样,我必须决定生成项目文件的方法。以下是未来任务的教学大纲:
模板必须代表项目目录树,而不仅仅是单个文件。
生成的文件有各种格式,可能包括类似SGML的语言,但不限于此类。他们还必须生成类似C的源代码,eLisp源代码和纯文本文件,例如README。
必须在用户启动的操作中批量处理模板(因为在用户想要创建项目时 - 必须在用户指定的目录中创建多个文件)。拥有监督创建的能力可能是有益的,但这比完全自动运行该过程的能力要重要。
奖金功能:
模板语言已经有了用户群(可能会重用现有模板)。
模板可用于代码片段(包含在用户在编辑文件时调用代码生成例程时以交互方式填充的空白)。
通过图形界面和命令行等跨平台,易用性等显而易见的事情。
我做了一个研究,但我不会分享我的结果(所以)所以我不会偏袒答案。回答这个问题的问题不在于答案很难找到,而是从很多人那里选择一个很难。
答案 0 :(得分:2)
我正在开发一个基于Mustache的系统,正是您所描述的用例。模板语言本身是Mustache的一个非常简单的扩展名为Groome。
我还发布了一个名为Molt的命令行工具,用于呈现Groome模板。我很想知道它是否能满足您的所有需求。我还在为该工具添加功能,尚未公布。感谢。
答案 1 :(得分:1)
我去解决类似问题几年后,我想用Emacs从UML图(cogre)生成代码,并从项目规范生成Makefile。我首先尝试使用Tempo,但是当我试图让模板嵌套时,我遇到了问题。我也研究过骨架,但这也不太符合计划。
我最终使用了Google模板,并且喜欢语法,而是开发了SRecode,只是借用了Google模板的优点。 SRecode是专门为机器生成的代码编写的。模板插入的交互(又名 - 为什么速度编写)不是SRecode中的第一类。但是,为了从数据结构生成代码,它非常健壮,并且具有许多功能和自动填充的变量。它与您的主要模式密切配合,并允许许多嵌套模板,并控制嵌套字典值。有一个子系统将使用语义标签并从它们生成几种语言的代码。这意味着您可以使用Semantic以一种语言解析代码,并使用这些标记使用SReocde生成另一种语言的代码。漂亮! CEDET参考手册的许多部分都是以这种方式构建的。
模板本身允许循环,if语句和include语句。 SRecode中有几个用于制作“应用程序”的示例,例如注释编写器,EDE使用它来创建Makefile,这几乎就是您要做的事情。
答案 2 :(得分:0)
另一个选项是Generator,它提供“与语言无关的项目引导,强调简单性”。安装需要Node.js and npm。
Generator强调简单性意味着学习如何制作模板非常容易。生成器还使您不必通过文件路径引用模板 - 它在~/.generator
中查找模板。
但是,如果没有将这些文件复制到生成的项目中,则无法为模板本身编写README
或LICENSE
个文件。此外,Makefile
中编写的后生成命令将被复制到生成的Makefile
,即使它们不再使用也是如此。最后,ad-hoc模板语言没有提供逃避__lowercasevariables__
的方法 - 尽管我无法想到一种语言,这种限制会成为一个问题。