Exuberant Ctags#
Program ctags#
--list−kinds#
Argument --list−kinds
dla bieżącego wywołania programu ctags wyświetla wszystkie zaimplementowane rodzaje tagów dla konkretnego lub wszystkich obsługiwanych języków (zarówno tych pochodzących z wbudowanych parserów, jak i tych z własnych wyrażeń regularnych). Argument --list−kinds
to jeden z przerywających argumentów.
Opis działania#
Prawidłowe użycie argumentu najlepiej objaśnić na zapisie składniowym:
ctags --list−kinds[=value]
gdzie poszczególne człony oznaczają:
- ctags - ścieżka względna lub bezwzględna do pliku binarnego programu ctags (
ctags.exe
). Wszystko zależy od sposobu uruchamiania programu ctags, np. z systemowej konsoli, ze skrótu do programu czy z innego programu/skryptu. value - jedna z dwóch wartości tekstowych wskazująca na konkretny lub wszystkie języki (wielkość znaków nie ma znaczenia):
"language"
- identyfikator konkretnego języka obsługiwanego w bieżącym wywołaniu programu ctags, dla którego wyświetlone zostaną wszystkie zaimplementowane rodzaje tagów."all"
- specjalna wartość odpowiedzialna za wyświetlanie wszystkich zaimplementowanych rodzajów tagów dla wszystkich języków obsługiwanych w bieżącym wywołaniu programu ctags.
Przekazanie argumentu --list−kinds
bez podania jakiejkolwiek wartości lub z pustą wartością ""
jest równoważne z niejawnym użyciem wartości "all"
. Jeśli wartością będzie identyfikator nieobsługiwanego języka to zwrócony zostanie komunikat ctags: Unknown language "xxx" in "list-kinds" option
.
W rozszerzonym formacie Exuberant Ctags kod odpowiedzialny za obsługę danego języka (tj. parser lub własne wyrażenia regularne) nadaje każdemu utworzonemu tagowi określony rodzaj # (kind
), który jest opisywany trzema wartościami: skrótową nazwą (w postaci pojedynczej litery), pełną nazwą oraz dodatkowym opisem. Argument --list−kinds
wyświetla skrótowe nazwy i dodatkowe opisy (posortowane w kierunku A-Z) dla wszystkich rodzajów tagów, jakie zostały zaimplementowane w kodzie odpowiedzialnym za obsługę danego języka. Niektóre z nich mogą być domyślnie wyłączone i nie biorą udziału w bieżącej generacji tagów, co zostaje zasygnalizowane dopiskiem "[off]"
umieszczonym za dodatkowym opisem każdego z tagów. Po przetworzeniu wszystkich plików i wygenerowaniu dla nich tagów skrótowe nazwy (używane domyślnie) można potem wykorzystywać na różne sposoby, np. do przefiltrowania wyników generacji za pomocą argumentu <lang>-kinds
lub do grupowania/wyświetlania tagów tego samego rodzaju wprost w edytorze tekstowym.
Implementowanie kolejnych języków i/lub rodzajów tagów poprzez własne wyrażenia regularne jest możliwe dopiero po dodaniu funkcji +regex
w czasie kompilacji programu ctags, co można sprawdzić np. argumentem --version
.
Warto nadmienić, że skrótowe nazwy i pełne nazwy nie są w żaden sposób ograniczane i każdy kod obsługujący dany język może definiować własne nazwy w dowolnych ilościach. To powoduje, że jedna nazwa może występować wielokrotnie w tym samym lub w wielu językach jednocześnie, i wskazywać na te same lub inne jego elementy, np. nazwa "p"
w jednym języku może oznaczać właściwości (properties), a w innym procedury (procedures).
Prosty przykład:
ctags --list−kinds=all
ctags --list−kinds=ALL
ctags --list−kinds=""
ctags --list−kinds=
ctags --list−kinds
ctags * --list−kinds=all :: przetworzy pliki i wyświetli wszystkie rodzaje tagów dla wszystkich obsługiwanych języków
ctags --list−kinds=all * :: wyświetli wszystkie rodzaje tagów dla wszystkich obsługiwanych języków, ale nie przetworzy plików
ctags -R --list−kinds=all :: wyświetli wszystkie rodzaje tagów dla wszystkich obsługiwanych języków, ale nie przetworzy plików
ctags --list−kinds=all -R :: wyświetli wszystkie rodzaje tagów dla wszystkich obsługiwanych języków, ale nie przetworzy plików
ctags --list−kinds=c++ :: wyświetli wszystkie rodzaje tagów dla języka C++
ctags --list−kinds=html :: wyświetli wszystkie rodzaje tagów dla języka HTML
ctags --list−kinds=HTML :: wyświetli wszystkie rodzaje tagów dla języka HTML
ctags --list−kinds=hTmL --list−kinds=c++ :: wyświetli identyfikator oraz skojarzone z nimi rozszerzenia tylko dla języka HTML
ctags --langdef=ZiZu --regex-ZiZu=/^def/\1/d,definition/ --regex-ZiZu=/^cos/\1/c,cos/ --list-kinds=zizu
ctags --langdef=ZiZu --regex-ZiZu=/^cos1/\1/c,cos/ --regex-ZiZu=/^cos2/\1/c,cos/ --list-kinds=zizu
ctags --list−kinds=all > tags.txt :: przekierowanie wszystkich rodzajów tagów dla wszystkich obsługiwanych języków do pliku
:: Błędne przypadki
ctags -list−kinds
ctags --list−kinds=cos
ctags --list−kinds=" "