使用clang从标准输入实现自动补全

4
我已在Emacs中为自动补全设置了一个环境,使用clang 2.8作为解析器。它运行良好,但是需要在补全之前将当前编辑的缓冲区保存到文件中。这样很慢,因此我正在尝试让clang通过stdin解析给定的文件,但是目前还没有成功。
当解析文件时,我输入的命令行如下:
clang -cc1 -fsyntax-only -Iinclude/ -code-completion-at foo.cpp:10:20 foo.cpp

这个很有效。但是尝试从stdin读取失败了。我试过这个:
cat foo.cpp | clang -xc++ -cc1 -fsyntax-only -Iinclude/ -code-completion-at -:10:20 -

但这会导致clang在不做任何完成的情况下终止,并打印警告:
clang: warning: argument unused during compilation: '-cc1'
clang: warning: argument unused during compilation: '-code-completion-at'
clang: warning: argument unused during compilation: '-:10:20'

有什么想法吗?
1个回答

1

如果你在-x c++之前指定-cc1,它能正常工作吗?


嗯,不是的,但错误信息不同了。现在它只是简单地显示“致命错误:无法找到代码完成文件 -”。 - Hnefi
很不幸,如果我使用 clang -cc1 -x c++ -fsyntax-only -code-completion-at -:7:15 - <test.cc 就可以正常工作。顺便说一下,这是Clang 2.0版本。 - Hugh
啊,该死。我刚刚尝试了一个新构建的clang trunk的HEAD修订版,它可以工作。典型的是,这意味着我的操作系统内置版本将无法工作。感谢您为我澄清事情。 - Hnefi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接