diff --git a/lib/compiler/Error.ml b/lib/compiler/Error.ml index 5bcd41d..56bf371 100644 --- a/lib/compiler/Error.ml +++ b/lib/compiler/Error.ml @@ -58,6 +58,8 @@ let of_io_error exn = Io_error exn let of_internal_error exn = Internal_error exn let of_config_error exn = Configuration_error exn +let yield_eval_error = of_eval_error >>> Collect_errors.yield + open Grace open Diagnostic diff --git a/lib/compiler/Eval.ml b/lib/compiler/Eval.ml index c116ea7..8352202 100644 --- a/lib/compiler/Eval.ml +++ b/lib/compiler/Eval.ml @@ -16,8 +16,6 @@ open struct type located = Value.t Range.located end -module Collect_errors = Algaeff.Sequencer.Make (Eval_error) - open Eval_error let extract_content ({value; range} : located) = @@ -359,7 +357,7 @@ and eval_node ~env ({value; range} as node) : (Value.t, Eval_error.t) result = @@ T.Text (Format.asprintf "%a%s" pp_tex_cs cs rest) | _, _ -> let suggestions = Suggestions.create_suggestions ~visible path in - Collect_errors.yield + Error.yield_eval_error @@ {error = Unresolved_identifier {suggestions; path}; range}; emit_content_node ~env ~range @@ T.Text (Format.asprintf "\\%a" Resolver.Scope.pp_path path) @@ -655,7 +653,7 @@ and eval_node ~env ({value; range} as node) : (Value.t, Eval_error.t) result = let* value = eval_tape ~env arg in extract_dx_term {node with value} in - List.iter Collect_errors.yield errors; + List.iter Error.yield_eval_error errors; focus ~env ?range:node.range @@ Dx_prop {rel; args} | Dx_sequent (conclusion, premises) -> let* conclusion = @@ -667,7 +665,7 @@ and eval_node ~env ({value; range} as node) : (Value.t, Eval_error.t) result = let* value = eval_tape ~env premise in extract_dx_prop {node with value} in - List.iter Collect_errors.yield errors; + List.iter Error.yield_eval_error errors; focus ~env ?range:node.range @@ Dx_sequent {conclusion; premises} | Dx_query (var, positives, negatives) -> let errors, positives = @@ -675,13 +673,13 @@ and eval_node ~env ({value; range} as node) : (Value.t, Eval_error.t) result = let* value = eval_tape ~env premise in extract_dx_prop {node with value} in - List.iter Collect_errors.yield errors; + List.iter Error.yield_eval_error errors; let errors, negatives = let@ premise = List_util.error_partition @~ negatives in let* value = eval_tape ~env premise in extract_dx_prop {node with value} in - List.iter Collect_errors.yield errors; + List.iter Error.yield_eval_error errors; focus ~env ?range:node.range @@ Dx_query {var; positives; negatives} | Dx_var name -> focus ~env ?range:node.range @@ Dx_var name | Dx_const (type_, arg) -> @@ -795,15 +793,15 @@ let eval_tree : uri:URI.t -> source_path:string option -> Syn.t -> - eval_result option * t list = + eval_result option * Error.t list = fun ~config ~uri ~source_path tree -> let res = ref None in let errors = - let@ () = Collect_errors.run in + let@ () = Error.collect in let fm = T.default_frontmatter ~uri ?source_path () in let env = initial_eval_env config (ref fm) in match eval_tree_inner ~env ~uri tree with - | Error error -> Collect_errors.yield error + | Error error -> Error.yield_eval_error error | Ok main -> let side = env.emitted_trees |> Stack.to_seq |> List.of_seq in let jobs = env.jobs |> Stack.to_seq |> List.of_seq in diff --git a/lib/compiler/Eval_error.ml b/lib/compiler/Eval_error.ml index 45c3ba5..55c82a5 100644 --- a/lib/compiler/Eval_error.ml +++ b/lib/compiler/Eval_error.ml @@ -66,10 +66,3 @@ let missing_argument ~range i = error @@ {range; error = Missing_arguments i} let unbound_method ~range str = error @@ {range; error = Unbound_method str} let unbound_fluid_symbol ~range sym = error @@ {range; error = Unbound_fluid_symbol sym} - -(* -let literal_attribution_warning ~range = - {range; error = Literal_attribution_warning} -let unlinked_attribution_warning ~range = - {range; error = Unlinked_attribution_warning} - *) diff --git a/lib/compiler/Phases.ml b/lib/compiler/Phases.ml index 5d7bcde..67ec8cd 100644 --- a/lib/compiler/Phases.ml +++ b/lib/compiler/Phases.ml @@ -130,7 +130,7 @@ let eval (forest : State.t) = in organize results in - (List.map Error.of_eval_error additional_errors @ List.concat errors, results) + (additional_errors @ List.concat errors, results) let eval_only (uri : URI.t) (forest : State.t) = match forest.={uri} with @@ -145,7 +145,7 @@ let eval_only (uri : URI.t) (forest : State.t) = let result, errors = Eval.eval_tree ~config:forest.config ~source_path ~uri expanded.nodes in - forest.?{uri} <- List.map Error.of_eval_error errors; + forest.?{uri} <- errors; let@ {articles; _} = Option.iter @~ result in let@ article = List.iter @~ articles in State.plant_resource ~forest (Article article)