A Ctags egy programozási eszköz, amely indexfájlt (vagy tagfájlt) generál a különböző programozási nyelvek forrás- és fejlécfájljaibanAz direktíva arra utasítja a szövegfájl-feldolgozót, hogy a direktíva szövegét egy megadott fájl (fejlécfájl, például stdbool.h) tartalmára cserélje. található nevekből a kód megértésének elősegítése érdekében.A program comprehension (más néven programmegértés vagy [forrás]kódmegértés) a számítástechnika egyik területe, amely a szoftverfejlesztők meglévő forráskódjának karbantartásával foglalkozik. A nyelvtől függően függvények, változók, osztályok, makrók stb. indexelhetők. Ezek a tagek lehetővé teszik a definíciók gyors és egyszerű megtalálását egy szövegszerkesztővel, egy kódkereső motorral vagy más segédprogrammal. Alternatív megoldásként létezik egy kimeneti mód is, amely kereszthivatkozási fájlt generál, amely ember által olvasható formában listázza a nyelvi fájlokban található különféle nevekről szóló információkat.
Az eredeti Ctags kódot a BSD Unix 2.0-ban vezették be, Ken Arnold írta, Jim Kleckner Fortran, Bill Joy pedig Pascal támogatásával. A kód az 1992-es Single Unix Specification és XPG4 kezdeti kiadásának része.
Ctags-t támogató szerkesztők A Tag index-fájlokat számos forráskód-szerkesztő támogatja, beleértve a következőket: Atom BBEdit 8+ CodeLite (beépített ctagsd nyelvi szerveren keresztül) Cloud9 IDE (belsőleg használja) CygnusEd Emacs and XEmacs EmEditor Professional Far Manager (a Ctags Source Navigator bővítményen keresztül) Geany Gedit (a gedit-symbol-browser-plugin használatával) JED jEdit (a CodeBrowser, Tags, ClassBrowser, CtagsSideKick vagy Jump bővítményekkel) JOE KDevelop Kate mcedit (a Midnight Commander beépített szerkesztője) NEdit Notepad++ (OpenCTags bővítményen keresztül) QDevelop TSE (via macro) TextMate (CodeBrowser-PlugIn bővítménnyel) TextPad UltraEdit VEDIT vi (és származékai, mint például Elvis, Nvi, Vim, vile stb.) Visual Studio CodeWorkspace Symbols, Python for Visual Studio Code Docs Xedit (X11)
A ctags változatai A ctags programnak van néhány további implementációja is:
Etags A GNU Emacs két ctags segédprogrammal érkezik, az etags-szal és a ctags-szal, amelyek ugyanabból a forráskódból fordíthatók. Az etags egy tag táblafájlt generál az Emacs számára, míg a ctags parancs egy hasonló táblázat létrehozására szolgál a vi által megértett formátumban. Különböző parancssori opciókkal rendelkeznek: az etags nem ismeri fel és figyelmen kívül hagyja azokat az opciókat, amelyeknek csak a ctags parancs által létrehozott vi stílusú tag fájloknál van értelme.etags.emacs
Exuberant Ctags Az Exuberant Ctags-t, amelyet Darren Hiebert írt és tartott karban 2009-ig, kezdetben a Vimmel együtt terjesztették, de a Vim 6 megjelenése után különálló projektté vált. Támogatja az Emacs és az etags kompatibilitást.
Az Exuberant Ctags több mint 40 programozási nyelvet támogat, és reguláris kifejezések használatával még több nyelvet lehet hozzáadni.
Universal Ctags A Universal CtagsUniversal Ctags az Exuberant Ctags egy elágazása, amelynek célja a folyamatos fejlesztés. Néhány elemzőt átírtak a nyelvek jobb támogatása érdekében.
Nyelvspecifikus A Hasktags ctags-kompatibilis tag fájlokat hoz létre Haskell forrásfájlokhoz. Támogatja az Emacs etags fájlok létrehozását.
A jsctags egy ctags-kompatibilis kódindexelő megoldás JavaScripthez. JavaScriptre specializálódott és a CommonJS csomagolórendszert használja. JavaScript kódok esetén felülmúlja az Exuberant Ctags-et, több címkét talál, mint az utóbbi.
Címkék (Tag-ek) fájlformátumai Több címkefájl-formátum létezik. Néhányat az alábbiakban ismertetünk. A következőkben a \x## a hexadecimális ábrázolású bájtot jelöli ##. Minden sor soremeléssel (LF, \n = \x0A) végződik.
Ctags és leszármazottak Az eredeti ctags és az Exuberant/Universal leszármazottak hasonló fájlformátumokkal rendelkeznek:
Ctags Ezt a formátumot használja a vi és a különféle klónok. A tags fájl neve általában „tags”.
A tags fájl sorok listája, minden sor a következő formátumban: {tagname}\t{tagfile}\t{tagaddress}
A mezők a következőképpen vannak megadva: {tagname} – Bármely azonosító, amely nem tartalmaz szóközöket \t – Pontosan egy tabulátor (\x09) karakter, bár a vi számos verziója tetszőleges mennyiségű szóközt képes kezelni {tagfile} – A fájl neve, ahol a {tagname} definiálva van, az aktuális könyvtárhoz képest {tagaddress} – Egy ex módú parancs, amely a szerkesztőt a címke (tag) helyére viszi. A vi POSIX implementációi esetén ez csak keresés vagy sorszám lehet, ami további biztonságot nyújt az önkényes parancsvégrehajtás ellen.
A címkefájl a {tagname} mező szerint van rendezve, ami lehetővé teszi a címkefájlban a gyors keresést.
Extended Ctags Ezt a formátumot használják a Vim Exuberant Ctags és Universal Ctags programjai. Ezek a programok képesek eredeti ctags fájlformátumot vagy kiterjesztett formátumot generálni, amely megpróbálja megőrizni a visszafelé kompatibilitást.
A kiterjesztett tags fájl sorok listája, ahol minden sor a következő formátumban van: {tagname}\t{tagfile}\t{tagaddress}[;"\t{tagfield...}]
A {tagaddress}-ig bezárólag megadott mezők megegyeznek a fenti ctag-ek mezőivel.
A további, opcionális mezőket szögletes zárójel ("[...]") jelöli, és a következőket tartalmazzák: ;" – pontosvessző + dupla idézőjel: A {tagaddress} karakterláncot úgy zárja le, mintha egy vi vagy ex függvényhez fűzött komment kezdetét látná. {tagfield} – bővítménymezők: tabulátorral elválasztott "kulcs:érték" párok a további információkért.
Ez a formátum kompatibilis a nem-POSIX vi-jal, mivel a kiegészítő adatokat megjegyzésként értelmezi. A vi POSIX implementációit azonban módosítani kell a támogatásához.
Etags Ezt a formátumot használja az Emacs etags fájlja. A tags fájl neve általában "TAGS".
Az etags fájlok több részből állnak – bemeneti forrásfájlonként egy részből. A részek egyszerű szövegek, több nem nyomtatható ASCII karakterrel, amelyeket speciális célokra használnak. Ezeket a karaktereket aláhúzott hexadecimális kódok jelölik az alábbiakban.
Egy szakasz egy kétsoros fejléccel kezdődik (az első két bájt egy mágikus számot alkot): \x0c {src_file},{size_of_tag_definition_data_in_bytes}
A fejlécet a címkedefiníciók követik, soronként egy definíció, a következő formátumban: {tag_definition_text}\x7f{tagname}\x01{line_number},{byte_offset}
A {tagname}\x01 elhagyható, ha a címke neve kikövetkeztethető a címkedefiníció szövegéből.
Példa Adott egy egysoros test.c forráskód: #define CCC(x)
A TAGS (etags) fájl így nézne ki: \x0c test.c,21 #define CCC(\x7fCCC\x011,0
A tags (ctags) fájl így nézhet ki: CCC( test.c 1
vagy rugalmasabban, kereséssel: CCC( test.c /^#define CCC(/
Jegyzetek
További információk ctags(1) Universal Ctags homepage Exuberant Ctags homepage Ctags on VMS
Fordítás
Kategória:Számítógép-programozás Kategória:Fejlesztőeszközök Kategória:Unix-parancsok