缩进代码生成

Odd*_*ing 5 php code-generation metaprogramming

通常,程序员编写生成其他代码的代码.

(技术术语是元编程,但它比仅仅交叉编译器更常见;考虑生成HTML或每个XSLT文件的每个PHP网页.)

一个领域,我觉得挑战性的未来与技术,以确保这两个手写的源文件,以及计算机生成的对象文件明确缩进来帮助调试.这两个目标似乎经常相互竞争.

我发现这在PHP/HTML组合中特别具有挑战性.我认为这是因为:

  • 源文件中有时会生成比生成PHP更多的HTML代码
  • HTML文件往往比SQL语句更长,需要更好的缩进
  • HTML具有空间敏感功能(例如标签之间)
  • 结果是比SQL语句更公开可见的HTML,因此要做更合理的工作会有更大的压力.

你用什么技术来解决这个问题?


编辑:我接受至少有三个参数不打扰生成漂亮的HTML代码:

  • 生成代码的复杂性增加了.
  • 浏览器渲染没有区别; 开发人员可以使用Firebug或类似功能来很好地查看它.
  • 轻微的性能损失 - 增加了空白字符的下载时间.

我当然有时会生成代码而不考虑缩进(尤其是SQL).

但是,有一些论点推动了另一种方式:

  • 我发现,在实践中,我频繁读取生成的代码-有额外的步骤来访问它是不方便的.
  • HTML有一些空间敏感问题,偶尔会有一些问题.

例如,考虑代码:

<div class="foo">
    <?php
        $fooHeader();
        $fooBody();
        $fooFooter();
    ?>
</div>
Run Code Online (Sandbox Code Playgroud)

它比以下代码更清晰:

<div class="foo"><?php
        $fooHeader();
        $fooBody();
        $fooFooter();
?></div>
Run Code Online (Sandbox Code Playgroud)

但是,由于HTML中包含的空格,它也有不同的渲染.

Gre*_*ill 4

在更一般的情况下,我编写了生成 C++ 数据库接口代码的 XSLT 代码。尽管一开始我尝试从 XSLT 输出正确缩进的代码,但这很快就变得站不住脚了。我的解决方案是完全忽略 XSLT 输出中的格式,然后通过GNU indent运行生成的很长的代码行。这生成了一个格式合理、适合调试的 C++ 源文件。

我可以想象,在处理 HTML 和 PHP 等组合源代码时,问题会变得更加棘手。