質問

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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top