我有这个 sql 查询来在 Sqlite3 中构建一个表,我使用的是工作正常的多行字符串。
let create_blog_table db =
let sql =
"
CREATE TABLE IF NOT EXISTS blog(
id INTEGER PRIMARY KEY AUTOINCREMENT,
author TEXT NOT NULL,
content TEXT NOT NULL);
"
in
match exec db sql with Rc.OK -> () | _ -> failwith "Error creating table"
但是当我运行dune fmt
(安装了 ocamlformat)时,结果如下:
let create_blog_table db =
let sql =
"\n\
\ CREATE TABLE IF NOT EXISTS blog(\n\
\ id INTEGER PRIMARY KEY AUTOINCREMENT,\n\
\ author TEXT NOT NULL,\n\
\ content TEXT NOT NULL);\n\
\ "
in
match exec db sql with Rc.OK -> () | _ -> failwith "Error creating table"
由于某种原因,这种格式是必要的还是可取的?
如果不是,我可以告诉它不要这样做吗?
我找到了规则break-string-literals
,但只允许auto
或never
.ocaml格式
profile = default
version = 0.26.0
break-string-literals=auto
正是出于这个目的,OCaml 提供了用and分隔的带引号的字符串文字,例如,
{|
|}
并且 ocamlformat 不会触及带引号的字符串文字内的任何内容,让您可以按照自己喜欢的方式对其进行格式化。
还值得注意的是,使用ppx_string提供的字符串外推法构建 SQL 语句要容易得多。例如,假设您不想对每个语句中的表和列的名称进行硬编码并将它们绑定到变量,
设置
never
保留--break-string-literals
您的格式。至于您的示例,
--break-string-literals
设置为auto
,可以保持缩进。这似乎没有必要,因为您的代码一开始就已经缩进了。在这种情况下,字符串的确切格式并不重要,这会有所帮助。