必须放在函数外部的JavaScript

时间:2013-09-11 12:55:42

标签: java javascript merge diff

我们有一个工具可以从给定的模型生成源代码(用于C#,Java,IOS等)。针对代码生成器缺少的任何功能手动编辑代码。每当对模型进行任何更改并需要从中生成源代码时,对先前版本执行的手动更改都将丢失。

为了最大限度地减少损失,用户编辑的代码块(方法,类,属性等)标有自定义属性(比如CUSTCODE)。在为新版本生成源时,如果提到了(通过用户)前一版本的路径,系统将比较两个源代码并合并内容如下(在这种情况下,先前版本被视为基础):

  1. 删除以前版本中可用但未在新版本中提供的任何代码块,这些代码块未标记为CUSTCODE。
  2. 替换两个版本中可用的任何代码块,并且不使用最新版本代码标记为CUSTCODE。
  3. 从最新代码中添加缺少的代码块。
  4. 为此,我们正在使用Microsoft Roslyn并正在按预期为C#工作(当然还会执行其他检查,例如使用)

    [注意:我可以将Java / C#用于合并应用程序。系统将通过传递params来调用任何应用程序。使用ASTRewriter for Java]

    也可以实现同样的目的

    现在面临的挑战是JS和HTML。目前我们专注于JS。 我们已经检查了几个AST JavaScript解析器,如Rhino,IronJS,astify等。但是我在某些时候被阻止使用它们。

    所以我想建立一个自定义合并。由于JavaScript是如此动态,我们(将)设置JS代码的指南。

    1. 将所有代码包含在命名函数中,该函数充当匹配和合并的唯一标识符。
    2. 在系统需要在合并时保持功能完好时,在方法之上添加带有“CUSTCODE”的注释。
    3. 我们的目的是遵循以下方法:

      1. 将jQuery中的匿名函数移动到命名函数中,并在jQuery中调用它们
      2. 命名任何匿名函数,例如var v = function()...
      3. 将所有jQueries和独立代码片段包装到命名的自执行函数中,同时保持订单不变。
      4. 将所有全局变量移动到JS文件的顶部。 (不要包含在任何功能中)
      5. 合并过程的工作原理如下:

        1. 捕获所有字符串(单引号,双引号),注释(内联,块)并替换为一些唯一标识符。 (除了标有“CUSTCODE”的那些
        2. 捕获函数体(基于'{'和'}'的计数)并替换为唯一标识符。阅读上一行,标记方法是否为“CUSTCODE”
        3. 比较并用适当的最新版本内容替换捕获的函数体。
        4. 恢复所有捕获以生成最终输出。
        5. 我想知道我还需要考虑什么。

0 个答案:

没有答案