LINUX.ORG.RU

emacs + gtags+autocomplete

 ,


1

1

Всем привет. В общем, посносил всякие clang, irony, rtags, company. Оставил только лишь gnu global + ggtags.el. Чего хочу: какой-то список tag'ов-дополнений во время ввода при нажатии на tab+... . На борту стоит ivy, хотелось бы через него. Думал, есть какой-нибудь company-gtags backend, но нет. Ребята, сэкономьте мне время пожалуйста (поделитесь опытом), что поставить, чтобы выдёргивать результаты из global?

★★

Открываешь исходники, смотришь и ручками пишешь дополнение которое тебе нужно. Это emacs, а не эклипсы, саблаймы и всякая хипстерская хрень.

Сам использую для Си irony + cmake-ide + gtags + свои пакеты и счастлив.

SL_RU ★★★★
()

ЕМНИП, cedet с GNU Global работает.

cab ★★★★
()
Ответ на: комментарий от SL_RU

Чтобы я написал что-то такое https://github.com/company-mode/company-mode/blob/master/company-gtags.el. Ну я там могу какой-нибудь хук нацепить, но это слишком ... .

Вообще я пишу на плюсах, и уже отчаялся встретить адекватную поддержку областей видимости в различных tagging systems (всякие штуки на основе clang могут, но не понравилось в целом (сложные, долго думают, ещё эта генерация ключей компиляции, хочется попроще чего-то)). Читал доки, говорят, что ebrowse специально под плюсы заточен, сможет ли он адекватно отработать здесь (не вывалить метки из весего проекта) any_calss.any_met<TAB> или any_namespace::anyth<TAB>? А как Semantic в целом, стоит ли попробовать?

pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от pavlick

Раньше использовал cedet, но имхо, он устарел, не обновляется, глючный и тормозной, но работал чётко. Плюс неудобное управление проектами.

Как только перешёл на irony, сразу почуствовал себя в 21 веке - всё моментально, с учётом полей видимости и тд, идеальное подсвечивание ошибок. Проблем по мнимому и все решаются - не такая громоздкая и неповоротливая вещь, как semantic. Свои дополнения на основе этого пишутся без проблем.

Ну я там могу какой-нибудь хук нацепить, но это слишком ... .

Тогда стоит научиться, потому что без знаний elisp, емакс не получиться использовать на все 100%. Учиться он за один вечер - как только пописал на нём - влюбился.

SL_RU ★★★★
()
Ответ на: комментарий от SL_RU

Ясно, спасибо.

Казалось бы, чего сложного делать метки с учётом области видмости: несколько ключевых слов (namespace, class, struct), и ищи от скобки до скобки, без всякой лишней ерунды (private, #ifdef и т.д). Я бы в такую tag system влюбился бы (скорость, лёгкость, простота).

От безысходности подумал - поставлю global, хрен с этой видмостью.

pavlick ★★
() автор топика
Ответ на: комментарий от pavlick

В global мне как раз нравится, что ему пофиг на поля видимости.

А в видимость может rtags вроде как

SL_RU ★★★★
()

Я поставил universal ctags, и сгенерировал метки для тестового проекта

!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_MODE	u-ctags	/u-ctags or e-ctags/
!_TAG_PROGRAM_AUTHOR	Universal Ctags Team	//
!_TAG_PROGRAM_NAME	Universal Ctags	/Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL	https://ctags.io/	/official site/
!_TAG_PROGRAM_VERSION	0.0.0	/96d39e43/
N	main.cpp	/^namespace N$/;"	n	file:
Q	main.cpp	/^  class Q$/;"	c	namespace:N	file:
S	f.hpp	/^struct S$/;"	s
globdata	main.cpp	/^int globdata;$/;"	v	typeref:typename:int
globfn	main.cpp	/^  void globfn(int i, double d) {}$/;"	f	namespace:N	typeref:typename:void
globfn	main.cpp	/^void globfn(int i, double d) {}$/;"	f	typeref:typename:void
hfn	f.hpp	/^  void hfn(int i, double d, int q$/;"	f	struct:S	typeref:typename:void
main	main.cpp	/^int main()$/;"	f	typeref:typename:int
privdata	main.cpp	/^    int privdata;$/;"	m	class:N::Q	typeref:typename:int	file:
privfn	main.cpp	/^    void privfn(int i, double d) {}$/;"	f	class:N::Q	typeref:typename:void	file:
publdata	main.cpp	/^    int publdata;$/;"	m	class:N::Q	typeref:typename:int	file:
publfn	main.cpp	/^    void publfn(int i, double d) {}$/;"	f	class:N::Q	typeref:typename:void	file:
Генерировал без -e опции (-e делает формат аналогичным etags, там теряется вся дополнительная информация о видмиости). Очевидно, что сам ctags выдаёт всё необходимую информацию об областях видимости (namespace N, class Q, struct S). Как заставить emacs его корректно прочесть, чтобы он начал нормально работать для плюсов?

pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от pavlick

Ещё я слышал, что можно собрать global с ctags в качестве backend, поможет ли читать формат с метаданными и прилично работать на ++?

pavlick ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.