10

ctags 有没有办法在 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 字段?一般有什么指针吗?

如果在 ctags 中没有办法做到这一点,有什么推荐的程序吗?(我目前正在看 unrustify)

4

4 回答 4

1

我的代码也有同样的问题,但我无法修改它。当我使用 --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, $/;" f 签名:( uint16 memory_ID, uint32 ** pt_data_address, uint32 nb_recover, uint32 * nb_copied, uint32 max_length )

于 2011-10-17T06:10:43.043 回答
1

--_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)
于 2017-02-16T17:28:10.407 回答
0

我无法使用 ctags 找到任何内容,因此我编写了一个 python 脚本来重新排列我的文件,以便 ctags 可以捕获原型。

注意:我的代码有注释,其中大部分内容都需要删除它们(否则它们会妨碍 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() + ' ')
于 2011-07-27T23:35:19.710 回答
-1

您可以使用简单的过滤器删除不需要的换行符,例如

 tr '\n' ' '  | sed 's/\([{};]\)/\1\n/g'
于 2011-07-25T19:32:08.300 回答