Exuberant Ctags#

Program ctags#

Przetwarzanie argumentów#

W programie ctags dostępnych jest aż 48 argumentów, które sterują jego zachowaniem. Większość z nich można podawać wielokrotnie w dowolnym wariancie konfiguracyjnym, co sprawia, że w trakcie przetwarzania kolejnego argumentu zachowanie programu ctags może ulec zmianie. Z tego też względu wyróżniamy kilka rodzajów argumentów #:

Dla lepszego zrozumienia tematu przeanalizujmy dokładniej sposób, w jaki program ctags przetwarza swoje argumenty. Załóżmy, że mamy następujące teoretyczne wywołanie programu ctags:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
ctags initArg1 initArg2 standardArg1 standardArg2

Działanie programu ctags można opisać następująco:

  1. Najpierw analizowane są początkowe argumenty (u nas initArg1 i initArg2) aż do wystąpienia pierwszego standardowego argumentu (u nas standardArg1). Jeśli wśród tych początkowych argumentów pojawią się inicjujące argumenty to program ctags wykona pewne specyficzne zadania, które są przewidziane dla tych argumentów.

    Standardowy argument # to każdy argument, który nie jest inicjującym argumentem. Niektóre standardowe argumenty zalicza się jeszcze do odroczonych argumentów lub przerywających argumentów.

    Inicjujący argument # to taki argument, który musi być jednym z początkowych argumentów przekazanych przy wywołaniu programu ctags. Przekazanie go w ten sposób powoduje, że jego działanie ma specjalne znaczenie dla programu ctags. Kolejność między inicjującymi argumentami nie jest istotna, ale wszystkie one muszą pojawić się jeszcze przed pierwszym standardowym argumentem. Do inicjujących argumentów zaliczamy: --options=NONE, --verbose czy -V. Prosty przykład:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    ctags -V					:: `-V` jest argumentem inicjującym
    ctags -V --options=NONE		:: `-V` i `--options` są argumentami inicjującymi
    ctags --options=NONE -V		:: `-V` i `--options` są argumentami inicjującymi
    
    ctags * -V					:: `-V` nie jest argumentem inicjującym
    ctags -R -V					:: `-V` nie jest argumentem inicjującym
    ctags test.js -V			:: `-V` nie jest argumentem inicjującym
    
    ctags -V test.js --options=NONE test.html	:: tylko `-V` jest argumentem inicjującym
  2. Następnie, jeśli program ctags został uruchomiony bez inicjującego argumentu w postaci --options=NONE, to spróbuje on ustalić wstępną konfigurację w oparciu o domyślne pliki konfiguracyjne i zmienne środowiskowe. Jeśli oba te warianty wskazują na jakieś dodatkowe pliki konfiguracyjne to one również zostaną przeanalizowane.

    Jeśli w powyższych miejscach jakiś argument wystąpi wielokrotnie to finalnie użyta zostanie wartość tego ostatniego. Jeśli jakiś argument nie został podany wprost to przyjęte zostanie jego domyślne zachowanie.

  3. Następnie program ctags wraca do przetwarzania pozostałych standardowych argumentów, które przekazano przy jego wywołaniu. Robi to w sposób cykliczny, tj. argument po argumencie (z uwzględnieniem jego ewentualnej wartość występującej za nim). To powoduje, że każdy kolejny standardowy argument może zmienić bieżące ustawienia programu ctags, i będą one miały zastosowanie przy dalszym przetwarzaniu argumentów (np. dla plików/folderów wskazywanych przez argument path). Niektóre argumenty są odroczonymi argumentami i wpływają na wykonanie lub pominięcie kilku końcowych akcji.

    Takie wyrywkowe zmieniane zachowania programu ctags w trakcie przetwarzania standardowych argumentów, choć możliwe, powinno być stosowane sporadycznie. W przeciwnym razie dla różnych plików/folderów możemy wygenerować tagi o odmiennych formatach, a umieszczenie ich w jednym pliku indeksu nie ma większego sensu. Prosty przykład:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    ctags plik1.js --format=1 plik2.js -e plik3.js

    Jeśli użytkujemy program ctags poprzez argumenty przekazywane wprost przy jego wywołaniu to najlepiej zawsze podawać najpierw te argumenty, które odpowiadają za jego konfigurację, a dopiero potem te, które wskazują na konkretne pliki/foldery. Dzięki temu otrzymamy spójną konfigurację dla wszystkich analizowanych plików. Jeśli naprawdę zależy nam na innych ustawieniach dla poszczególnych plików/folderów to wystarczy jeszcze raz wywołać dla nich program ctags, ale z innymi ustawieniami.

  4. Po przetworzeniu wszystkich standardowych argumentów, które przekazano przy wywołaniu programu ctags, przystępuje on do wykonania kilku końcowych akcji. Niektóre z tych akcji są kontrolowane przez odroczone argumenty.

    Odroczony argument # to jeden ze standardowych argumentów, który wpływa na wykonanie lub pominięcie przypisanych do niego akcji dopiero na samym końcu działania programu ctags, po przetworzeniu wszystkich innych standardowych argumentów, które przekazano przy wywołaniu programu. Przykładami odroczonych argumentów mogą być: --append, -a, --recurse, -R, --sort, -u, --totals, -L czy −−etags−include.

    Ostatnią akcją podjętą przez program ctags będzie zapisanie odnalezionych tagów do pliku indeksu (domyślnego lub wskazanego argumentem -f lub -o) lub wyświetlenie ich do standardowego wyjścia (ponowie poprzez argument -f- lub -o-), i w końcu zamknięcie samego programu ctags.

    W ramach uzupełnienia warto jeszcze wspomnieć o przerywającym argumencie #, który jest jednym ze standardowych argumentów. Wystąpienie takiego argumentu w dowolnym miejscu jednego z wariantów konfiguracyjnych powoduje przerwanie przetwarzania dalszych argumentów oraz anulowanie wszystkich końcowych akcji kontrolowanych przez odroczone argumenty. Zadziała natomiast zapisanie domyślnego lub konkretnego pliku indeksu (jeśli do chwili wystąpienia tego argumentu wygenerowano jakieś tagi), ale nie zadziała wyświetlenie tych tagów do standardowego wyjścia poprzez argument -f- lub -o-. Do przerywających argumentów zaliczamy: --help, --version, --license, --list−languages, --list−maps czy --list−kinds. Prosty przykład:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    ctags --help
    ctags --version
    ctags --license
    
    ctags -V --help						:: zadziałają oba argumenty 
    ctags --help -V						:: zadziała tylko '--help'
    ctags --help --version -- license	:: zadziała tylko '--help'
    
    ctags -V plik.js --help				:: utworzy domyślny plik indeksu (ale bez posortowania tagów)
    ctags -V plik.js --totals --help	:: jak wyżej, ale nie zadziała `totals`
    
    ctags -V -fidx plik.js --help		:: utworzy plik indeksu `idx` (ale bez posortowania tagów)`
    ctags -V -f- plik.js --help			:: nie zwróci tagów ani do standardowego wyjścia ani do domyślnego pliku indeksu

    Ogólnie rzecz biorąc to przerywające argumenty służą tylko do wyświetlenia pewnych podstawowych informacji o programie ctags i nie powinny być łączone z innymi argumentami.

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Exuberant Ctags (H1) Program ctags (H2) Przetwarzanie argumentów (H3)