我想在生成的文档中包含源代码.当我ocamldoc在命令行上调用时,这可以工作:ocamldoc -I _build -html -keep-code -colorize-code *.{ml,mli} -d .docdir.但是,我遇到了麻烦ocamlbuild.
我正在使用以下代码myocamlbuild.ml:
open Ocamlbuild_plugin;;
dispatch begin function
| After_options ->
Options.ocamldoc := S[A"ocamldoc"; A"-keep-code"; A"-colorize-code"]
| _ -> ()
end
Run Code Online (Sandbox Code Playgroud)
但是这只包含没有相应接口文件的文件源 - 与此处所说的相反,它看起来像是在存在文件时ocamlbuild拒绝传递.ml文件.有没有办法哄ocamlbuild做我想要的?ocamldoc.mli
这是一个示例界面test.mli,注释了ocamldoc样式的注释:
(** ocamldoc module comment *)
open MissingModule;;
(** ocamldoc function comment *)
val test : unit;;
Run Code Online (Sandbox Code Playgroud)
如果我运行该命令ocamldoc test.mli,我会收到以下错误:
File "test.mli", line 2, characters 0-9:
Error: Unbound module MissingModule
1 error(s) encountered
Run Code Online (Sandbox Code Playgroud)
文档生成器为什么要关心未绑定的模块?
我有一个庞大的 OCaml 代码库,并且希望从中获取一些类似 UML 的类/模块图,类似于某些Java 逆向工程工具所做的事情。
这些图不需要是正式的 UML 图,但至少能够看到每个模块签名中定义的函数/类型的名称对于帮助理解 OCaml 代码库非常有用。如果这可以与模块之间的关联相结合就更好了。
可以使用 来完成吗ocamldoc?我知道它能够生成模块之间的 DOT 依赖图,但我无法确定它是否可以生成有关模块中定义的每种类型/函数的信息。
我a.ml喜欢这个:
module type ASig =
sig
val do_something : unit -> int;;
end ;;
module A:ASig =
struct
let do_something () = 1;;
let do_secrectly () = 2;;
end;;
Run Code Online (Sandbox Code Playgroud)
所以对于我的模块A,接口应该只是do_something().
但是如果我使用ocamldoc -html a.ml,虽然模块sig声明了interfact,但doc仍然暴露了模块A中的所有函数,如:
module A: sig .. end
val do_something : unit -> int
val do_secrectly : unit -> int
Run Code Online (Sandbox Code Playgroud)
我应该如何使用ocamldoc以便所有文件都基于module sig?