如何让 ocamlformat 忽略特定评论

How do I get ocamlformat to ignore a specific comment

我的代码中有一条注释指出二维数组中包含的内容:

(**

            I               
            N   H           
            F   A           
        A B L A T E         
        B   A         I N T 
        R   T H O U G H     
        A   E       A       
        S           T       
  I N C I N E R A T E
        V                   
        E  
*)

由于它的性质,它需要完全像这样格式化。但是,每当我 运行 ocamlformat 时,它都会重新格式化为如下所示:

(** I N H F A A B L A T E B A I N T R T H O U G H A E A S T I N C I
    N E R A T E V E  *)

我该如何解决这个问题?在不影响其他任何东西的情况下,我能得到的最接近的是:

let _ =
  () 
  (*
            I               
            N   H           
            F   A           
        A B L A T E         
        B   A         I N T 
        R   T H O U G H     
        A   E       A       
        S           T       
  I N C I N E R A T E
        V                   
        E   
  *)
  [@ocamlformat "disable"]

但这不是很令人满意。这个评论应该附加到顶级项目,但我不能用这种方法做到这一点 b/c 然后 ocamlformat 将对整个项目禁用。我不知道如何只禁用评论格式。

您可以使用 [@@ocamlformat "wrap-comments=false"] 仅禁用评论换行功能,

let _ =
  () 
  (*
            I               
            N   H           
            F   A           
        A B L A T E         
        B   A         I N T 
        R   T H O U G H     
        A   E       A       
        S           T       
  I N C I N E R A T E
        V                   
        E   
  *)
[@@ocamlformat "wrap-comments=false"]

您也可以在 .ocamlformat 中禁用它,但由于它已经默认禁用,我认为它是有意为之的。您还可以在文件开头使用 [@@@ocamlformat "wrap-comments=false"] 在模块级别禁用该功能。

附带说明一下,如果您希望 ocamldoc 在生成的文档中保留注释的外观,您还应该将其包装在 verbatim 标签中,例如,以下内容将逐字呈现,

(** 
   {v 
     If P, then Q.
     Not Q.
     Therefore, not P.
   v}

*)