определение или объявление символа clang (переменной, функции, типа и т. Д.) Или ссылки

#c #code-analysis #clang

#c #анализ кода #clang

Вопрос:

Пожалуйста, кто-нибудь знает, есть ли у clang возможность возвращать определение или объявление символа (или ссылку)?

Я имею в виду: есть опция для исполняемого файла clang с именем -code-completion-at=path_to_file:line:coloumn clang просмотрит код и вернет вам строки завершения (т.Е., Если есть, например, std::string_type_variable. .. он возвращает вам все методы и атрибуты, которые вы можете вызвать из std::string .

Теперь я хочу, чтобы clang возвращал файл и координаты, с которых начинается определение символов. так что, если это std::string_type_variable — я хочу вернуть мне координаты, где я записал std::string переменную; в коде.

Я хочу использовать его в vim вместо устаревшей функциональности cscope / ctags (система тегов, использующая ctags / cscope в vim, не знает контекста — его вообще нельзя использовать в больших проектах) Я знаю, что есть продолжение clang (http://blog.wuwon.id.au/2011/10/vim-plugin-for-navigating-c-with.html ) но это не работает правильно (на самом деле у меня вообще не работает)

Возможно ли это вообще? это не должно быть так сложно, если он может вернуть завершение, он, вероятно, уже знает, откуда он прочитал определение переменной…

Комментарии:

1. Почему это должно быть clang так?

2. Это не обязательно должно быть … вы знаете о чем-то еще? Достаточно быстро?

3. В Vim теперь есть плагин clang_complete и YouCompleteMe, который должен соответствовать вашим требованиям.

Ответ №1:

Clang предоставляет такую функциональность с помощью разделяемой библиотеки libclang, но есть простой пример того, как ее использовать. Если вы создали clang из исходного кода, взгляните на исполняемый файл c-index-test . Его источник находится в tools / c-index-test.

Комментарии:

1. спасибо, я посмотрю … хотя на первый взгляд это как-то не работает 🙂

2. Итак, я играл с c-index-test и обнаружил много функциональных возможностей. Большое спасибо, это именно то, что мне было нужно. 🙂