考虑到基于 C++ 的源代码,我正在寻找一种可以输出带有/不带有接口的纯文本方法列表的工具,这意味着 2 个选项,只有方法的名称或完整的接口签名。
我也想将其应用于 C 中的源代码。
谢谢。
使用 Doxygen 的 XML 格式和一个小 Python 脚本来解析它,可以轻松构建一个合理的解决方案。Doxygens XML 输出没有很好的文档记录,但看起来相当完整。
这是我的python脚本:
import lxml.etree
import glob
prefix = "/Code/stack_overflow_examples/list_functions_by_doxygen/"
for filename in glob.glob("xml/*.xml"):
f = open( filename, "r" )
xml = lxml.etree.parse(f)
for x in xml.xpath('//memberdef[@kind="function"]'):
srcfile = x.xpath('.//location/@file')[0].replace(prefix,'')
srcline = x.xpath('.//location/@line')[0]
definition = x.xpath('.//definition/text()')[0]
args = x.xpath('.//argsstring/text()')[0]
print( "%s:%s: %s%s" % ( srcfile, srcline, definition, args) )
在此文件上运行时:
/**
* This is a test function.
*/
int a_function( Baz & b )
{
return 7;
}
void another_function( Boo & b )
{
}
class Foo
{
private:
int a_private_member_function();
public:
int a_public_member_function();
};
它生成以下输出:
test.cpp:16: int Foo::a_private_member_function()
test.cpp:18: int Foo::a_public_member_function()
test.cpp:5: int a_function(Baz &b)
test.cpp:10: void another_function(Boo &b)
您只需要对用于生成“文档”的 Doxyfile 进行一些更改。这是我使用的更改:
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_METHODS = YES
EXTRACT_ANON_NSPACES = YES
CASE_SENSE_NAMES = YES
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_XML = YES
根据 Jonathan Wakely 的评论,您可以像这样使用ctags:
ctags -x --c-types=f --format=1 file.c
它将列出您的功能:
celsjusz2Fahrenheit 17 file.c double celsjusz2Fahrenheit(double celsjuszDegree)
celsjusz2Kelwin 21 file.c double celsjusz2Kelwin(double celsjuszDegree)
main 44 file.c int main()
如果要列出按类名处理的方法,可以使用:
ctags -x --c++-types=f --extra=q --format=1 file.cc
它将打印例如:
S::f 9 file.cc void f()
S::f1 11 file.cc void f1()
S::f2 13 file.cc void f2()
celsjusz2Fahrenheit 17 file.cc double celsjusz2Fahrenheit(double celsjuszDegree)
celsjusz2Kelwin 21 file.cc double celsjusz2Kelwin(double celsjuszDegree)
编辑(由于评论): Args 意味着(复制自ctags --help
):
-x
- 将表格交叉引用文件打印到标准输出。--extra=q
- 添加额外的标志,其中q
的意思是“为每个标签包括一个额外的类限定标签条目”--format=1
- 强制输出指定的标签文件格式