analyzer_notify.pony

use "collections"
use "files"

use ast = "../ast"
use parser = "../parser"

interface tag AnalyzerNotify
  be parsed_file(
    analyze: Analyzer,
    task_id: USize,
    canonical_path: FilePath,
    syntax_tree: ast.Node,
    line_beginnings: ReadSeq[parser.Loc] val)

  be analyzed_workspace(
    analyze: Analyzer,
    task_id: USize,
    workspace_errors: ReadSeq[AnalyzerError] val,
    parse_errors: ReadSeq[AnalyzerError] val,
    lint_errors: ReadSeq[AnalyzerError] val,
    analyze_errors: ReadSeq[AnalyzerError] val)

  be analyzed_file(
    analyze: Analyzer,
    task_id: USize,
    canonical_path: FilePath,
    syntax_tree: (ast.Node | None),
    file_scope: (Scope val | None),
    parse_errors: ReadSeq[AnalyzerError] val,
    lint_errors: ReadSeq[AnalyzerError] val,
    analyze_errors: ReadSeq[AnalyzerError] val)

  be analyze_failed(
    analyze: Analyzer,
    task_id: USize,
    canonical_path: FilePath,
    errors: ReadSeq[AnalyzerError] val)

interface tag AnalyzerRequestNotify
  be request_succeeded(
    task_id: USize,
    canonical_path: FilePath,
    syntax_tree: (ast.Node | None),
    nodes_by_index: Map[USize, ast.Node] val,
    scope: Scope val)

  be request_failed(
    task_id: USize,
    canonical_path: FilePath,
    message: String)