Merge branch '46-get-a-list-of-all-functions-from-source-code' into 'dev'
Resolve "Get a list of all functions from source code" Closes #46 See merge request ligolang/ligo!276
This commit is contained in:
commit
85319cc0bb
@ -410,6 +410,19 @@ let dump_changelog =
|
|||||||
let doc = "Dump the LIGO changelog to stdout." in
|
let doc = "Dump the LIGO changelog to stdout." in
|
||||||
(Term.ret term , Term.info ~doc cmdname)
|
(Term.ret term , Term.info ~doc cmdname)
|
||||||
|
|
||||||
|
let list_declarations =
|
||||||
|
let f source_file syntax =
|
||||||
|
toplevel ~display_format:(`Human_readable) @@
|
||||||
|
let%bind simplified_prg = Compile.Of_source.compile source_file (Syntax_name syntax) in
|
||||||
|
let json_decl = List.map (fun decl -> `String decl) @@ Compile.Of_simplified.list_declarations simplified_prg in
|
||||||
|
ok @@ J.to_string @@ `Assoc [ ("source_file", `String source_file) ; ("declarations", `List json_decl) ]
|
||||||
|
in
|
||||||
|
let term =
|
||||||
|
Term.(const f $ source_file 0 $ syntax ) in
|
||||||
|
let cmdname = "list-declarations" in
|
||||||
|
let doc = "Subcommand: list all the top-level decalarations." in
|
||||||
|
(Term.ret term , Term.info ~doc cmdname)
|
||||||
|
|
||||||
let run ?argv () =
|
let run ?argv () =
|
||||||
Term.eval_choice ?argv main [
|
Term.eval_choice ?argv main [
|
||||||
compile_file ;
|
compile_file ;
|
||||||
@ -425,5 +438,6 @@ let run ?argv () =
|
|||||||
print_cst ;
|
print_cst ;
|
||||||
print_ast ;
|
print_ast ;
|
||||||
print_typed_ast ;
|
print_typed_ast ;
|
||||||
print_mini_c
|
print_mini_c ;
|
||||||
|
list_declarations ;
|
||||||
]
|
]
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
open Cli_expect
|
|
||||||
|
|
||||||
let%expect_test _ =
|
|
||||||
run_ligo_good [ "evaluate-value" ; "../../test/contracts/evaluation_tests.ligo" ; "a" ] ;
|
|
||||||
[%expect {|
|
|
||||||
{foo = +0 , bar = "bar"} |} ];
|
|
||||||
|
|
||||||
run_ligo_good [ "evaluate-value" ; "../../test/contracts/evaluation_tests.ligo" ; "b" ] ;
|
|
||||||
[%expect {|
|
|
||||||
2 |} ]
|
|
@ -44,6 +44,9 @@ let%expect_test _ =
|
|||||||
Subcommand: interpret the expression in the context initialized by
|
Subcommand: interpret the expression in the context initialized by
|
||||||
the provided source file.
|
the provided source file.
|
||||||
|
|
||||||
|
list-declarations
|
||||||
|
Subcommand: list all the top-level decalarations.
|
||||||
|
|
||||||
measure-contract
|
measure-contract
|
||||||
Subcommand: measure a contract's compiled size in bytes.
|
Subcommand: measure a contract's compiled size in bytes.
|
||||||
|
|
||||||
@ -117,6 +120,9 @@ let%expect_test _ =
|
|||||||
Subcommand: interpret the expression in the context initialized by
|
Subcommand: interpret the expression in the context initialized by
|
||||||
the provided source file.
|
the provided source file.
|
||||||
|
|
||||||
|
list-declarations
|
||||||
|
Subcommand: list all the top-level decalarations.
|
||||||
|
|
||||||
measure-contract
|
measure-contract
|
||||||
Subcommand: measure a contract's compiled size in bytes.
|
Subcommand: measure a contract's compiled size in bytes.
|
||||||
|
|
||||||
|
22
src/bin/expect_tests/misc_cli_commands.ml
Normal file
22
src/bin/expect_tests/misc_cli_commands.ml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
open Cli_expect
|
||||||
|
|
||||||
|
(* evaluate-value *)
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_good [ "evaluate-value" ; "../../test/contracts/evaluation_tests.ligo" ; "a" ] ;
|
||||||
|
[%expect {|
|
||||||
|
{foo = +0 , bar = "bar"} |} ];
|
||||||
|
|
||||||
|
run_ligo_good [ "evaluate-value" ; "../../test/contracts/evaluation_tests.ligo" ; "b" ] ;
|
||||||
|
[%expect {|
|
||||||
|
2 |} ]
|
||||||
|
|
||||||
|
(* list-declarations *)
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_good [ "list-declarations" ; "../../test/contracts/loop.ligo" ] ;
|
||||||
|
[%expect {| {"source_file":"../../test/contracts/loop.ligo","declarations":["inner_capture_in_conditional_block","dummy","nested_for_collection_local_var","nested_for_collection","for_collection_map_k","for_collection_map_kv","for_collection_empty","for_collection_with_patches","for_collection_comp_with_acc","for_collection_proc_call","for_collection_rhs_capture","for_collection_if_and_local_var","for_collection_set","for_collection_list","for_sum","while_sum","counter"]} |} ];
|
||||||
|
|
||||||
|
run_ligo_good [ "list-declarations" ; "../../test/contracts/loop.mligo" ] ;
|
||||||
|
[%expect {| {"source_file":"../../test/contracts/loop.mligo","declarations":["counter_nest","aux_nest","counter","counter_simple","aux_simple"]} |} ];
|
||||||
|
|
||||||
|
run_ligo_good [ "list-declarations" ; "../../test/contracts/loop.religo" ] ;
|
||||||
|
[%expect {| {"source_file":"../../test/contracts/loop.religo","declarations":["counter_nest","aux_nest","counter","counter_simple","aux_simple"]} |} ];
|
@ -21,3 +21,13 @@ let apply (entry_point : string) (param : Ast_simplified.expression) : Ast_simpl
|
|||||||
|
|
||||||
let pretty_print formatter (program : Ast_simplified.program) =
|
let pretty_print formatter (program : Ast_simplified.program) =
|
||||||
Ast_simplified.PP.program formatter program
|
Ast_simplified.PP.program formatter program
|
||||||
|
|
||||||
|
let list_declarations (program : Ast_simplified.program) : string list =
|
||||||
|
List.fold_left
|
||||||
|
(fun prev el ->
|
||||||
|
let open Location in
|
||||||
|
let open Ast_simplified in
|
||||||
|
match el.wrap_content with
|
||||||
|
| Declaration_constant (var,_,_,_) -> (Var.to_name var)::prev
|
||||||
|
| _ -> prev)
|
||||||
|
[] program
|
||||||
|
Loading…
Reference in New Issue
Block a user