抽取策略

准备源代码和对应的带注释版本,须注意LLM生成的带注释版本极有可能会吞掉注释之后具体实现的代码(LLM特色),因此我们才需要抽取注释并移动

步骤

  1. 使用tree-sitter构造注释代码的语法树,并获取根节点
  2. 遍历注释版本的代码语法树,当遇到注释节点时
    1. 向上不断找父节点,直到如下两种情况之一
    2. 如果父节点是block,则上一节点就是这个注释处于的层级位置
      1. 比如可能是class_definition, function_definition
      2. 还有可能是for_statement这种statement节点
    3. 如果父节点是module,则说明这个注释写在代码主体之外
  3. 对于停止父节点是block的,再获取其上的一级父节点,找到block在该节点中的子节点下标index,则在源代码中该注释应当插在注释代码中子节点下标为index - 2(index - 1可能是’:')的文本在源代码中对应文本的后面
  4. 对于停止父节点是module的,直接插在源代码最上面