Eclipse CDT 的索引器是否仅限于源文件和 headers 的常见文件类型?

Is Ecplise CDT's indexer limited to the common filetypes for sources and headers?

我正在做一个涉及 TOM 文件(.t 扩展名)的项目,这些文件被编译成 .c 文件。现在,我已经告诉我的 Eclipse 像对待 C 源文件一样对待它们,但是 CDT 索引器似乎不想触及它们。是否可以告诉它考虑其他文件类型?

注意:TOM 文件看起来就像 C 文件,但有一些额外的语法,这看起来就像索引器某些行上的语法错误。

最简单的方法是定义一个新关联。要在您的项目上执行此操作,请打开 Project Properties -> C/C++ General -> File Types,然后 select Use Project Settings 并定义一个新扩展名:

您也可以在工作区级别定义它,Window -> Preferences -> C/C++ -> File Types

这应该能满足您的大部分需求。例如,(我其实不认识TOM),我有一个简单的项目,有1个C文件,1个H文件和1个T文件。您想要和期望的所有功能 都能正常工作:

如果你想要更多

如果您想要更多,这可以做到,但必须编写您自己的 Eclipse 插件,该插件对 *.t 文件有一点了解。幸运的是,只需要几行XML。到此结束时,您应该得到与上面基本相同的功能,但您有一个开始创建您自己的 TOM 插件的起点。

您需要做的是通过扩展 org.eclipse.core.contenttype.contentTypes extension point (there is also some older docs that gave a run through)

来定义内容类型

在您的 plugin.xml 中,这看起来像:

   <extension point="org.eclipse.core.contenttype.contentTypes">
      <!-- declares a content type for TOM source files -->
      <content-type id="tSource" name="TOM File"
         base-type="org.eclipse.core.runtime.text"
         file-extensions="t"
         priority="high"/>
    </extension>

您可以考虑制作 base-type 纯文本以外的内容,例如你可以做到 org.eclipse.cdt.core.cSource.

然后你需要定义一个新的语言,为了我们的目的叫做TOM Language。您可以使用 org.eclipse.cdt.core.language extension point.

这可能看起来像的一个例子是:

   <extension
         point="org.eclipse.cdt.core.language">
      <language
            class="org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage"
            id="com.kichwacoders.tom.core.tomlanguage"
            name="TOM Language">
         <contentType
               id="com.kichwacoders.tom.core.tSource"></contentType>
      </language>
   </extension>

class、GCCLanguage是标准的GCC之一。当然,如果您想进一步改进支持,添加或自定义解析器是一个选项(以删除有关 tom 东西的那些语法错误),您可以扩展 GCCLanguage 或层次结构中的其他 classes 之一。

完成所有这些并将新插件添加到 Eclipse 安装后,您将获得 TOM 文件支持。

如果您已经阅读到最后,您可能会发现简单地 fork 包含上述所有代码的 https://github.com/jonahkichwacoders/com.kichwacoders.tom.core 很有用?