sig
  type file = Interface | Implementation
  type report_function = int -> int option -> string -> unit
  type report = {
    filename : string;
    info : Check.report_function;
    warning : Check.report_function;
    error : Check.report_function;
  }
  module type T =
    sig
      type t
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list ->
        Check.T.t -> Parameter.map -> Check.report -> unit
    end
  type lines = Check.file * (int * string) list
  type ocamldoc = Odoc_info.Module.t_module
  type tokens = Check.file * (int * int * Camlp4.Sig.camlp4_token) list
  type structure = Camlp4.PreCast.Ast.str_item
  type signature = Camlp4.PreCast.Ast.sig_item
  type annotations = Annotation.file
  type binary_annotations = Cmt_format.cmt_infos
  module type Lines =
    sig
      type t = lines
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type OCamldoc =
    sig
      type t = ocamldoc
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type Tokens =
    sig
      type t = tokens
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type Structure =
    sig
      type t = structure
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type Signature =
    sig
      type t = signature
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type Annotations =
    sig
      type t = annotations
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  module type Binary_annotations =
    sig
      type t = binary_annotations
      val category : CategoryName.t
      val name : CheckName.t
      val multiple : bool
      val description : string
      val documentation : string
      val rationale : string
      val limits : string
      val parameters : Parameter.map
      val run :
        State.id ->
        Ocamldep.dependency list -> t -> Parameter.map -> report -> unit
    end
  type t =
      Lines of (module Check.Lines)
    | OCamldoc of (module Check.OCamldoc)
    | Tokens of (module Check.Tokens)
    | Structure of (module Check.Structure)
    | Signature of (module Check.Signature)
    | Annotations of (module Check.Annotations)
    | Binary_annotations of (module Check.Binary_annotations)
  val category : Check.t -> CategoryName.t
  val name : Check.t -> CheckName.t
  val multiple : Check.t -> bool
  val description : Check.t -> string
  val documentation : Check.t -> string
  val rationale : Check.t -> string
  val limits : Check.t -> string
  val parameters : Check.t -> Parameter.map
  val same : Check.t -> Check.t -> bool
  val do_run :
    State.id ->
    bool ->
    string list ->
    Ocamldep.dependency list ->
    Parameter.map -> string -> Check.t -> Report.t
end