class SyntaxSuggest::CodeFrontier

该算法主要分为三个阶段

  1. 清理/格式化输入源代码

  2. 搜索无效代码块

  3. 将无效代码块格式化为有意义的内容

代码前沿是第二步的关键部分

## 了解我们去过的地方

一旦生成代码块,它就会被添加到前沿。然后它将按缩进排序,并且可以过滤前沿。完全包含较小代码块的大代码块将导致较小的代码块被逐出。

CodeFrontier#<<(block) # Adds block to frontier
CodeFrontier#pop # Removes block from frontier

## 了解我们可以去哪里

在内部,前沿会跟踪“未访问”的行,这些行通过调用 ‘next_indent_line’ 暴露出来,此方法返回具有最高缩进的代码行。

返回的代码行可用于构建 CodeBlock,然后将该代码块添加回前沿。然后,这些行将从“未访问”中删除,这样我们就不会重复创建相同的代码块。

CodeFrontier#next_indent_line # Shows next line
CodeFrontier#register_indent_block(block) # Removes lines from unvisited

## 了解何时停止

前沿知道如何检查整个文档是否存在语法错误。当代码块添加到前沿时,它们会从文档中删除。当所有包含语法错误的代码都添加到前沿后,文档将可以解析而不会出现语法错误,并且搜索可以停止。

CodeFrontier#holds_all_syntax_errors? # Returns true when frontier holds all syntax errors

## 过滤误报

搜索完成后,前沿可能包含多个不包含语法错误的代码块。要将结果限制为最小的“无效代码块”子集,请调用

CodeFrontier#detect_invalid_blocks