Allows you to reference the OCaml variable name in RHS expressions.
let foo_bar = [%VAR_NAME] in
let foo_bar = [%Var_name] in
let foo_bar = [%var_name]
and foo_bar = [%var_dash_name] in
let%map foo_bar = [%Var_name] in
let%bind foo_bar = [%Var_name] in
let%map_open.Command foo_bar = [%var_dash_name] in
let%bind_open.Command foo_bar = [%var_dash_name] in
let%map_open.Command foo_bar = [%var_dash_name]
and baz_qux = [%var_dash_name]
in
let%mapn foo = [%Var_name]
and bar = [%Var_name]
and baz = [%Var_name] in
[%map_open.Command
let foo_bar = [%var_dash_name]
and baz_qux = [%var_dash_name] in
...
]
module Foo_Bar = struct
let name = [%Module_name]
let name = [%MODULE_NAME]
let name = [%module_name]
let name = [%module_dash_name]
end
let name = [%Library_name]
let name = [%library_name]
let name = [%LIBRARY_NAME]
let name = [%library_dash_name]produces:
let foo_bar = "FOO_BAR" in
let foo_bar = "Foo_bar" in
let foo_bar = "foo_bar"
and foo_bar = "foo-bar" in
let%map foo_bar = "Foo_bar" in
let%bind foo_bar = "Foo_bar" in
let%map_open.Command foo_bar = "foo-bar" in
let%bind_open.Command foo_bar = "foo-bar" in
let%map_open.Command foo_bar = "foo-bar"
and baz_qux = "baz-qux"
in
let%mapn foo = "Foo"
and bar = "Bar"
and baz = "Baz" in
[%map_open.Command
let foo_bar = "foo-bar"
and baz_qux = "baz-qux" in
...
]
module Foo_bar = struct
let name = "Foo_Bar"
let name = "FOO_BAR"
let name = "foo_bar"
let name = "foo-bar"
end
let name = "Ppx_var_name"
let name = "ppx_var_name"
let name = "PPX_VAR_NAME"
let name = "ppx-var-name"The [%Library_name] family depends on the "build unit" specified by the build system. In a library, this is the library name. In non-library contexts (e.g., executables), these extensions may fail to resolve or produce less natural identifiers.
For typical usage you can apply this in bulk to existing code with a command like:
sed -i -E 's/let ([a-zA-Z_][a-zA-Z0-9_]*) = "\1"/let \1 = [%var_name]/g' *.ml