ctags prototypes de fonctions C multilignes

Est-ce que ctags peut gérer les prototypes de fonctions multilignes en C?

J’ai cherché autour et le --fields=+S est supposé faire des prototypes multilignes, mais je n’arrive pas à le faire fonctionner:

 ctags -x --c-kinds=pf --fields=+S file 

fichier:

 int foo(int x, int y ); 

Les balises ctags ne renvoient que:

 foo(int 

(Notez que le type de retour est également manquant)

En fin de compte, je voudrais obtenir une sortie similaire à

 int foo(int x, int y); 

ou

 int foo(int x, int y 

--fields=+S n’est-il pas correct? Y a-t-il une partie des champs ctags qui me manque? Des pointeurs en général?

S’il n’y a pas moyen de le faire en ctags, des programmes recommandés? (Je suis en train de regarder uncrustify)

J’ai eu le même problème avec mon code mais je ne pouvais pas le modifier. Lorsque j’utilise le paramètre –fields = + S, cela semble fonctionner car j’obtiens une ligne supplémentaire dans le fichier de balise. La signature: la partie contient tous les parameters de la fonction.

CopyToTX26 D: \ BiseL \ My Dropbox \ Work \ 0_BSW \ PKG_CMD \ Memory.c / ^ void CopyToTX26 (uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, $ /; “f signature 🙁 uint16 memory_ID, uint32 ** uint32 nb_recover, uint32 * nb_copied, uint32 max_length)

Je ne pouvais rien trouver avec les ctags, j’ai donc écrit un script python pour réorganiser mon fichier afin qu’il puisse capturer les prototypes.

Remarque: mon code contenait des commentaires et une grande partie de cela prend soin de les supprimer (sinon ils gêneraient les balises).

Les manipulations ont été effectuées dans cet ordre:

 # concat to one line file_str = '' for line in read_from.readlines(): file_str += line # remove all /* */ comments file_str = re.sub('/\*(.|[\r\n])*?\*/', '', file_str) # remove '//' comments file_str = re.sub('//.*', '', file_str) # split on '\n' file_as_list = file_str.splitlines(True) # ssortingp everything for index in range(len(file_as_list)): file_as_list[index] = file_as_list[index].ssortingp() # add in newlines where appropriate for line in file_as_list: # if the line ends in ';' or '}' if line.endswith(';') or line.endswith('}'): # append a newline to the ssortingpped line write_to.write(line.ssortingp() + '\n') else: # append a space to the ssortingpped line write_to.write(line.ssortingp() + ' ') 

L’option –_ xformat peut vous aider.

 [jet@localhost ~]$ cat /tmp/foo.h int foo(int x, int y ); [jet@localhost ~]$ ~/var/ctags/ctags -x --c-kinds=pf --_xformat="%-16N %4n %-16F %C %S" /tmp/foo.h foo 2 /tmp/foo.h foo(int (int x,int y) 

Vous pouvez supprimer les sauts de ligne inutiles avec un simple filtre, par exemple

  tr '\n' ' ' | sed 's/\([{};]\)/\1\n/g'