95 lines
2.3 KiB
OCaml
95 lines
2.3 KiB
OCaml
(** Dune representation of the source tree *)
|
|
|
|
open! Import
|
|
|
|
module Dune_file : sig
|
|
module Kind : sig
|
|
type t = Usexp.syntax = Jbuild | Dune
|
|
|
|
val lexer : t -> Sexp.Lexer.t
|
|
end
|
|
|
|
module Plain : sig
|
|
(** [sexps] is mutable as we get rid of the S-expressions once
|
|
they have been parsed, in order to release the memory as soon
|
|
as we don't need them. *)
|
|
type t =
|
|
{ path : Path.t
|
|
; mutable sexps : Sexp.Ast.t list
|
|
}
|
|
end
|
|
|
|
module Contents : sig
|
|
type t =
|
|
| Plain of Plain.t
|
|
| Ocaml_script of Path.t
|
|
end
|
|
|
|
type t =
|
|
{ contents : Contents.t
|
|
; kind : Kind.t
|
|
}
|
|
|
|
val path : t -> Path.t
|
|
end
|
|
|
|
module Dir : sig
|
|
type t
|
|
|
|
val path : t -> Path.t
|
|
val files : t -> String.Set.t
|
|
val file_paths : t -> Path.Set.t
|
|
val sub_dirs : t -> t String.Map.t
|
|
val sub_dir_paths : t -> Path.Set.t
|
|
val sub_dir_names : t -> String.Set.t
|
|
|
|
(** Whether this directory is ignored by an [ignored_subdirs] stanza
|
|
or [jbuild-ignore] file in one of its ancestor directories. *)
|
|
val ignored : t -> bool
|
|
|
|
val fold
|
|
: t
|
|
-> traverse_ignored_dirs:bool
|
|
-> init:'a
|
|
-> f:(t -> 'a -> 'a)
|
|
-> 'a
|
|
|
|
(** Return the contents of the dune (or jbuild) file in this directory *)
|
|
val dune_file : t -> Dune_file.t option
|
|
|
|
(** Return the project this directory is part of *)
|
|
val project : t -> Dune_project.t
|
|
end
|
|
|
|
(** A [t] value represent a view of the source tree. It is lazily
|
|
constructed by scanning the file system and interpreting [.dune-fs]
|
|
files, as well as [jbuild-ignore] files for backward
|
|
compatibility. *)
|
|
type t
|
|
|
|
val load : ?extra_ignored_subtrees:Path.Set.t -> Path.t -> t
|
|
|
|
(** Passing [~traverse_ignored_dirs:true] to this functions causes the
|
|
whole source tree to be deeply scanned, including ignored
|
|
sub-trees. *)
|
|
val fold
|
|
: t
|
|
-> traverse_ignored_dirs:bool
|
|
-> init:'a
|
|
-> f:(Dir.t -> 'a -> 'a)
|
|
-> 'a
|
|
|
|
val root : t -> Dir.t
|
|
|
|
val find_dir : t -> Path.t -> Dir.t option
|
|
|
|
val files_of : t -> Path.t -> Path.Set.t
|
|
|
|
(** [true] iff the path is either a directory or a file *)
|
|
val exists : t -> Path.t -> bool
|
|
|
|
(** [true] iff the path is a file *)
|
|
val file_exists : t -> Path.t -> string -> bool
|
|
|
|
val files_recursively_in : t -> ?prefix_with:Path.t -> Path.t -> Path.Set.t
|