get-scope --with-types flag

This commit is contained in:
Lesenechal Remi 2020-06-29 18:31:44 +02:00
parent 21904f7e53
commit 4026411e10
4 changed files with 27 additions and 19 deletions

View File

@ -96,6 +96,13 @@ let disable_michelson_typechecking =
info ~doc ["disable-michelson-typechecking"] in info ~doc ["disable-michelson-typechecking"] in
value @@ flag info value @@ flag info
let with_types =
let open Arg in
let info =
let doc = "tries to infer types for all named expressions" in
info ~doc ["with-types"] in
value @@ flag info
let predecessor_timestamp = let predecessor_timestamp =
let open Arg in let open Arg in
let info = let info =
@ -485,12 +492,12 @@ let transpile_expression =
let get_scope = let get_scope =
let f source_file syntax display_format = let f source_file syntax display_format with_types =
return_result ~display_format Ligo.Scopes.Formatter.scope_format @@ return_result ~display_format Ligo.Scopes.Formatter.scope_format @@
Ligo.Scopes.scopes source_file syntax Ligo.Scopes.scopes ~with_types source_file syntax
in in
let term = let term =
Term.(const f $ source_file 0 $ syntax $ display_format) in Term.(const f $ source_file 0 $ syntax $ display_format $ with_types) in
let cmdname = "get-scope" in let cmdname = "get-scope" in
let doc = "Subcommand: Return the JSON encoded environment for a given file." in let doc = "Subcommand: Return the JSON encoded environment for a given file." in
(Term.ret term , Term.info ~doc cmdname) (Term.ret term , Term.info ~doc cmdname)

View File

@ -19,8 +19,8 @@ let add_shadowing_def : (int * _ Var.t) -> def -> def_map -> (int * def_map) =
let env = Def_map.add definition_id def shadow in let env = Def_map.add definition_id def shadow in
(i,env) (i,env)
let make_v_def_from_core : string -> string -> string -> Ast_core.expression -> Location.t -> Location.t -> def = let make_v_def_from_core : with_types:bool -> string -> string -> string -> Ast_core.expression -> Location.t -> Location.t -> def =
fun source_file syntax name exp range body_range -> fun ~with_types source_file syntax name exp range body_range ->
let t = to_option @@ let t = to_option @@
let%bind typed_prg,state = Compile.Utils.type_file source_file syntax Env in let%bind typed_prg,state = Compile.Utils.type_file source_file syntax Env in
let env = Ast_typed.program_environment Environment.default typed_prg in let env = Ast_typed.program_environment Environment.default typed_prg in
@ -29,27 +29,27 @@ let make_v_def_from_core : string -> string -> string -> Ast_core.expression ->
in in
(* TODO : the source_file is given here but it should only be the declarations seen so far, (* TODO : the source_file is given here but it should only be the declarations seen so far,
otherwise nothing will be typed if an error occurs later in the file *) otherwise nothing will be typed if an error occurs later in the file *)
make_v_def name t range body_range make_v_def ~with_types name t range body_range
let make_v_def_option_type : string -> string -> string -> Ast_core.type_expression option -> Location.t -> Location.t -> def = let make_v_def_option_type : with_types:bool -> string -> string -> string -> Ast_core.type_expression option -> Location.t -> Location.t -> def =
fun source_file syntax name maybe_typed range body_range -> fun ~with_types source_file syntax name maybe_typed range body_range ->
match maybe_typed with match maybe_typed with
| Some t -> | Some t ->
let t' = to_option @@ let t' = to_option @@
let%bind typed_prg,_ = Compile.Utils.type_file source_file syntax Env in let%bind typed_prg,_ = Compile.Utils.type_file source_file syntax Env in
let env = Ast_typed.program_environment Environment.default typed_prg in let env = Ast_typed.program_environment Environment.default typed_prg in
Compile.Of_core.evaluate_type env t in Compile.Of_core.evaluate_type env t in
make_v_def name t' range body_range make_v_def ~with_types name t' range body_range
| None -> make_v_def name None range body_range | None -> make_v_def ~with_types name None range body_range
let make_v_def_ppx_type : let make_v_def_ppx_type :
string -> string -> string -> (Ast_typed.type_expression -> Ast_typed.type_expression) -> with_types:bool -> string -> string -> string -> (Ast_typed.type_expression -> Ast_typed.type_expression) ->
Ast_core.expression -> Location.t -> Location.t -> def = Ast_core.expression -> Location.t -> Location.t -> def =
fun source_file syntax name f exp range body_range -> fun ~with_types source_file syntax name f exp range body_range ->
let t = to_option @@ let t = to_option @@
let%bind typed_prg,state = Compile.Utils.type_file source_file syntax Env in let%bind typed_prg,state = Compile.Utils.type_file source_file syntax Env in
let env = Ast_typed.program_environment Environment.default typed_prg in let env = Ast_typed.program_environment Environment.default typed_prg in
let%bind (e,_) = Compile.Of_core.compile_expression ~env ~state exp in let%bind (e,_) = Compile.Of_core.compile_expression ~env ~state exp in
let v = f e.type_expression in ok v let v = f e.type_expression in ok v
in in
make_v_def name t range body_range make_v_def ~with_types name t range body_range

View File

@ -4,10 +4,10 @@ open Misc
module Formatter = Formatter module Formatter = Formatter
let scopes : string -> string -> ((def_map * scopes), Main_errors.all) result = fun source_file syntax -> let scopes : with_types:bool -> string -> string -> ((def_map * scopes), Main_errors.all) result = fun ~with_types source_file syntax ->
let make_v_def_from_core = make_v_def_from_core source_file syntax in let make_v_def_from_core = make_v_def_from_core ~with_types source_file syntax in
let make_v_def_option_type = make_v_def_option_type source_file syntax in let make_v_def_option_type = make_v_def_option_type ~with_types source_file syntax in
let make_v_def_ppx_type = make_v_def_ppx_type source_file syntax in let make_v_def_ppx_type = make_v_def_ppx_type ~with_types source_file syntax in
let rec find_scopes' = fun (i,all_defs,env,scopes,lastloc) (e : Ast_core.expression) -> let rec find_scopes' = fun (i,all_defs,env,scopes,lastloc) (e : Ast_core.expression) ->
match e.content with match e.content with

View File

@ -27,8 +27,9 @@ module Definitions = struct
| Type t -> t.range | Type t -> t.range
| Variable v -> v.range | Variable v -> v.range
let make_v_def : string -> Ast_typed.type_expression option -> Location.t -> Location.t -> def = let make_v_def : with_types:bool -> string -> Ast_typed.type_expression option -> Location.t -> Location.t -> def =
fun name t range body_range -> fun ~with_types name t range body_range ->
let t = if with_types then t else None in
Variable { name ; range ; body_range ; t ; references = None } Variable { name ; range ; body_range ; t ; references = None }
let make_t_def : string -> Ast_core.declaration Location.wrap -> Ast_core.type_expression -> def = let make_t_def : string -> Ast_core.declaration Location.wrap -> Ast_core.type_expression -> def =