class SyntaxSuggest::CodeFrontier

算法有三个主要阶段

  1. 净化/格式化输入源码

  2. 搜索无效代码块

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

Code frontier 是第二步的关键部分

## 了解我们去过哪里

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

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

## 了解我们可以去哪里

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

返回的代码行可用于构建一个 CodeBlock,然后将该代码块添加回 frontier。然后,从“未访问”中移除这些行,以免我们重复创建相同的块。

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

## 了解何时停止

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

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

## 过滤误报

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

CodeFrontier#detect_invalid_blocks