package ppx_here

  1. Overview
  2. Docs
Expands [%here] into its location

Install

Dune Dependency

Authors

Maintainers

Sources

ppx_here-v0.9.0.tar.gz
sha256=63a2424148d6120f02ff4f744cf4a827e5faaeea7ce62982f84e3b689169e19d
md5=085a4f25cc665aac76bbcf6a22033fca

Description

Part of the Jane Street's PPX rewriters collection.

Published: 22 Mar 2017

README

title: ppx_here parent: ../README.md

A ppx rewriter that defines an extension node whose value is its source position.

Syntax

ppx_here rewrites the extension [%here] in expressions, by replacing it by a value of type Source_code_position.t (i.e. Lexing.position) corresponding to the current position. It respects line number directives.

For instance:

let _ =
  print_endline [%here].Lexing.pos_fname

becomes:

let _ =
  print_endline
    {
      Lexing.pos_fname = ppx/ppx_here/test/test.ml";
      pos_lnum = 2;
      pos_cnum = 26;
      pos_bol = 8;
    }.Lexing.pos_fname

Usage

This is normally used so exceptions can contain better positions. An example is Core_kernel.Std.Option.value_exn, which takes an optional position so that if you have a stack trace, you can get still the origin of the exception.

It can also be used in cases where stack traces are useless (for instance in monads with a complicated control flow).

Command line flag

If the filename given to the compiler (or overriden by line directive) is a relative path, then ppx_here rewrites it into an absolute path, unless a flag -dirname root is given, in which case relative filenames are made relative to that root filename instead. root can be a relative path.

The goal of this behavior is to

  • avoid ambiguity: there are many files called server.ml, common.ml or config.ml in a tree

  • when -dirname is passed, avoid being overly specific by giving a path that only exists on your machine, by allowing the build system to specify where the source file is, relative to the root of the project

Dependencies (5)

  1. ocaml-migrate-parsetree >= "0.4" & < "2.0.0"
  2. ppx_driver = "v0.9.0"
  3. ppx_core >= "v0.9" & < "v0.10"
  4. jbuilder >= "1.0+beta4" & < "1.0+beta8"
  5. ocaml >= "4.03.0"

Dev Dependencies

None

Used by (19)

  1. cohttp-eio >= "6.0.0~beta2"
  2. conduit-async = "2.3.0" | >= "4.0.0"
  3. dap
  4. h1_parser
  5. http
  6. obeam = "0.1.0"
  7. oci
  8. ppx_assert = "v0.9.0"
  9. ppx_bap < "v0.14.0"
  10. ppx_bin_prot = "v0.9.0"
  11. ppx_expect = "v0.9.0"
  12. ppx_fail = "v0.9.0"
  13. ppx_jane = "v0.9.0"
  14. ppx_sexp_message = "v0.9.0"
  15. ppx_sexp_value = "v0.9.0"
  16. timmy
  17. timmy-jsoo >= "1.1.5"
  18. timmy-lwt
  19. toplevel_expect_test >= "v0.9.1" & < "v0.10.0"

Conflicts

None

OCaml

Innovation. Community. Security.