dune/src/file_tree.mli

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