Подтвердить что ты не робот

Как создать TAGS для проектов Haskell?

Я ищу ctags, эквивалентный Haskell. Я попробовал hasktags, но у него есть некоторые проблемы:

В исходной папке enumerator запустите hasktags .:

hasktags: tags: openFile: resource busy (file is locked)

И когда я запускаю vim -t enumFile, возникает ошибка:

E431: Format error in tags file "tags"
Before byte 4085
E426: tag not found: enumFile

Я также пробовал gasbag, но он не компилируется на ghc-7.0.4.

4b9b3361

Ответ 1

hasktags имеет некоторые ошибки, один из которых заключается в том, что он использует ленивый IO, который имеет тенденцию давать эти ошибки занятости.

Как это бывает, я просто написал программу тегов, http://hackage.haskell.org/package/fast-tags

Другими параметрами являются hothasktags, которые делают квалифицированные теги Module.function и lushtags, которые предназначены для интеграции с причудливым IDE-подобным vim tagbar thingy. По моему опыту hothasktags генерирует огромные файлы тегов и аватары lushtags, как только он не может разобрать файл. Оба используют haskell-src-exts, что означает, что они точны, но сбой, если они не могут проанализировать ваш файл и не могут обрабатывать файлы .hsc. У быстрых тегов есть свой собственный синтаксический анализатор, что означает, что у него нет этих проблем, но он также более уязвим для анализа ошибок, которые пропускают теги или дают фиктивные теги.

Как вы заметили, в gasbag (и htags) используется haskell-src, что означает, что они работают только на Haskell 98.

Отказ от ответственности: если по TAGS вы имеете в виду теги emacs, fast-tags еще не делают этого, хотя, если кому-то это понравится, было бы легко добавить.

Ответ 2

Вы используете Mac OS X (или Windows, см. ниже), не так ли? В этом случае hasktags -c (который создает только теги Vi-формата) устранит вашу проблему.

Это не единственное объяснение, но вот что происходит в системе OS X:

  • по умолчанию, hasktags предполагает, что вы хотите использовать оба тега для vi и Emacs.
  • он пытается создать как tags (для Vi), так и tags (для Emacs)
  • однако OS X, в отличие от Unix, по умолчанию нечувствительна к регистру. Следовательно, у вас не может быть обоих файлов.
  • вместо того, чтобы переписывать один файл другим, по какой-то причине hasktags запускается в конфликт, вероятно, потому, что он открывает один файл перед закрытием "другого". Я ожидал бы этого в силу ленивого ввода-вывода, как объяснил Эван Лафордж.

Обновление: как указано в комментарии, Windows также нечувствительна к регистру, поэтому могут возникнуть подобные проблемы.