Ctags: gtags не уважает файл .ctags

Созданный на 8 дек. 2017  ·  25Комментарии  ·  Источник: universal-ctags/ctags

Я создал глобалы с универсальными тегами. Я мог убедиться, что при выполнении ctags --version я получаю версию universal-ctags, а не какую-либо другую.

Я создал файл .ctags, содержащий:

-exclude=foo

При выполнении gtags я не вижу, чтобы он уважал файл .ctags. вместо этого он просто извлекает теги для всего в рабочем каталоге.

Что я делаю неправильно?

Все 25 Комментарий

Universal-ctags не читает .ctags. См. Раздел ФАЙЛЫ на странице руководства ctags.1.

Вы имеете в виду это?

/ctags.cnf (on MSDOS, MSWindows only)
/etc/ctags.conf
/usr/local/etc/ctags.conf
$HOME/.ctags
$HOME/ctags.cnf (on MSDOS, MSWindows only)
.ctags
ctags.cnf (on MSDOS, MSWindows only)

If any of these configuration files exist, each will be expected to contain a set of default options which are read in the order listed when ctags starts, but before the CTAGS environment variable is read or any command line options are read. This makes it possible to set up site-wide, personal or project-level defaults. It is possible to compile ctags to read an additional configuration file before any of those shown above, which will be indicated if the output produced by the --version option lists the "custom-conf" feature. Options appearing in the CTAGS environment variable or on the command line will override options specified in these files. Only options will be read from these files. Note that the option files are read in line-oriented mode in which spaces are significant (since shell quoting is not possible). Each line of the file is read as one command line parameter (as if it were quoted with single quotes). Therefore, use new lines to indicate separate command-line arguments.

Я считаю .ctags одной из возможностей!

Предположительно, он имел в виду

Спасибо codebrainz за ответ. Итак, я создал этот файл:
/pathtorepo/ctags.d/.ctags

который включает -R - исключает то, что мне нужно.

При выполнении этой команды из каталога репозиториев:

ctags --verbose

Он говорит мне, что ожидает ввода.

Когда я делаю

ctags --vertbose --options = ctags.d / .ctags

он поступает правильно и извлекает теги из всего репо, кроме исключений в файле .ctags.

Что я делаю неправильно?

Мне нужны ctags для соблюдения ctags.d / .ctags (или любого другого файла, который ему нужен) при выполнении только «ctags».

Причина в том, что я использую ggtags внутри emacs, а ggtags требует, чтобы ggtags работали бок о бок с ctags.

Итак, в основном я хочу перейти в состояние, когда я могу просто ввести «gtags» в командной строке, и он автоматически:

  1. Используйте универсальные теги
  2. уважает файл universal-ctags (ctags.d / .ctags)

Как я могу это сделать?

Как насчет /pathtorepo/.ctags.d/exclude.ctags?
Посмотрите само дерево исходных текстов universal-ctags. Вы можете найти в нем каталог .ctags.d.
https://github.com/universal-ctags/ctags/tree/master/.ctags.d

Извините за повторное обновление моего комментария.

u-ctags должен загружать /pathtorepo/.ctags.d/exclude.ctags при запуске u-ctags в / pathtorepo.
Не стесняйтесь открывать его снова, если u-ctags не загружает ваш exclude.ctags.

масатаке, спасибо за ответ. Кажется, что подхватывается исключаемый файл, но у меня есть пара вопросов:

  1. это анализирует неисключенные файлы:
    ctags --verbose --options = .ctags
    но это не так:
    ctags --verbose
    хотя он говорит, что он подобрал исключаемый файл, но я получаю это сообщение:

ctags: файлы не указаны. Попробуйте "ctags --help".

Но почему? Разве это не должно действовать так:
ctags --verbose --options = .ctags
и просто проанализировать все в текущем каталоге, кроме исключений?

  1. Как заставить gtags использовать универсальные ctags и подобрать его исключаемый файл?
    Когда я выполняю gtags, он все разбирает и игнорирует файл exclude.ctags, хотя global создается --with-universal-ctags

О 1. Мне нужна информация об окружающей среде, чтобы ответить на вопрос.

Я плохо говорю по-английски. Я надеюсь, что следующий вывод может рассказать вам все, что вам нужно.

Пожалуйста, убедитесь, что вы действительно используете u-ctags.

$ ./ctags --version | grep Universal
Universal Ctags 0.0.0(248cffc9), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.

u-ctags загружает файлы с суффиксом .ctags в ./.ctags.d.

$  ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags

--verbose сообщает вам, какие файлы загружены.

$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...

Каталог или файл можно указать с помощью --options . Если указан каталог,
загружаются файлы с суффиксом .ctags в каталоге.
Однако один и тот же файл не загружается дважды.

$ ./ctags --verbose --options=.ctags.d 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/exclusion.ctags: already considered

Файл без суффикса не загружается, если явно не указать файл с помощью --options.

$ touch ./.ctags.d/please-load-me
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
$ mv ./.ctags.d/please-load-me ./.ctags.d/please-load-me.ctags
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/please-load-me.ctags: reading...

Это все. См. Справочную страницу. Если справочная страница написана некорректно, подумайте о том, чтобы сделать запрос на вытягивание и показать мне, как мы можем его улучшить.

Около 2, извините, но я плохо разбираюсь в тегах gtags.

Думаю, мы будем получать такие вопросы неоднократно. Что я могу сделать, прежде чем получить вопрос?

Если вы по-прежнему загружаете $ HOME / .ctags, вы не получите этот вопрос. Совместимость отличная, и я не понимаю, почему вы перестали загружать этот файл. Коммит ce0617a7be7a4d33a09ac60f21b8a9ce26690853 изменил это без указания причины.

Теперь мне нужно переместить файлы и обновить записи о файлах конфигурации.

Коммит является частью # 1519, поэтому причина описана там.

Нарушение совместимости - плохая идея. Однако я сделаю это один раз, только один раз (надеюсь) при выпуске начальной версии u-ctags. Думаю, последний - это формат файла тегов. Самое главное сделал @ b4n. Что мне нужно сделать, это assigning version 3 tags file format и сделать для этого документ.

У меня та же проблема, что и с исходным плакатом, при использовании ~/.ctags.d/*.ctags и (локально) ./.ctags.d/*.ctags .
Я использую GNU Global 6.6.3, скомпилированный с поддержкой Universal Ctags. GTAGSCONF указывает на путь установки по умолчанию gtags.conf а GTAGSLABEL - это new-ctags .

Я также просмотрел исходный код в Global /plugin-factory/exuberant-ctags.c (используется для вызова Universal Ctags; начиная со строки 193), но похоже, что Universal Ctags вызывается без опции, которая отключила бы загрузку .ctags.d/*.ctags .

Если я предпочитаю сообщить об этом глобальным разработчикам, сообщите мне, и я сделаю это. :)

Воспроизвести:

git clone -b tests --single-branch https://github.com/janEbert/julia-ctags.git
cd julia-ctags
mkdir -p ~/.ctags.d
mkdir -p .ctags.d
ln -s $PWD/ctags ~/.ctags.d/julia.ctags  # or cp if you want to be safe
ln -s $PWD/ctags ./.ctags.d/julia.ctags
gtags
global greet  # returns nothing

Как насчет прямого вызова ctags:

$ new-ctags --version
$ new-ctags -o - JULIA-FILE

Вы ожидаете результата?

Да, вызов Universal Ctags ( uctags на моей машине; GTAGSLABEL не является именем двоичного файла) напрямую работает отлично, с файлом .ctags, указанным через --options , или без него.
Таким образом, Universal Ctags использует файлы ~ / .ctags.d, но каким-то образом это поведение не передается в Global.

Пожалуйста, не используйте --options. uctags должен загружать ~ / .ctags.d / julia.ctags и ./.ctags.d/julia.ctags без указания --options.

Итак, я бы хотел, чтобы вы запустили:

$ uctags --version
$ uctags -o - JULIA-FILE

Я хотел бы увидеть вывод команды.

Кстати, вы используете ctags в GNU / Linux?

Извините, я не понял. uctags использует содержимое ~/.ctags.d по желанию, даже если я не выставляю флаг --options . Однако, если я использую gtags с uctags в качестве бэкэнда, ~/.ctags.d _не_ используется.

Да, я использую его в GNU / Linux, в частности в Ubuntu. Результат следующий:

$ uctags --version
Universal Ctags 0.0.0(1a94658c), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul 29 2019, 13:42:51
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +packcc
$ uctags -o - testfile.jl
CtagsTest   testfile.jl /^module CtagsTest$/;"  f
ImmutablePoint  testfile.jl /^struct ImmutablePoint{T}$/;"  f
MutablePoint    testfile.jl /^mutable struct MutablePoint{T}$/;"    f
addcoment   testfile.jl /^addcoment(string::AbstractString, comment, spaces=1) = begin  # Maybe write without `begin`?$/;"  f
addone! testfile.jl /^function addone!(x::T) where {T <: Number}$/;"    f
deprecated_returnsquarepower    testfile.jl /^deprecated_returnsquarepower() = 2.0$/;"  f
multiply    testfile.jl /^multiply(x, y) = x * y$/;"    f
multiply    testfile.jl /^multiply(x, y...) = begin$/;" f
printgreeting   testfile.jl /^    function printgreeting(x)$/;" f
square  testfile.jl /^function square(x)$/;"    f

Изменить: скомпилирована более новая версия Universal Ctags, вывод остался прежним.

В выходных данных не отображается функция greet которую я использовал в примере для дальнейшего воспроизведения. Это связано с устаревшим парсером в ветке, с которой я вас связал - просто замените global greet на global square и он все равно не выдаст.

ОК Как отдельная программа, uctags работает хорошо.

Вы используете GNU / Linux. Хороший! Я могу помочь вам гораздо больше.

Пожалуйста, установите пакет strace. Я плохо знаю Ubuntu, но команда apt-get может быть командой для установки strace.

Тогда беги

$ strace -s 4096 -f -e execve,execveat gtags

Я бы хотел увидеть результат.

ОК Как отдельная программа, uctags работает хорошо.

Да, он прекрасно работает автономно!

Вы используете GNU / Linux. Хороший! Я могу помочь вам гораздо больше.

Извините, я не упомянул об этом раньше.

$ strace -s 4096 -f -e execve,execveat gtags
execve("/usr/local/bin/gtags", ["gtags"], 0x7ffe7e8d0fe8 /* 83 vars */) = 0
strace: Process 2210 attached
[pid  2210] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c855b0 /* 84 vars */) = 0
strace: Process 2211 attached
[pid  2211] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c97410 /* 84 vars */) = 0
[pid  2210] +++ exited with 0 +++
[pid  2209] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2210, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
[pid  2211] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2211, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++

Вывод strace сообщает, что gtags не вызывали uctags.

Большое тебе спасибо. Прошу прощения за беспокойство.
Тогда напишите разработчику GLOBAL!
еще раз спасибо! Универсальные КТэги великолепны. :)

Эй, я немного попробовал. Не уверен, писать ли мне тебе или Шигио.

GNU Global использует настройки langmap в файле GTAGSCONF для фильтрации файлов, обрабатываемых gtags а также передает эти настройки в Universal Ctags.

В какой-то момент я добавил расширение файла для Julia (.jl) в глобальную конфигурацию, однако универсальные Ctags остановились с предупреждением:
Неизвестный язык "[список langmaps]"

Проблема возникает из-за того, что Universal Ctags сначала анализирует свои аргументы, а затем загружает параметры в .ctags.d . Я модифицировал Global, чтобы явно передать --options=[...].ctags _before_, он передает параметр --langmap .
После этого все снова заработало отлично, и я получил глобальные таблицы.

Как я уже сказал, я не уверен, что вы хотите это изменить (чтобы файлы .ctags.d обрабатывались до аргументов в Universal Ctags) или мне следует отправить отчет в Global.

Проблема возникает из-за того, что Universal Ctags сначала анализирует свои аргументы, а затем загружает параметры в .ctags.d.

Я так не реализовал.
За некоторыми исключениями Universal-ctags загружает .ctags.d / *. Ctags, а затем анализирует параметры cmdline.
Как я писал на странице руководства ctags-optlib.7, вы можете использовать параметр --_ echo = MSG, чтобы понять и отладить, как u-ctags загружает файлы конфигурации.

 [yamato@slave]~% ls ~/.ctags.d 
config.ctags
[yamato@slave]~% cat ~/.ctags.d/config.ctags
--_echo=hello from dot-ctags


[yamato@slave]~% u-ctags --_echo="hello from cmdline" --_force-quit
u-ctags: Notice: hello from dot-ctags
u-ctags: Notice: hello from cmdline

См. Справочную страницу ctags.1. Я не понимаю, почему вы хотите передать --options в ctags.
Для вашей цели может быть достаточно помещения julia.ctags в ~ / .ctags.d. u-ctags автоматически загружает julia.ctags. Таким образом, вам не нужно явно указывать --options.

Хорошо, я только что снова протестировал и тоже больше не получаю ошибки. Еще раз извините за беспокойство.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

softinio picture softinio  ·  6Комментарии

EvanCarroll picture EvanCarroll  ·  14Комментарии

lvc picture lvc  ·  8Комментарии

fabiensabatie picture fabiensabatie  ·  3Комментарии

masatake picture masatake  ·  18Комментарии