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.