Skip to content

Commit

Permalink
feature(engine): fix rust printer, add pty
Browse files Browse the repository at this point in the history
  • Loading branch information
W95Psp committed Aug 8, 2024
1 parent 8c205c4 commit 6fb46a0
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
37 changes: 31 additions & 6 deletions engine/lib/print_rust.ml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ module Raw = struct
let rec pglobal_ident' prefix span (e : global_ident) : AnnotatedString.t =
let ( ! ) s = pure span (prefix ^ s) in
match e with
| `Concrete c -> !(Concrete_ident_view.show c)
| `Concrete c ->
!(let s = Concrete_ident_view.show c in
if String.equal "_" s then "_anon" else s)
| `Primitive p -> pprimitive_ident span p
| `TupleType n -> ![%string "tuple%{Int.to_string n}"]
| `TupleCons n -> ![%string "Tuple%{Int.to_string n}"]
Expand All @@ -111,6 +113,7 @@ module Raw = struct
name
| _ -> e.name
in
let name = if String.equal name "_" then "_anon" else name in
pure span name

let dmutability span : _ -> AnnotatedString.t =
Expand Down Expand Up @@ -414,15 +417,24 @@ module Raw = struct
!(Concrete_ident_view.show trait)
& if List.is_empty args then empty else !"<" & args & !">"

let pprojection_predicate span (pp : projection_predicate) =
let ( ! ) = pure span in
(pp.impl.goal.args
|> List.find_map ~f:(function GType ty -> Some ty | _ -> None)
|> Option.map ~f:(pty span)
|> Option.value ~default:!"unknown_self")
& !" :"
& !(Concrete_ident_view.show pp.impl.goal.trait)
& !"<"
& !(Concrete_ident_view.to_definition_name pp.assoc_item)
& !" = " & pty span pp.typ & !">"

let pgeneric_constraint span (p : generic_constraint) =
let ( ! ) = pure span in
match p with
| GCLifetime _ -> !"'unk: 'unk"
| GCType { goal; _ } -> !"_:" & ptrait_goal span goal
| GCProjection { assoc_item; typ; _ } ->
!"_:_<_>::"
& !(Concrete_ident_view.show assoc_item)
& !"==" & pty span typ
| GCType { goal; _ } -> !"_: " & ptrait_goal span goal
| GCProjection pp -> pprojection_predicate span pp

let pgeneric_constraints span (constraints : generic_constraint list) =
if List.is_empty constraints then empty
Expand Down Expand Up @@ -650,6 +662,19 @@ let pitems : item list -> AnnotatedString.Output.t =

let pitem_str : item -> string = pitem >> AnnotatedString.Output.raw_string

let pty_str (e : ty) : string =
let e = Raw.pty (Span.dummy ()) e in
let ( ! ) = AnnotatedString.pure @@ Span.dummy () in
let ( & ) = AnnotatedString.( & ) in
let prefix = "type TypeWrapper = " in
let suffix = ";" in
let item = !prefix & e & !suffix in
rustfmt_annotated item |> AnnotatedString.Output.convert
|> AnnotatedString.Output.raw_string |> Stdlib.String.trim
|> String.chop_suffix_if_exists ~suffix
|> String.chop_prefix_if_exists ~prefix
|> Stdlib.String.trim

let pexpr_str (e : expr) : string =
let e = Raw.pexpr e in
let ( ! ) = AnnotatedString.pure @@ Span.dummy () in
Expand Down
1 change: 1 addition & 0 deletions engine/lib/print_rust.mli
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ val pitem : item -> AnnotatedString.Output.t
val pitems : item list -> AnnotatedString.Output.t
val pitem_str : item -> string
val pexpr_str : expr -> string
val pty_str : ty -> string

0 comments on commit 6fb46a0

Please sign in to comment.