* [ligo pretty-print foo.mligo] works.
* [ligo pretty-print foo.religo] is a transpiler (for now) and needs more work. * Renamed functions *_ast into *_cst. One day, module AST should be renamed CST for clarity and consistency.
This commit is contained in:
parent
041a48bc7b
commit
320e31cb41
@ -159,10 +159,22 @@ let preprocess =
|
|||||||
let doc = "Subcommand: Preprocess the source file.\nWarning: Intended for development of LIGO and can break at any time." in
|
let doc = "Subcommand: Preprocess the source file.\nWarning: Intended for development of LIGO and can break at any time." in
|
||||||
(Term.ret term, Term.info ~doc cmdname)
|
(Term.ret term, Term.info ~doc cmdname)
|
||||||
|
|
||||||
|
let pretty_print =
|
||||||
|
let f source_file syntax display_format = (
|
||||||
|
toplevel ~display_format @@
|
||||||
|
let%bind pp =
|
||||||
|
Compile.Of_source.pretty_print source_file (Syntax_name syntax) in
|
||||||
|
ok @@ Buffer.contents pp
|
||||||
|
) in
|
||||||
|
let term = Term.(const f $ source_file 0 $ syntax $ display_format) in
|
||||||
|
let cmdname = "pretty-print" in
|
||||||
|
let doc = "Subcommand: Pretty-print the source file."
|
||||||
|
in (Term.ret term, Term.info ~doc cmdname)
|
||||||
|
|
||||||
let print_cst =
|
let print_cst =
|
||||||
let f source_file syntax display_format = (
|
let f source_file syntax display_format = (
|
||||||
toplevel ~display_format @@
|
toplevel ~display_format @@
|
||||||
let%bind pp = Compile.Of_source.pretty_print source_file (Syntax_name syntax) in
|
let%bind pp = Compile.Of_source.pretty_print_cst source_file (Syntax_name syntax) in
|
||||||
ok @@ Format.asprintf "%s \n" (Buffer.contents pp)
|
ok @@ Format.asprintf "%s \n" (Buffer.contents pp)
|
||||||
)
|
)
|
||||||
in
|
in
|
||||||
@ -489,5 +501,6 @@ let run ?argv () =
|
|||||||
print_ast_typed ;
|
print_ast_typed ;
|
||||||
print_mini_c ;
|
print_mini_c ;
|
||||||
list_declarations ;
|
list_declarations ;
|
||||||
preprocess
|
preprocess;
|
||||||
|
pretty_print
|
||||||
]
|
]
|
||||||
|
@ -129,7 +129,7 @@ let parsify_string syntax source =
|
|||||||
let%bind applied = Self_ast_imperative.all_program parsified
|
let%bind applied = Self_ast_imperative.all_program parsified
|
||||||
in ok applied
|
in ok applied
|
||||||
|
|
||||||
let pretty_print_pascaligo source =
|
let pretty_print_pascaligo_cst source =
|
||||||
let%bind ast = Parser.Pascaligo.parse_file source in
|
let%bind ast = Parser.Pascaligo.parse_file source in
|
||||||
let buffer = Buffer.create 59 in
|
let buffer = Buffer.create 59 in
|
||||||
let state =
|
let state =
|
||||||
@ -137,10 +137,10 @@ let pretty_print_pascaligo source =
|
|||||||
~offsets:true
|
~offsets:true
|
||||||
~mode:`Byte
|
~mode:`Byte
|
||||||
~buffer in
|
~buffer in
|
||||||
Parser_pascaligo.ParserLog.pp_ast state ast;
|
Parser_pascaligo.ParserLog.pp_cst state ast;
|
||||||
ok buffer
|
ok buffer
|
||||||
|
|
||||||
let pretty_print_cameligo source =
|
let pretty_print_cameligo_cst source =
|
||||||
let%bind ast = Parser.Cameligo.parse_file source in
|
let%bind ast = Parser.Cameligo.parse_file source in
|
||||||
let buffer = Buffer.create 59 in
|
let buffer = Buffer.create 59 in
|
||||||
let state = (* TODO: Should flow from the CLI *)
|
let state = (* TODO: Should flow from the CLI *)
|
||||||
@ -148,10 +148,10 @@ let pretty_print_cameligo source =
|
|||||||
~offsets:true
|
~offsets:true
|
||||||
~mode:`Point
|
~mode:`Point
|
||||||
~buffer in
|
~buffer in
|
||||||
Parser_cameligo.ParserLog.pp_ast state ast;
|
Parser_cameligo.ParserLog.pp_cst state ast;
|
||||||
ok buffer
|
ok buffer
|
||||||
|
|
||||||
let pretty_print_reasonligo source =
|
let pretty_print_reasonligo_cst source =
|
||||||
let%bind ast = Parser.Reasonligo.parse_file source in
|
let%bind ast = Parser.Reasonligo.parse_file source in
|
||||||
let buffer = Buffer.create 59 in
|
let buffer = Buffer.create 59 in
|
||||||
let state = (* TODO: Should flow from the CLI *)
|
let state = (* TODO: Should flow from the CLI *)
|
||||||
@ -159,16 +159,16 @@ let pretty_print_reasonligo source =
|
|||||||
~offsets:true
|
~offsets:true
|
||||||
~mode:`Point
|
~mode:`Point
|
||||||
~buffer in
|
~buffer in
|
||||||
Parser_cameligo.ParserLog.pp_ast state ast;
|
Parser_cameligo.ParserLog.pp_cst state ast;
|
||||||
ok buffer
|
ok buffer
|
||||||
|
|
||||||
let pretty_print syntax source =
|
let pretty_print_cst syntax source =
|
||||||
let%bind v_syntax =
|
let%bind v_syntax =
|
||||||
syntax_to_variant syntax (Some source) in
|
syntax_to_variant syntax (Some source) in
|
||||||
match v_syntax with
|
match v_syntax with
|
||||||
PascaLIGO -> pretty_print_pascaligo source
|
PascaLIGO -> pretty_print_pascaligo_cst source
|
||||||
| CameLIGO -> pretty_print_cameligo source
|
| CameLIGO -> pretty_print_cameligo_cst source
|
||||||
| ReasonLIGO -> pretty_print_reasonligo source
|
| ReasonLIGO -> pretty_print_reasonligo_cst source
|
||||||
|
|
||||||
let preprocess_pascaligo = Parser.Pascaligo.preprocess
|
let preprocess_pascaligo = Parser.Pascaligo.preprocess
|
||||||
|
|
||||||
@ -183,3 +183,39 @@ let preprocess syntax source =
|
|||||||
PascaLIGO -> preprocess_pascaligo source
|
PascaLIGO -> preprocess_pascaligo source
|
||||||
| CameLIGO -> preprocess_cameligo source
|
| CameLIGO -> preprocess_cameligo source
|
||||||
| ReasonLIGO -> preprocess_reasonligo source
|
| ReasonLIGO -> preprocess_reasonligo source
|
||||||
|
|
||||||
|
let pretty_print_pascaligo source =
|
||||||
|
let%bind ast = Parser.Pascaligo.parse_file source in
|
||||||
|
let () = ignore ast in (* TODO *)
|
||||||
|
let buffer = Buffer.create 131
|
||||||
|
in Trace.ok buffer
|
||||||
|
|
||||||
|
let pretty_print_cameligo source =
|
||||||
|
let%bind ast = Parser.Cameligo.parse_file source in
|
||||||
|
let doc = Parser_cameligo.Pretty.make ast in
|
||||||
|
let buffer = Buffer.create 131 in
|
||||||
|
let width =
|
||||||
|
match Terminal_size.get_columns () with
|
||||||
|
None -> 60
|
||||||
|
| Some c -> c in
|
||||||
|
let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
|
||||||
|
in Trace.ok buffer
|
||||||
|
|
||||||
|
let pretty_print_reasonligo source =
|
||||||
|
let%bind ast = Parser.Reasonligo.parse_file source in
|
||||||
|
let doc = Parser_cameligo.Pretty.make ast in (* TODO *)
|
||||||
|
let buffer = Buffer.create 131 in
|
||||||
|
let width =
|
||||||
|
match Terminal_size.get_columns () with
|
||||||
|
None -> 60
|
||||||
|
| Some c -> c in
|
||||||
|
let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
|
||||||
|
in Trace.ok buffer
|
||||||
|
|
||||||
|
let pretty_print syntax source =
|
||||||
|
let%bind v_syntax =
|
||||||
|
syntax_to_variant syntax (Some source) in
|
||||||
|
match v_syntax with
|
||||||
|
PascaLIGO -> pretty_print_pascaligo source
|
||||||
|
| CameLIGO -> pretty_print_cameligo source
|
||||||
|
| ReasonLIGO -> pretty_print_reasonligo source
|
||||||
|
@ -19,8 +19,11 @@ let compile_contract_input : string -> string -> v_syntax -> Ast_imperative.expr
|
|||||||
let%bind (storage,parameter) = bind_map_pair (compile_expression syntax) (storage,parameter) in
|
let%bind (storage,parameter) = bind_map_pair (compile_expression syntax) (storage,parameter) in
|
||||||
ok @@ Ast_imperative.e_pair storage parameter
|
ok @@ Ast_imperative.e_pair storage parameter
|
||||||
|
|
||||||
let pretty_print source_filename syntax =
|
let pretty_print_cst source_filename syntax =
|
||||||
Helpers.pretty_print syntax source_filename
|
Helpers.pretty_print_cst syntax source_filename
|
||||||
|
|
||||||
let preprocess source_filename syntax =
|
let preprocess source_filename syntax =
|
||||||
Helpers.preprocess syntax source_filename
|
Helpers.preprocess syntax source_filename
|
||||||
|
|
||||||
|
let pretty_print source_filename syntax =
|
||||||
|
Helpers.pretty_print syntax source_filename
|
||||||
|
@ -628,7 +628,7 @@ let pp_verbatim state {value=name; region} =
|
|||||||
let pp_loc_node state name region =
|
let pp_loc_node state name region =
|
||||||
pp_ident state {value=name; region}
|
pp_ident state {value=name; region}
|
||||||
|
|
||||||
let rec pp_ast state {decl; _} =
|
let rec pp_cst state {decl; _} =
|
||||||
let apply len rank =
|
let apply len rank =
|
||||||
pp_declaration (state#pad len rank) in
|
pp_declaration (state#pad len rank) in
|
||||||
let decls = Utils.nseq_to_list decl in
|
let decls = Utils.nseq_to_list decl in
|
||||||
|
@ -27,5 +27,5 @@ val expr_to_string :
|
|||||||
|
|
||||||
(** {1 Pretty-printing of AST nodes} *)
|
(** {1 Pretty-printing of AST nodes} *)
|
||||||
|
|
||||||
val pp_ast : state -> AST.t -> unit
|
val pp_cst : state -> AST.t -> unit
|
||||||
val pp_expr : state -> AST.expr -> unit
|
val pp_expr : state -> AST.expr -> unit
|
||||||
|
@ -855,7 +855,7 @@ let pp_verbatim state {value=name; region} =
|
|||||||
let pp_loc_node state name region =
|
let pp_loc_node state name region =
|
||||||
pp_ident state {value=name; region}
|
pp_ident state {value=name; region}
|
||||||
|
|
||||||
let rec pp_ast state {decl; _} =
|
let rec pp_cst state {decl; _} =
|
||||||
let apply len rank =
|
let apply len rank =
|
||||||
pp_declaration (state#pad len rank) in
|
pp_declaration (state#pad len rank) in
|
||||||
let decls = Utils.nseq_to_list decl in
|
let decls = Utils.nseq_to_list decl in
|
||||||
|
@ -33,5 +33,5 @@ val instruction_to_string :
|
|||||||
|
|
||||||
(** {1 Pretty-printing of AST nodes} *)
|
(** {1 Pretty-printing of AST nodes} *)
|
||||||
|
|
||||||
val pp_ast : state -> AST.t -> unit
|
val pp_cst : state -> AST.t -> unit
|
||||||
val pp_expr : state -> AST.expr -> unit
|
val pp_expr : state -> AST.expr -> unit
|
||||||
|
@ -32,7 +32,7 @@ module type Printer =
|
|||||||
val mk_state :
|
val mk_state :
|
||||||
offsets:bool -> mode:[`Point|`Byte] -> buffer:Buffer.t -> state
|
offsets:bool -> mode:[`Point|`Byte] -> buffer:Buffer.t -> state
|
||||||
|
|
||||||
val pp_ast : state -> ast -> unit
|
val pp_cst : state -> ast -> unit
|
||||||
val pp_expr : state -> expr -> unit
|
val pp_expr : state -> expr -> unit
|
||||||
val print_tokens : state -> ast -> unit
|
val print_tokens : state -> ast -> unit
|
||||||
val print_expr : state -> expr -> unit
|
val print_expr : state -> expr -> unit
|
||||||
@ -146,7 +146,7 @@ module Make (Lexer: Lexer.S)
|
|||||||
if SSet.mem "ast" SubIO.options#verbose then
|
if SSet.mem "ast" SubIO.options#verbose then
|
||||||
begin
|
begin
|
||||||
Buffer.clear output;
|
Buffer.clear output;
|
||||||
ParserLog.pp_ast state ast;
|
ParserLog.pp_cst state ast;
|
||||||
Buffer.output_buffer stdout output
|
Buffer.output_buffer stdout output
|
||||||
end
|
end
|
||||||
in flush_all (); close (); Ok ast
|
in flush_all (); close (); Ok ast
|
||||||
|
@ -36,7 +36,7 @@ module type Printer =
|
|||||||
val mk_state :
|
val mk_state :
|
||||||
offsets:bool -> mode:[`Point|`Byte] -> buffer:Buffer.t -> state
|
offsets:bool -> mode:[`Point|`Byte] -> buffer:Buffer.t -> state
|
||||||
|
|
||||||
val pp_ast : state -> ast -> unit
|
val pp_cst : state -> ast -> unit
|
||||||
val pp_expr : state -> expr -> unit
|
val pp_expr : state -> expr -> unit
|
||||||
val print_tokens : state -> ast -> unit
|
val print_tokens : state -> ast -> unit
|
||||||
val print_expr : state -> expr -> unit
|
val print_expr : state -> expr -> unit
|
||||||
|
Loading…
Reference in New Issue
Block a user