Ctags

CTAGs (BSD)
Entwickler (en) Ken Arnold
Repository
Betriebssystem Unix und Unix-artig
Plattform Plattformübergreifend
Typ Programmierwerkzeug (Speziell: Code -Navigationstool)
Lizenz BSD

CTAGs ist ein Programmierwerkzeug das erzeugt eine Index (oder Tag) Datei mit Namensdatei in Quell- und Header -Dateien verschiedener Programmiersprachen helfen Codeverständnis. Abhängig von der Sprache, Funktionen, Variablen, Klasse Mitglieder, Makros und so weiter können indiziert werden. Diese Tags ermöglichen es, Definitionen schnell und einfach durch a zu finden Texteditor, eine Code -Suchmaschine oder ein anderes Dienstprogramm. Alternativ gibt es auch einen Ausgangsmodus, der a generiert Querverweis Datei, Auflistung von Informationen zu verschiedenen Namen, die in einer Reihe von Sprachdateien in gefunden wurden für Menschen lesbar bilden.

Das Original CTAGs wurde eingeführt in BSD UNIX 3.0 und wurde von geschrieben von Ken Arnold, mit Forran Unterstützung von Jim Kleckner und Pascal Unterstützung von Bill Joy. Es ist Teil der ersten Freisetzung von Einzel -Unix -Spezifikation und XPG4 von 1992.

Herausgeber, die CTAGs unterstützen

Tag -Indexdateien werden von vielen unterstützt Quellcode -Redakteure, einschließlich:

Varianten von CTAGs

Es gibt einige andere Implementierungen der CTAGs Programm:

ETAGS

GNU EMACs Kommt mit zwei CTAGS -Dienstprogrammen, ETAGS und CTAGs, die aus demselben Quellcode zusammengestellt werden. ETAGS generiert eine Tag -Tabellendatei für EMACs, während der Befehl ctags verwendet wird, um eine ähnliche Tabelle in einem Format zu erstellen, das von verstanden wird vi. Sie haben unterschiedliche Sätze von Befehlszeilenoptionen: ETAGS erkennt und ignoriert keine Optionen, die nur für VI -Style -Tag -Dateien, die vom Befehl ctags erstellt wurden, sinnvoll sind.[4]

Überschwängliche CTAGs

Überschwängliche CTAGs, geschrieben und gepflegt von Darren Hiebert bis 2009,[5] wurde ursprünglich mit verteilt mit Vim, wurde aber ein separates Projekt nach der Veröffentlichung von VIM 6. Es beinhaltet Unterstützung für EMACs und etags Kompatibilität.[6][7]

Überschwierige CTAGs beinhalten die Unterstützung für über 40 Programmiersprachen mit der Möglichkeit, Unterstützung für noch mehr mithilfe von Verwendung zu erhöhen Reguläre Ausdrücke.

Universelle Ctags

Universelle Ctags ist eine Gabel von üppigen CTAGs mit dem Ziel, seine Entwicklung fortzusetzen. Einige Parser werden umgeschrieben, um die Sprachen besser zu unterstützen.[8]

Sprachspezifisch

Hasktags Erstellt CTAGs kompatible Tag -Dateien für Haskell Quelldaten.[9] Es beinhaltet die Unterstützung für das Erstellen von EMACS ETAGS -Dateien.[10]

JSCTAGs ist eine CTAGS-kompatible Code-Indexierungslösung für JavaScript.[11] Es ist spezialisiert für JavaScript und verwendet die CommonJS Verpackungssystem. Es übertrifft Überschwängliche CTAGs Für JavaScript -Code finden Sie mehr Tags als letztere.[12]

Tags -Dateiformate

Es gibt mehrere Tag -Dateiformate. Einige von ihnen werden unten beschrieben. Im Folgenden, \x## repräsentiert das Byte mit hexadezimaler Darstellung ##. Jede Zeile endet mit a Zeilenvorschub (LF, \n = \x0a).

CTAGs und Nachkommen

Das Original CTAGs und die üppigen/universellen Nachkommen haben ähnliche Dateiformate:[13]

CTAGs

Dies ist das Format, das von verwendet wird vi und verschiedene Klone. Die Tags -Datei heißt normalerweise "Tags".

Die Tags -Datei ist eine Liste von Zeilen, jede Zeile im Format:

{Verlinke den Namen} \t{Tagfile} \t{Tagaddress}

Die Felder sind wie folgt angegeben:

  • {Verlinke den Namen} - Jede Kennung, die keinen Weißraum enthält
  • \t - genau eins Tab ( \x0b) Charakter, obwohl viele Versionen von vi kann jede Menge an Weißraum umgehen.
  • {Tagfile} - der Name der Datei wo {Verlinke den Namen} ist im Verhältnis zum aktuellen Verzeichnis definiert
  • {Tagaddress} - Ein ex Der Befehl Modus, mit dem der Editor zum Speicherort des Tags führt. Für POSIX -Implementierungen von vi Dies ist möglicherweise nur eine Suche oder eine Zeilennummer, die eine zusätzliche Sicherheit gegen die ausführliche Befehlsausführung bietet.

Die Tags -Datei ist auf die sortiert {Verlinke den Namen} Feld, das eine schnelle Suche der Tags -Datei ermöglicht.

Erweiterte CTAGs

Dies ist das Format, das von verwendet wird Vim'S überschwängliche CTAGs und universelle CTAGs. Diese Programme können ein Original erzeugen CTAGs Dateiformat oder ein erweitertes Format, das versucht, die Rückwärtskompatibilität beizubehalten.

Die erweiterte Tags -Datei ist eine Liste von Zeilen, jede Zeile im Format:

{Verlinke den Namen} \t{Tagfile} \t{Tagaddress} [; "\t{Tagfield...}]

Die Felder bis hin zu und einschließlich {Tagaddress} sind dasselbe wie für CTAGs Oben.

Optionale zusätzliche Felder werden durch quadratische Klammern ("[...]") angezeigt und enthalten:

  • ; "" - Semikolon + Doppelzitat: beendet die {Tagaddress} auf eine Weise, die wie der Beginn eines Kommentars zu einem Kommentar aussieht vi oder ex.
  • {Tagfield} - Erweiterungsfelder: Registerkarte getrennt "Schlüssel: Wert" Paare für weitere Informationen.

Dieses Format ist mit Nicht-Posix kompatibel vi Da werden die zusätzlichen Daten als Kommentar interpretiert. POSIX -Implementierungen von vi muss jedoch geändert werden, um es zu unterstützen.[13]

ETAGS

Dies ist das von EMACs verwendete Format ETAGS. Die Tags -Datei heißt normalerweise "Tags".

Die ETAGS -Dateien bestehen aus mehreren Abschnitten - einem Abschnitt pro Eingangsquellendatei. Die Abschnitte sind einfacher Text mit mehreren nicht printbaren ASCII-Zeichen, die für besondere Zwecke verwendet werden. Diese Charaktere werden unten als hexadezimale Codes für hexadezimale Weise dargestellt.

Ein Abschnitt beginnt mit einem Zwei -Zeilen -Header (die ersten beiden Bytes bilden a magische Zahl):

\x0c {src_file}, {size_of_tag_definition_data_in_bytes}

Auf den Header folgt Tag -Definitionen, eine Definition pro Zeile mit dem Format:

{tag_definition_text} \x7f{Verlinke den Namen} \x01{Zeilennummer}, {byte_offset}

{Tagname} \ x01 kann weggelassen werden, wenn der Name des Tags aus dem Text in der Tag -Definition abgeleitet werden kann.

Beispiel

Bei einem einzelnen Zeilentest.c Quellcode:

#Define CCC (x)

Die Datei tags (ETAGs) würden so aussehen:

\x0c test.c, 21 #define ccc (\x7fCCC \x011,0

Die Datei Tags (CTAGs) sehen möglicherweise aus:

CCC (test.c 1

oder flexibler mit einer Suche:

CCC (test.c /^#Definieren Sie CCC ( /

Siehe auch

Verweise

  1. ^ "Sprachserverprotokoll". Codelit -Dokumentation. Abgerufen 2022-06-12.
  2. ^ "Aminet - dev/c/ctags.lha".
  3. ^ Arbeitsbereichsymbole, Python für Visual Studio Code Docs
  4. ^ etags.emacs (1)- -Linux Allgemeine Befehle Handbuch
  5. ^ "Überschwängliche CTAGs". CTAGS.SourceForge.net.
  6. ^ "VIM-Dokumentation: Version6: CTAGS-Gone". Abgerufen 2007-04-28.
  7. ^ ETAGS.CTAGS (1)- -Linux Allgemeine Befehle Handbuch
  8. ^ "Universal CTAGS -Dokumentation". Abgerufen 2018-08-02.
  9. ^ "GHC -Dokumentation: Andere Haskell -Versorgungsprogramme". Abgerufen 2010-03-05.
  10. ^ "Hasktags: Produziert CTAGs" Tags "und etags" Tags "-Dateien für Haskell -Programme". Abgerufen 2010-03-05.
  11. ^ "PCWalton Github Repository für JSCTAGs". Archiviert von das Original Am 2010-08-22. Abgerufen 2016-09-10.
  12. ^ Patrick Walton (25. Mai 2010). "Einführung von JSCTAGs". Abgerufen 2010-05-25.
  13. ^ a b "Vorschlag für erweiterte VI -Tags Dateiformat". Abgerufen 2007-06-30.

Externe Links