Exuberant Ctags#
Program ctags#
--exclude#
Argument --exclude
steruje wykluczeniami przy analizowaniu pliku/plików lub folderu/folderów dla bieżącego wywołania programu ctags.
Opis działania#
Prawidłowe użycie argumentu najlepiej objaśnić na zapisie składniowym:
ctags --exclude[=value] [--argument | -argument] [path]
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 trzech dostępnych wartości:
"pattern"
- wzorzec odpowiedzialny za pomijanie plików lub folderów, które do niego pasują. Znaki wieloznaczności * i ? nie są obsługiwane (szczegóły)."@file"
- jeśli wartość rozpoczyna się od znaku@
to pozostała część za tym znakiem stanowi ścieżkę względną lub bezwzględną do dodatkowego pliku ze wzorcami wykluczającymi. Znaki wieloznaczności * i ? nie są obsługiwane (szczegóły).""
- specjalna pusta wartość oznaczająca anulowanie wszystkich zdefiniowanych do tej pory wzorców wykluczających (wewnętrznych lub własnych).
- argument - jeden lub więcej dodatkowych argumentów dostrajających działanie programu ctags.
- path - jedna lub więcej dodatkowych ścieżek do plików/folderów, które będą analizowane przy generowaniu tagów (szczegóły).
Kilka uwag odnośnie stosowania argumentu --exclude
:
- Argument
--exclude
można podawać wielokrotnie (separatorem jest spacja), i każdy kolejny będzie miał wpływ tylko na te pliki, które występują bezpośrednio po nim. - Przekazanie argumentu
--exclude
bez podania jakiejkolwiek wartości jest równoważne z niejawnym użyciem pustej wartości. - W programie ctags istnieje kilkanaście wewnętrznych wzorców wykluczających, które działają z każdym wywołaniem programu (można wyłączyć poprzez podanie nowego pustego wzorca).
W programie ctags każda ścieżka z analizowanych plików/folderów, która wynikła na skutek użycia argumentu
path
, dodatkowego pliku z argumentu-L
, czy z rekursywnego przechodzenia wywołanego argumentem--recursive
lub-R
jest porównywana ze wszystkimi wzorcami wykluczającymi, które ustawiono jeszcze przed rozpoczęciem analizowania tych plików/folderów. Odbywa się to w dwóch krokach:Wzorzec wykluczający jest porównywany z ostatnim członem w ścieżce (tj. tym, co za ostatnim znakiem
"\"
). Jeśli program ctags w danym momencie analizuje plik to ostatnim członem w jego ścieżce będzie nazwa pliku (włącznie z rozszerzeniem), a jeśli analizuje folder (np. ze względu na rekursywne przechodzenie) to ostatnim członem w jego ścieżce będzie nazwa folderu. Dzięki temu można wykluczać pliki/foldery o tych samych nazwach, ale na różnych poziomach zagnieżdżenia. Oto kilka przykładowych wywołań programu ctags:"ctags --exclude=source -R source"
lub"ctags --exclude=source -R .\source"
- pomija pliki lub foldery z nazwą"source"
, gdzie analizie poddana zostanie zawartość folderu"source"
(włącznie z nim samym). W praktyce nie wygeneruje żadnych tagów bo wykluczy cały folder"source"
."ctags --exclude=folderA -R source"
- pomija pliki lub foldery z nazwą"folderA"
, gdzie analizie poddana zostanie zawartość folderu"source"
(włącznie z nim samym). W praktyce wykluczy foldery"source\folderA"
czy"source\folder\folderA"
."ctags --exclude=folderA -R source\folderA"
- pomija pliki lub foldery z nazwą"folderA"
, gdzie analizie poddana zostanie zawartość folderu"source\folderA"
(włącznie z nim samym). W praktyce nie wygeneruje żadnych tagów bo wykluczy cały folder""source\folderA"
."ctags --exclude=source -R source\folderA"
- pomija pliki lub foldery z nazwą"source"
, gdzie analizie poddana zostanie zawartość folderu"source\folderA"
(włącznie z nim samym). W praktyce wykluczy foldery"source\folderA\source"
czy"source\folderA\folderB\source"
."ctags --exclude=source -R source\*"
- pomija pliki lub foldery z nazwą"source"
, gdzie analizie poddana zostanie zawartość folderu"source"
(ale bez niego samego). W praktyce wykluczy foldery"source\source"
czy"source\folder\source"
.
Wzorzec wykluczający jest porównywany z całą ścieżką analizowanego pliku/folderu. Trzeba zwracać uwagę na rodzaj przekazywanych ścieżek (względne lub bezwzględne) i tworzyć wzorce pasujące do przyjętego formatu. Jest to szczególnie istotne w przypadku ścieżek względnych, które można tworzyć na wiele sposobów (np. wielokrotnie przechodzić między folderami na różnym poziomie zagnieżdżenia), dlatego początek w przyszłych wzorcach należy określać w ten sam sposób, co w analizowanych ścieżkach względnych. Dzięki dokładniejszemu porównywaniu można wykluczać pliki/foldery z konkretniejszych lokalizacji. Oto kilka przykładowych wywołań programu ctags:
"ctags --exclude=source\folderA -R source"
- pomija plik lub folder ze ścieżką zaczynającą się od"source\folderA"
, gdzie analizie poddana zostanie zawartość folderu"source"
(włącznie z nim samym). W praktyce wykluczy folder"source\folderA"
."ctags --exclude=source\folderA\plik.js -R source"
- pomija plik ze ścieżką zaczynającą się od"source\folderA\plik.js"
, gdzie analizie poddana zostanie zawartość folderu"source"
(włącznie z nim samym). W praktyce wykluczy plik"source\folderA\plik.js"
."ctags --exclude=source\folderA -R ..\source"
- niczego nie pominie bo ścieżki w analizowanych plikach zaczynają się od"..\source"
."ctags --exclude=source\folderA -R .\source"
- niczego nie pominie bo ścieżki w analizowanych plikach zaczynają się od".\source"
."ctags --exclude=.\source\folderA -R .\source"
- pomija plik lub folder ze ścieżką zaczynającą się od".\source\folderA"
, gdzie analizie poddana zostanie zawartość folderu"source"
(włącznie z nim samym). W praktyce wykluczy folder".\source\folderA"
.
- Dodatkowy plik ze wzorcami wykluczającymi # to zwykły plik tekstowy, gdzie każdy wzorzec zajmuje osobną linię. Znaki wieloznaczności
*
i?
we wzorcach nie są obsługiwane (szczegóły). Wzorce zawierające spacje podajemy bez otaczania ich podwójnymi cudzysłowami. Można stosować zamiennie znak"\"
i"/"
.
Prosty przykład:
ctags --exclude="" :: wyłączenie wszystkich wzorców wykluczających
ctags --exclude= :: wyłączenie wszystkich wzorców wykluczających
ctags --exclude :: wyłączenie wszystkich wzorców wykluczających
ctags --exclude=@files -R :: pobranie wzorców wykluczających z pliku `files`
ctags --exclude=@files1 --exclude=@files2 -R :: pobranie wzorców wykluczających z pliku `files1` i `files2`
ctags --exclude="" --exclude="folder" -R :: pomijanie plików/folderów z nazwą 'folder'
ctags --exclude="folder" --exclude="" -R :: wyłączenie wszystkich wzorców wykluczających
ctags --exclude="test.js" -R :: pomijanie konkretnego pliku `test.js`
:: Błędne przypadki
ctags * --exclude
ctags --exclude=cos