使用 CDT 为 Eclipse 插件中的某些符号禁用语法错误 "Symbol <id> could not be resolved"

Disable Syntax Error "Symbol <id> could not be resolved" for some symbols in Eclipse Plugin using CDT

在我的 eclipse 插件中,我想支持我的工具语言,它使用一些关键字和概念扩展了 C++。我的语言 class、编辑器 class 和源代码解析器 class 都继承了 C++ 的 CDT classes。我可以解析关键字并将它们的节点添加到 AST。但是我的一些keywords/commands编辑器总是标记为"Symbol could not be resolved".

示例: 有一个命令“@result” returns 最后一次计算的结果作为枚举值,该值在工具核心的某个头文件中定义。

typedef enum {
    OK = 0;
    WARNING = 1;
    ERROR = 2;
} errCode_t;

所以命令 @result returns 0、1 或 2。但是在编辑器中命令被标记为 Symbol '@result' could not be resolved。不,我想告诉索引器不要尝试解析这个标记。

在预处理器中 class 我可以将令牌类型从 IToken.tIDENTIFIER 更改为 50000。我试图通过它实现的是

if (token.getType() == 50000) {
    // don't try to resolve symbol
    return null;
} else {
    return super.resolveSymbol();
}

有办法吗?我认为我的第一个问题是我不明白谁或什么负责语法错误标记(也许是索引器?)。

Symbol ... could not be resolved 形式的错误是由 CDT 的代码分析组件产生的,特别是 ProblemBindingChecker,它遍历 AST 并报告任何 IASTName 的错误解析(通过 IASTName.resolveBinding())为 ProblemBinding.

只有 IASTName 节点解析为绑定,因此如果您的 @result 令牌收到此错误,则表明解析器正在为其构建 IASTName 节点.如果您更改了令牌类型,我不确定这是怎么发生的,我想这取决于您在扩展解析器中处理新令牌类型的方式。