CTAGSマルチラインC関数プロトタイプ
-
26-10-2019 - |
質問
CTAGがCのマルチライン関数プロトタイプを処理する方法はありますか?
私は回りました --fields=+S
マルチラインプロトタイプを行うことになっていますが、私はそれを機能させることはできません:
ctags -x --c-kinds=pf --fields=+S file
ファイル:
int
foo(int
x, int y
);
ctagsは返すだけです:
foo(int
(リターンタイプも欠落していることに注意してください)
最終的に、私は次のような出力を取得したいと思います
int foo(int x, int y);
また
int foo(int x, int y
は --fields=+S
正しい方法ではありませんか? CTAGSフィールドの一部はありませんか?一般的なポインターはありますか?
CTAGでそれを行う方法がない場合、推奨されるプログラムはありますか? (私は現在Uncrustifyを見ています)
解決 2
CTAGSで何も見つからなかったので、CTAGがプロトタイプをキャプチャできるように、ファイルを再アレンジするPythonスクリプトを書きました。
注:私のコードにはコメントがあり、これの多くはそれらを削除することに注意してください(そうでなければ、それらはctagsの邪魔になります)。
この順序で操作が行われました。
# 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)
# strip everything
for index in range(len(file_as_list)):
file_as_list[index] = file_as_list[index].strip()
# 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 stripped line
write_to.write(line.strip() + '\n')
else:
# append a space to the stripped line
write_to.write(line.strip() + ' ')
他のヒント
コードと同じ問題がありましたが、変更できませんでした。 -fields =+sパラメーターを使用すると、タグファイルに追加の行があるため、動作するようです。署名:パーツには、関数のすべてのパラメーターが含まれています。
copytotx26 d: bisel my dropbox work 0_bsw pkg_cmd memory.c /^void copytotx26(uint16 memory_id、uint32 ** pt_data_address、uint32 nb_recover、$ /; " uint32 nb_recover、uint32 * nb_copied、uint32 max_length)
-_ XFormatオプションが役立つ場合があります。
[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)
単純なフィルターで不必要なラインブレークを削除できます。
tr '\n' ' ' | sed 's/\([{};]\)/\1\n/g'