Ctags: Comment analyser le nom de balise et le type à partir de la sortie de ctags -R -x

Créé le 12 mars 2019  ·  8Commentaires  ·  Source: universal-ctags/ctags


Le nom de l'analyseur : n'importe lequel

La ligne de commande que vous avez utilisée pour exécuter ctags :

$ ctags --options=NONE -R -x

Le contenu du fichier d'entrée :

$ git clone https://github.com/liuchengxu/vista.vim
$ cd vista.vim
$ ctags --options=NONE -R -x

La sortie des balises dont vous n'êtes pas satisfait :

Je ne sais pas comment analyser la sortie de ctags -R -x . Je veux filtrer le tagname et la portée de la sortie de ctags -R -x , mais je ne sais pas comment faire correctement.

La sortie des balises que vous attendez :

C'est viable s'il y a aussi un format spécifique pour ctags -R :

{tagname}<Tab>{tagfile}<Tab>{tagaddress}[;"<Tab>{tagfield}..]

La version de ctags :

$ ctags --version
Universal Ctags 0.0.0(1208e45), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 11 2019, 17:01:27
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +case-insensitive-filenames, +packcc

Comment obtenez-vous le binaire ctags :

brew install ctags sur macOS

Tous les 8 commentaires

Je ne comprends pas votre question.

Êtes-vous satisfait de la sortie de ctags -R ? Si oui, pourquoi n'utilisez-vous pas l'option -x ?
J'aimerais en savoir plus sur le contexte du cas d'utilisation pour répondre à votre question.

Je ne connais pas le script vim. Cependant, en ce qui concerne la lecture de vim.c, l'analyseur vim de ctags, il ne remplit pas les champs de portée. Si vous pensez qu'il s'agit d'un bogue, dites-nous que l'analyseur vim remplit le champ de portée pour quel type d'entrée.

Désolé de ne pas avoir été clair.

pourquoi utiliser l'option -x ?

Bien que ctags -R réponde à mes besoins, je ne veux pas générer le fichier de balises, j'utilise donc l'option -x .

mon cas d'utilisation.

Actuellement, vista.vim ne prend en charge que l'affichage des balises dans certains fichiers, mais certains utilisateurs souhaitent afficher toutes les balises d'un projet (https://github.com/liuchengxu/vista.vim/issues/14). J'ai essayé d'ajouter le support ctags -R , mais je ne sais pas comment extraire correctement ces sorties.

En un mot, comment extraire vista#util#Trim , function , 18 , autoload/vista/util.vim , vista#util#Trim(str) respectivement ?

ctags -R -x :

...
vista#util#Trim  function     18 autoload/vista/util.vim function! vista#util#Trim(str)
vista#util#Truncate function     13 autoload/vista/util.vim function! vista#util#Truncate(msg) abort
vista#util#Warning function     90 autoload/vista/util.vim function! vista#util#Warning(msg) abort
vista#viewer#Display function     90 autoload/vista/viewer.vim function! vista#viewer#Display(data) abort
vista#viewer#Render function     86 autoload/vista/viewer.vim function! vista#viewer#Render(data) abort
vista#viewer#prefixes function     94 autoload/vista/viewer.vim function! vista#viewer#prefixes() abort

Avec l'option -o - , ctags émet la sortie vers stdout comme :

[yamato@slave]/tmp/vista.vim% u-ctags -R -o - | head 
/   ftplugin/vista.vim  /^nnoremap <buffer> <silent> \/    :<c-u>call vista#finder#fzf#Run()<CR>$/;"    m
<CR>    ftplugin/vista.vim  /^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/;"  m
Commands    README.md   /^### Commands$/;"  S
Contributing    README.md   /^## Contributing$/;"   s
Features    README.md   /^## Features$/;"   s
Installation    README.md   /^## Installation$/;"   s
Introduction    README.md   /^## Introduction$/;"   s
License README.md   /^## License$/;"    s
NeoVim  README.md   /^#### NeoVim$/;"   t
Options README.md   /^### Options$/;"   S

Vous pouvez personnaliser la sortie avec l'option --_xformat= :

 u-ctags -R -x --_xformat='TAGNAME:%N @@@ KIND:%K !!! LINE:%n +++ INPUT-FILE:%F === PATTERN:%P' | head
TAGNAME:/ @@@ KIND:map !!! LINE:38 +++ INPUT-FILE:ftplugin/vista.vim === PATTERN:/^nnoremap <buffer> <silent> \/    :<c-u>call vista#finder#fzf#Run()<CR>$/
TAGNAME:<CR> @@@ KIND:map !!! LINE:37 +++ INPUT-FILE:ftplugin/vista.vim === PATTERN:/^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/
TAGNAME:Commands @@@ KIND:subsection !!! LINE:101 +++ INPUT-FILE:README.md === PATTERN:/^### Commands$/
TAGNAME:Contributing @@@ KIND:section !!! LINE:164 +++ INPUT-FILE:README.md === PATTERN:/^## Contributing$/
TAGNAME:Features @@@ KIND:section !!! LINE:37 +++ INPUT-FILE:README.md === PATTERN:/^## Features$/
TAGNAME:Installation @@@ KIND:section !!! LINE:69 +++ INPUT-FILE:README.md === PATTERN:/^## Installation$/
TAGNAME:Introduction @@@ KIND:section !!! LINE:25 +++ INPUT-FILE:README.md === PATTERN:/^## Introduction$/
TAGNAME:License @@@ KIND:section !!! LINE:168 +++ INPUT-FILE:README.md === PATTERN:/^## License$/
TAGNAME:NeoVim @@@ KIND:subsubsection !!! LINE:90 +++ INPUT-FILE:README.md === PATTERN:/^#### NeoVim$/
TAGNAME:Options @@@ KIND:subsection !!! LINE:113 +++ INPUT-FILE:README.md === PATTERN:/^### Options$/

Voir http://docs.ctags.io/en/latest/news.html?highlight=--_xformat#customizing -xref-output .

Si vous ne voulez pas écrire d'analyseur, --output-format=json peut être un choix :

u-ctags -R --output-format=json | head
{"_type": "tag", "name": "/", "path": "ftplugin/vista.vim", "pattern": "/^nnoremap <buffer> <silent> \\/    :<c-u>call vista#finder#fzf#Run()<CR>$/", "kind": "map"}
{"_type": "tag", "name": "<CR>", "path": "ftplugin/vista.vim", "pattern": "/^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/", "kind": "map"}
{"_type": "tag", "name": "Commands", "path": "README.md", "pattern": "/^### Commands$/", "kind": "subsection"}
{"_type": "tag", "name": "Contributing", "path": "README.md", "pattern": "/^## Contributing$/", "kind": "section"}
{"_type": "tag", "name": "Features", "path": "README.md", "pattern": "/^## Features$/", "kind": "section"}
{"_type": "tag", "name": "Installation", "path": "README.md", "pattern": "/^## Installation$/", "kind": "section"}
{"_type": "tag", "name": "Introduction", "path": "README.md", "pattern": "/^## Introduction$/", "kind": "section"}
{"_type": "tag", "name": "License", "path": "README.md", "pattern": "/^## License$/", "kind": "section"}
{"_type": "tag", "name": "NeoVim", "path": "README.md", "pattern": "/^#### NeoVim$/", "kind": "subsubsection"}
{"_type": "tag", "name": "Options", "path": "README.md", "pattern": "/^### Options$/", "kind": "subsection"}

Merci! J'essaierais l'option --_xformat= , puisque ctags installé par brew ne prend pas en charge --output-format=json par défaut, que ce soit brew install ctags ou brew install --HEAD universal-ctags/universal-ctags/universal-ctags .

@KazuakiM , n'est-il pas possible de lier les ctags à libjansson.so.4 ?
u-ctags a le mode de sortie json. Il est disponible si u-ctags est lié à libjansson.
Dites-moi si je dois signaler cela comme un nouveau problème sur le référentiel homebrew-universal-ctags.

@liuchengxu , fichier de balises, le format natif de ctags peut être analysé avec des fonctions dans readtags.c.
commande readtags et python-ctags3, une bibliothèque python utilise readtags.c.

@masatake
Salut, homebrew-universal-ctags supporte jansson.

$ brew info universal-ctags
universal-ctags/universal-ctags/universal-ctags: HEAD
Maintained ctags implementation
https://github.com/universal-ctags/ctags
Conflicts with:
  ctags (because this formula installs the same executable as the ctags formula)
/usr/local/Cellar/universal-ctags/HEAD-1b747b3 (325 files, 4.3MB) *
  Built from source on 2019-02-02 at 16:45:17
From: https://github.com/universal-ctags/homebrew-universal-ctags/blob/master/universal-ctags.rb
==> Dependencies
Build: autoconf ✔, automake ✔, pkg-config ✔
Optional: jansson ✔, libyaml ✔
==> Options
--with-jansson
        Build with jansson support
--with-libyaml
        Build with libyaml support
--without-doc
        Compile without man pages
--without-xml
        Compile without libxml2
--HEAD
        Install HEAD version
==> Caveats
Under some circumstances, emacs and ctags can conflict. By default,
emacs provides an executable `ctags` that would conflict with the
executable of the same name that ctags provides. To prevent this,
Homebrew removes the emacs `ctags` and its manpage before linking.
However, if you install emacs with the `--keep-ctags` option, then
the `ctags` emacs provides will not be removed. In that case, you
won't be able to install ctags successfully. It will build but not
link.

@KazuakiM Bonne prise, j'ai raté l'aide. La prise en charge de JSON nécessite l'option --with-jansson .

$ brew reinstall --with-jansson universal-ctags/universal-ctags/universal-ctags
Cette page vous a été utile?
0 / 5 - 0 notes