Jump to content

Cтеги

Cтеги (BSD)
Разработчик(и) Кен Арнольд
Репозиторий
Операционная система Unix и Unix-подобные
Платформа Кросс-платформенный
Тип Инструмент программирования (в частности: инструмент навигации по коду)
Лицензия БСД

Ctags — это инструмент программирования , который генерирует индексный файл (или файл тегов) имен, найденных в исходных файлах и файлах заголовков различных языков программирования, для облегчения понимания кода . В зависимости от языка функции , переменные , классов члены , макросы могут индексироваться и т. д. Эти теги позволяют быстро и легко находить определения с помощью текстового редактора , системы поиска кода или другой утилиты. В качестве альтернативы существует также режим вывода, который генерирует файл перекрестных ссылок , содержащий информацию о различных именах, найденных в наборе языковых файлов, в удобочитаемой форме.

Оригинальный Ctags был представлен в BSD Unix 3.0 и был написан Кеном Арнольдом при поддержке Fortran Джимом Клекнером и Pascal поддержке Биллом Джоем . Это часть первоначальной версии единой спецификации Unix и XPG4 1992 года.

Редакторы, поддерживающие ctags

[ редактировать ]

Индексные файлы тегов поддерживаются многими редакторами исходного кода , в том числе:

Варианты ctags

[ редактировать ]

Существует несколько других реализаций программы ctags :

GNU Emacs поставляется с двумя утилитами ctags: etags и ctags, которые скомпилированы из одного и того же исходного кода. Etags генерирует файл таблицы тегов для Emacs, а команда ctags используется для создания аналогичной таблицы в формате, понятном vi . У них есть разные наборы параметров командной строки: etags не распознает и игнорирует параметры, которые имеют смысл только для файлов тегов стиля vi, созданных командой ctags. [4]

Яркие Ctags

[ редактировать ]

Exuberant Ctags , написанный и поддерживаемый Дарреном Хибертом до 2009 года. [5] изначально распространялся вместе с Vim , но после выпуска Vim 6 стал отдельным проектом. Он включает поддержку Emacs и etags совместимость. [6] [7]

Exuberant Ctags включает поддержку более 40 языков программирования с возможностью добавления поддержки еще большего количества с помощью регулярных выражений .

Универсальные теги

[ редактировать ]

Universal Ctags — это форк Exuberant Ctags, целью которого является продолжение его развития. Некоторые парсеры переписаны для лучшей поддержки языков. [8]

Языковой

[ редактировать ]

Hasktags создает файлы тегов, совместимые с ctags, для исходных файлов Haskell . [9] Он включает поддержку создания файлов etags Emacs. [10]

jsctags — это совместимое с ctags решение для индексации кода для JavaScript . [11] Он специализируется на JavaScript и использует систему упаковки CommonJS . Он превосходит Exuberant Ctags для кода JavaScript, обнаруживая больше тегов, чем последний. [12]

Теги форматов файлов

[ редактировать ]

Существует несколько форматов файлов тегов. Некоторые из них описаны ниже. В дальнейшем \ x## представляет байт в шестнадцатеричном представлении. ## . Каждая строка заканчивается переводом строки (LF, \ п = \ х0А ).

Ctags и потомки

[ редактировать ]

Исходные ctags и потомки Exuberant/Universal имеют схожие форматы файлов: [13]

Этот формат используется vi и различными его клонами. Файл тегов обычно называется «tags».

Файл тегов представляет собой список строк, каждая строка в формате:

{tagname}\t{tagfile}\t{tagaddress}

Поля указываются следующим образом:

  • {tagname } – Любой идентификатор, не содержащий пробелов.
  • \ t – Ровно одна вкладка ( \ x0b ) символ, хотя многие версии vi могут обрабатывать любое количество пробелов.
  • {tagfile } – имя файла, в котором {имя тега } определяется относительно текущего каталога
  • {tagaddress } — команда режима ex , которая перенаправит редактора к местоположению тега. POSIX Для реализаций vi это может быть только поиск или номер строки, что обеспечивает дополнительную защиту от произвольного выполнения команд.

Файл тегов сортируется по Поле {tagname }, позволяющее быстро искать файл тегов.

Расширенные Cтеги

[ редактировать ]

Этот формат используется Exuberant Ctags и Universal Ctags Vim . Эти программы могут генерировать исходный формат файла ctags или расширенный формат, который пытается сохранить обратную совместимость.

Файл расширенных тегов представляет собой список строк, каждая строка в формате:

{tagname}\t{tagfile}\t{tagaddress}[;"\t{tagfield...}]

Поля до и включительно {tagaddress } такие же, как и для ctags выше.

Необязательные дополнительные поля обозначаются квадратными скобками («[...]») и включают в себя:

  • ;" – точка с запятой + двойная кавычка: завершает {tagaddress } выглядит как начало комментария к vi или ex .
  • {tagfield } – поля расширения: пары «ключ: значение» разделены табуляцией для получения дополнительной информации.

Этот формат совместим с vi, отличным от POSIX , поскольку дополнительные данные интерпретируются как комментарий. Однако реализации POSIX vi должны быть изменены для его поддержки. [13]

Это формат, используемый etags Emacs . Файл тегов обычно называется «TAGS».

Файлы etags состоят из нескольких разделов — по одному разделу на каждый входной исходный файл. Разделы представляют собой обычный текст с несколькими непечатаемыми символами ASCII, используемыми для специальных целей. Эти символы представлены ниже в виде подчеркнутых шестнадцатеричных кодов.

Раздел начинается с двухстрочного заголовка (первые два байта составляют магическое число ):

\x0c
{src_file},{size_of_tag_definition_data_in_bytes}

За заголовком следуют определения тегов, по одному определению в строке, в формате:

{tag_definition_text}\x7f{tagname}\x01{line_number},{byte_offset}

{tagname} \x01 можно опустить, если имя тега можно вывести из текста определения тега.

Учитывая одну строку исходного кода test.c:

#define CCC(x)

Файл TAGS (etags) будет выглядеть так:

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

Файл тегов (ctags) может выглядеть так:

CCC(	test.c	1

или более гибко используя поиск:

CCC(	test.c	/^#define CCC(/

См. также

[ редактировать ]
  1. ^ «Протокол языкового сервера» . Документация CodeLite . Проверено 12 июня 2022 г.
  2. ^ «Aminet — dev/C/Ctags.lha» .
  3. ^ Символы рабочей области , Документация по коду Python для Visual Studio
  4. ^ etags.emacs(1) Linux по основным командам Руководство
  5. ^ «Буйные Ctags» . ctags.sourceforge.net .
  6. ^ «Документация Vim: версия 6: ctags-gone» . Проверено 28 апреля 2007 г.
  7. ^ etags.ctags(1) Linux по основным командам Руководство
  8. ^ «Документация по универсальным Ctags» . Проверено 2 августа 2018 г.
  9. ^ «Документация GHC: Другие служебные программы Haskell» . Проверено 5 марта 2010 г.
  10. ^ «hasktags: создает файлы ctags «tags» и etags «TAGS» для программ Haskell» . Проверено 5 марта 2010 г.
  11. ^ «Репозиторий pcwalton github для jsctags» . Гитхаб . Архивировано из оригинала 22 августа 2010 г. Проверено 10 сентября 2016 г.
  12. ^ Патрик Уолтон (25 мая 2010 г.). «Знакомство с jsctags» . Проверено 25 мая 2010 г.
  13. ^ Jump up to: а б «Предложение по расширенному формату файлов тегов Vi» . Проверено 30 июня 2007 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8f4b244fbe022915849962284389a544__1702145280
URL1:https://arc.ask3.ru/arc/aa/8f/44/8f4b244fbe022915849962284389a544.html
Заголовок, (Title) документа по адресу, URL1:
Ctags - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)