-2

sigaction completion

As you can see above, youcompleteme can not correctly complete sigaction struct which may have the following members(Of course I know that the sa_restorer element is obsolete and should not be used):

sigaction members

So, is there anything wrong with my youcompleteme? How to make it work correctly?

Note:What I really want to ask is why can't youcompleteme show me more members of sigaction like sa_hander for me but just sa_restorer,sa_mask and sa_flags.

4

1 回答 1

1

仔细阅读signal(7)signal-safety(7)sigaction(2)sa_restorer已过时,您被禁止使用它。

如何使其正常工作?

所以YouCompleteMe没有显示它是正确的(而且很聪明!)。

(您的问题应该是:“YouCompleteMe 如何足够聪明地隐藏sa_restorer?”)

sa_restorer更有趣的问题是为什么它显然出现在 eg中时没有显示它/usr/include/x86_64-linux-gnu/bits/sigaction.h,但这是一个不同的问题(我不知道它的答案)。如果你完成了特定的标准函数(例如,有一些关于它们的配置文件),我不会感到惊讶。BTW YouCompleteMe免费软件开源软件,因此您可以研究它的源代码

sa_restoreris的类型__sigrestore_t(参见/usr/include/asm-generic/signal.h参考资料)和以下划线开头的标识符保留给实现,不应由用户代码使用,因此 YouCompleteMe 可能会跳过此类字段或数据。这只是一个猜测。请自己查看YouCompleteMe源代码(也许还有其他工具的代码,例如libclang,它使用的)。

我真正想问的是为什么你不能完成我向我展示更多像 sa_handler 这样的 sigaction 成员

在我的 Linux 系统上,sa_handler是一个宏,因为/usr/include/x86_64-linux-gnu/bits/sigaction.h(内部包含自<signal.h>)包含:

 # define sa_handler    __sigaction_handler.sa_handler

如果 YouCompleteMe 不在完成菜单中显示所有宏,我不会感到惊讶。他们太多了!这(只是一个猜测)可以解释为什么sa_handler没有明确建议完成。

(也许如果您键入siga.sa_完成者可能会更明智并提出建议 sa_handler ,但我没有尝试)

struct sigaction只是文档告诉的。实际的实现更为复杂。如果您想了解,请研究它,然后改进 YouCompleteMe 的行为。YouCompleteMe提出一个补丁(通过几周或几个月的工作)以改善其行为。

YouCompleteMe 上的未来补丁可能会专门处理以下划线开头的标识符和使用它们的预处理器宏。这是一个有趣的项目,但可能需要几个月的时间。

于 2017-09-04T05:12:13.783 回答