Как заставить Merlin (OCaml) игнорировать некоторые строки?
Я использую Merlin с Emacs для редактирования кода OCaml. Обычно он работает отлично, но я завел следующую проблему:
Мне нужно использовать пакет, созданный кем-то другим, который добавляет в OCaml некоторые ключевые слова, не являющиеся родными для языка. Поскольку я использую пакет для компиляции кода, компиляция работает отлично. С другой стороны, Мерлин сходит с ума и думает, что новые ключевые слова - это ошибка. К счастью, новые ключевые слова появляются только в начале строки, поэтому мой код выглядит примерно так:
let square x = x * x;;
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
FOO "This syntax is not standard Ocaml" square fact;;
куда FOO
это новое ключевое слово. Мерлин будет жаловаться и говорить Unbound constructor FOO
, Итак, вопрос в том, могу ли я заставить Марлина проигнорировать эту строчку? ИЛИ вы можете подумать о том, как взломать синтаксис, на что Мерлин не будет жаловаться?
2 ответа
Merlin не поддерживает и не будет (afaik) поддерживать произвольные расширения синтаксиса, но у них есть хаки для анализа наиболее часто используемых расширений camlp4, таких как pa_lwt, pa_macro и т. Д. Кроме того, новейшие версии merlin будут пропускать неизвестные строки и восстанавливать синтаксический анализ, так что go -to-Definition и возврат типа работают с другими частями файла, не измененными синтаксическими расширениями.
Альтернативой, хотя и весьма отличной, но предлагающей подмножество функций Merlin (завершение и документирование из библиотек, навигация по файлам), является ocp-index.
Ocp-index не интерпретирует и не вводит ваш текущий файл (он только сканирует его на наличие открытий и т. П.), Поэтому его не будут беспокоить произвольные расширения.