LINUX.ORG.RU

[c/c++][emacs][cedet] Почему так?

 


0

0

Собственно натстроил пакет семантик по статье ott. Дополнение работает, но очень странно, с мои классом который лежит в одной папке с проектом все ок, а с чужим классом полный бред. Привожу наглядный пример.

http://s1.ipicture.ru/uploads/090212/ueWnv6XI9n.png

библиотека curlpp такое ощущение что он показывает все варианты которые проиндексировал, а не те которые относятся к данному классу.

Вот ради интереса запустил проект в НетБианс.

http://s2.ipicture.ru/uploads/090212/V5k7BEeUz6.png

ВОт все что прописано .emacs касаемое cedet http://pastebin.mozilla-russia.org/96254

Пробовал полностью удалять файлы которые остаются после индексации, пробовал обновлять cedet, не могу понять что не так.


Надо определить несколько замен для препроцессора. Это делается путем настройки переменной semantic-lex-c-preprocessor-symbol-map (через M-x customize-variable). Как минимум надо указать, что keyword CURLPPAPI должен заменяться на "". Полный список макросов препроцессора, определенный в каком-то файле можно получить с помощью команды semantic-lex-spp-describe

P.S. я посмотрел в код библиотеки и примеров - на мой взгляд, это просто ужас. смешение С++ и С, из коробки не собирается без напильника, ну и т.д.

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

т.е. это проблема самих библиотек? Если они написаны грамотно то в cedet не чего допиливать не надо? А как обстоят дела со стандартными библиотеками с++, ну там sstream например?

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

ну это не проблема как таковая, просто cedet нужна некоторая помощь в разборе кода.

со стандартными библиотеками проблем нет

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

Вот только что пыталя настроить как вы писали.

Скопировал ваши настроки + изменил пути: http://pastebin.com/m16e4de34 Вот даже код как у вас :) http://pic.ipicture.ru/uploads/090214/jjR9WtQWqR.png

Но как видите он пишет что не возможно дополнить. Причем у меня так даже на стандартных библиотеках (проверял на sstream и string) На библиотеки curlpp то же самое что и в первом посте, я пытался настроить semantic-lex-c-preprocessor-symbol-map Писал там в строчке ( "CURLPPAPI" . "" ) или ( "CURLPPAPI" . nil ) ( "keyword CURLPPAPI" . "" ) но выводилась ошибка на CURLPPAPI. В semantic-lex-spp-describe показывает все касающие qt больше там не чего нет.

НО сейчас меня это не так сильно волнует, гораздо интереснее почему у меня стандартные библиотеки не работаю, вы просто говорили что они должны работать без какой либо настройки, но почему то так не происходит.

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

хмм сейчас попробовал написать свой простенький класс, кинул его в другую папку (отдельно от файла с проектом) на нем автодополнение работает. Не на одном другом классе автодополнение не работает. Хотя он прошелся и добавил в свою базу все библиотеки. Не знаю что может быть.

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

хмм - очень странно. у меня qt завелось с полпинка, попробуйте сделать так, как описано в разделе про отладку name completion

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

А как Вы сделали чтоб показывались методы с параметрами в комплитере i.e. вместо someMethod(,,) было б someMethod(int *, char ,char)

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

все настройки по умолчанию. у вас поддержка ctags включена? попробуйте ее отключить, и удалить старые базы семантика. Иногда ctags не возвращает полную информацию о тагах. у меня как раз это с выключенной поддержкой ctags - только semantic + gnu global

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

ех хе, взял был Ваш конфиг из блога а там таги включены, пока закоментировал для с/с++

;;(semanticdb-enable-exuberent-ctags 'c-mode)

;;(semanticdb-enable-exuberent-ctags 'c++-mode)

Вроде как все норм. Осталась наверное последния проблема с путями ето с хедерами бес указания типа:

#include <algorithm>

#include <cstdio>

#include <cstring>

чуствую что нужно как то заставить semantic пропарсить ети файлы...

Osprey
()
Ответ на: комментарий от n4ela

там смотреть нечево, тоже самое что в блоге отта (http://xtalk.msk.su/~ott/common/emacs/rc/emacs-rc-cedet.el.html)

диф здесь(так удобней;)):

http://pastebin.mozilla-russia.org/96354

ну а сам конф:

http://pastebin.mozilla-russia.org/96355

правдо бил еще хак в semantic-gcc.el (defun semantic-gcc-setup)... там префикс не устанвился автоматом а потому были инклуды для с/с++ типа /include вместо /usr/include

Osprey
()
Ответ на: комментарий от n4ela

Сорри за оффтоп, на по поводу скажу своё мнение. Emacs не подходит для качественной разработки на C++. Для pure C - да. А для C++ очень хороши Eclipse/Netbeans. Почему бы вам не использовать именно их и не заморачиваться на emacs+cedit.

fukazzz
()
Ответ на: комментарий от Osprey

должен быть загружен semantic-gcc, или явно добавлен каталог /usr/include/c++/4.x в system-includes

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

сформулируйте понятие качественной разработки? - вы подразумеваете, что это name completion членов класса, спроектированного индусом и имеющего километровые имена, и сотни методов в одном классе?

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

основной функционал, который я использую из cedet - навигация по коду, в основном по чужому...

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

Привет fukazzz, [offtop]если я не ошыбаюсь, то я тебя видел в игре tremulous (с тагом gentoo:))[/offtop] для С есть еще и рефакторинг (Xref) ну а для С достаточно и грепа с файндом :). недавно обновил CEDET и немного впечатлило. Да, местами может и комплитер неочень, но ведь не на комлитере весь мир вертиться, помню как лагало в еклипсе...

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

Osprey

yep, не ошибаешься. То был именно я :D

А про качественную разработку - всякое случается. Если сам пишешь, то, грубо говоря, можно и notepad.exe обойтись. Проблема именно возникает при разборке чужого индусского кода. И когда нету времени\нельзя заниматься его рефакторингом и проходится пользоваться тем, что есть. Тогда я предпочитаю загрузить всю эту бяку в проект на eclipse/netbeans и что-то пытаться сделать.

А emacs - тоже хороший и качественный инструмент. Когда я периодически совершаю потуги и пытаюьс поковырять ядро, юзаю его+etags.

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