package ppx_log
Ppx_sexp_message-like extension nodes for lazily rendering log messages
Install
Dune Dependency
Authors
Maintainers
Sources
ppx_log-v0.14.0.tar.gz
sha256=13e3f937caa8a53dd8e2a297a5531595011ac5e237a1cf06117c9fb17d9bf851
md5=0f85a9703c8265262a21e5010a5dcdd2
doc/src/ppx_log_kernel/ppx_log_kernel.ml.html
Source file ppx_log_kernel.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
open Ppxlib let expand ~level ~loc ~path:_ log message_args = let loc = { loc with loc_ghost = true } in let sexp = Ppx_sexp_message_expander.sexp_of_labelled_exprs ~omit_nil:false ~loc message_args in (* In order to use ppx_metaquot, we pass in a loc parameter to level. *) let level = level loc in [%expr if (Ppx_log_syntax.would_log [%e log] (Some [%e level]) [@merlin.hide]) then Ppx_log_syntax.sexp ~level:[%e level] [%e log] [%e sexp] else Ppx_log_syntax.default] ;; let pattern = let open Ast_pattern in (* this grabs the first argument from the apply and then passes it into Log.sexp's [log] parameter. All the arguments of apply are parsed as a message. *) pstr (pstr_eval (pexp_apply __ __) nil ^:: nil) ;; let ext name f = Extension.declare name Extension.Context.expression pattern (expand ~level:(fun loc -> f loc)) ;; (* [Global] has a similar structure to the above code, except that it doesn't bother with parsing out a [log] parameter. *) module Global = struct let expand ~level ~loc ~path message_args = let loc = { loc with loc_ghost = true } in let sexp = Ppx_sexp_message_expander.expand ~omit_nil:false ~path message_args in let level = level loc in [%expr if Ppx_log_syntax.Global.would_log (Some [%e level]) then Ppx_log_syntax.Global.sexp ~level:[%e level] [%e sexp] else Ppx_log_syntax.Global.default] ;; let pattern = Ast_pattern.(single_expr_payload __) let ext name f = Extension.declare name Extension.Context.expression pattern (expand ~level:(fun loc -> f loc)) ;; end let () = Driver.register_transformation "log" ~extensions: [ ext "log.debug" (fun loc -> [%expr `Debug]) ; ext "log.info" (fun loc -> [%expr `Info]) ; ext "log.error" (fun loc -> [%expr `Error]) ; Global.ext "log.global.debug" (fun loc -> [%expr `Debug]) ; Global.ext "log.global.info" (fun loc -> [%expr `Info]) ; Global.ext "log.global.error" (fun loc -> [%expr `Error]) ] ;;
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>