Cscope

Czytając kod który napisał ktoś inny, największym problemem jest podążanie za kolejnymi wywołaniami funkcji. Zdarza się też tak, że znam nazwę lub jej fragment i chcę znaleźć wszystkie odwołania. Jak sobie z tym poradzić? Do tej pory używałem grepa uruchamianego przez odpowiedni Vimowy plugin. Rozwiązanie sprawdza się dla projektów z niewielką ilością kodu. Gorzej jeśli na wynik trzeba czekać parę sekund, bo architektura Vima nie pozwala w tym czasie robić cokolwiek innego.

Konkurencyjnym rozwiązaniem jest ctags, który jakoś nie przypadł mi do gustu. Trafiłem jednak na narzędzie o nazwie cscope, które ponoć potrafi jeszcze więcej.

Instalacja

Miłą niespodzianką jest fakt, że aby Vim był w stanie korzystać z cscope, wystarczy skompilować go z flagą --enable-cscope.

Przygotowanie bazy

Aby móc skorzystać z cscope, podobnie jak w przypadku programu ctags, trzeba najpierw przygotować odpowiedni plik z danymi. Ponieważ cscope napisany został jako pomoc dla programistów C, w przypadku innych języków trzeba samodzielnie określić pliki które mają być skanowane.

Aby utworzyć bazę dla mojego projektu który piszę w Pythonie, wpisuję kolejno

$ cd moj_projekt
$ find src -iname "*.py" > python_scope.files
$ cscope -bi python_scope.files

Utworzony zostanie plik bazy o nazwie cscope.out .

Cscope w Vim

Cscope posiada własny, bardzo wygodny interfejs napisany w curses. Aby jednak nie trzeba było przełączać się między terminalami, równie dobrze można wykorzystać zaimplementowany w Vimie parser. Komenda :cs wyświetli wszystkie możliwe polecenia. Pierwsze co należy sprawdzić, to czy do edytora podłączona jest jakakolwiek baza:

:cs show
brak połączeń z cscope

:cs add cscope.out
:cs show
 # pid   nazwa bazy danych               przedsionek tropu
 0 926    cscope.out                          <none>

Gotowe. Po utworzeniu połączenia z wcześniej przygotowanym ''cscope.out'', można zacząć przeszukiwane.

Linki