Настройте больший предел столбцов в модуле Формат - PullRequest
0 голосов
/ 03 декабря 2018

Модуль Format

Модуль Format используется для моделирования и комбинирования красивых принтеров с синтаксическим расширением, которое позволяет печатать форматы, и это очень помогает, когда вы пишете что-то вроде кодаГенератор или принтер структуры данных.

Проблема

Однако существует ограничение в 78 столбцов , которое инициализируется на полях форматера и будет тянуться коставил все, что занимает больше, чем этот предел.

Я печатаю более легкую версию программы Yojson.Basic.json с использованием модуля Format, но когда ввод слишком велик, вывод свернут, и этона самом деле не "красиво".

Предварительный просмотр

  • Вот как он отформатирован, когда он короткий: Correct

  • Вот как это отформатировано, когда отступ становится слишком большим Wrong

Я пытался превысить инастройте этот лимит на 120 столбцов, но безуспешно.

Что я пробовал?

  • Использование Format.pp_set_margin ppf 120 для перенастройки
  • Использование Format.pp_set_max_indent для большего значения

Но оникажется, не имеет никакого эффекта, и нет никакой доступной документации об этом пределе.Я обнаружил это только читая исходный код.

Что я делаю?

let string_of_cst program =
  let ppf = Format.str_formatter in
  (* I've enabled colors. *)
  Format.pp_set_tags ppf colors;
  Format.pp_set_formatter_tag_functions ppf with_colors;
  (* [print_json] is my printer. *)
  print_json ppf program;
  (* Get string out of printer. *)
  Format.flush_str_formatter ()

Как мне настроить больший лимит?

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема в том, что значения margin и max_indent неявно ограничены конусом 1 < max_indent < margin, а функция set_max_indent молча завершается ошибкой и ничего не делает, если это ограничение не соблюдается.

Чтобы избежать этой проблемы, в OCaml ≥4.08 можно было бы использовать новую функцию set_geometry, которая требует одновременной установки обоих значений и дает сбой, за исключением случаев, когда требуемый max_indent больше, чем поле.

В противном случае вы должны всегда устанавливать оба значения одновременно и всегда в порядке margin сначала и max_indent секунды.Если вы не знаете, какое значение выбрать для max_indent, margin - 10 обычно является правильным выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...