Когда я пытаюсь перейти к определению класса, очень удобно иметь уникальную запись в ctags. Конструкторы разделяют имя класса и приводят к созданию дополнительных записей ctags, которые усложняют навигацию. Например, в Vim, g<c-]>
будет переходить к ctag без запроса, если есть одна запись, но заставит пользователя вручную устранять неоднозначность в других случаях.
Я не хочу пропустить конструкторы вне строки, которые могут где-то скрываться, но я согласен с отсутствующими конструкторами в теле основного класса (даже если само тело довольно велико).
Вот шаблон класса в файле foo.cpp
,
template <typename T> class LinkedList {
public:
T head;
LinkedList<T> *tail;
LinkedList(T item) : head(head), tail(nullptr) {}
};
И вот ctags -f- foo.cpp
(для обильных ctags 5.8).
LinkedList foo.cpp /^ LinkedList(T item) : head(head), tail(nullptr) {}$/;" f class:LinkedList
LinkedList foo.cpp /^template <typename T> class LinkedList {$/;" c file:
head foo.cpp /^ T head;$/;" m class:LinkedList file:
tail foo.cpp /^ LinkedList<T> *tail;$/;" m class:LinkedList file:
Вход LinkedList foo.cpp /^ LinkedList(T item) ... f class:LinkedList
это не так интересно.
Было бы довольно просто написать сценарий для анализа вывода ctags и исключения вещей, которые выглядят как конструкторы вне строки, или для применения некоторой эвристики … Мне интересно, есть ли более общий / традиционный / Принято решение о деклаттерации вывода ctags.
Задача ещё не решена.
Других решений пока нет …