Module Textual.ProcSig

type t =
  1. | Hack of {
    1. qualified_name : QualifiedProcName.t;
    2. arity : int option;
    }
    (*

    Hack doesn't support function overloading but it does support functions with default arguments. This means that a procedure is uniquely identified by its name and the number of arguments.

    *)
  2. | Python of {
    1. qualified_name : QualifiedProcName.t;
    2. arity : int option;
    }
    (*

    Python supports function overloading and default arguments. This means that a procedure is uniquely identified by its name and the number of arguments.

    *)
  3. | Other of {
    1. qualified_name : QualifiedProcName.t;
    }
    (*

    Catch-all case for languages that currently lack support for function overloading at the Textual level.

    For instance, in C++ and Java the signature consists of a procedure name and types of formals. However, the syntax of procedure calls in Textual doesn't give us the types of formals and inferring them from the types of arguments would be brittle. We should extend the syntax of Textual to allow unambiguous call target resolution when we need to add support for other languages.

    *)

Signature uniquely identifies a called procedure in a target language.

include Ppx_compare_lib.Equal.S with type t := t
val equal : t Base__Ppx_compare_lib.equal
include Ppx_hash_lib.Hashable.S with type t := t
val hash_fold_t : t Base__Ppx_hash_lib.hash_fold
val hash : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val pp : Ppx_show_runtime.Format.formatter -> t -> unit
val show : t -> string
val to_qualified_procname : t -> QualifiedProcName.t
val arity : t -> int option
val incr_arity : t -> t
val decr_arity : t -> int -> t
val is_hack_init : t -> bool
module Hashtbl : Hashtbl.S with type key = t