簡體   English   中英

在帶有CDT的eclipse插件中使用自己的CodeFormatter

[英]Use own CodeFormatter in eclipse plugin with CDT

我正在嘗試使用擴展點org.eclipse.cdt.core.CodeFormatter但它似乎沒有任何作用。 不幸的是我找不到任何例子。 擴展點描述不是很全面。

我的plugin.xml看起來像這樣:

<extension
     point="org.eclipse.cdt.core.CodeFormatter">
  <codeFormatter
        class="de.verified.rtt.ide.editors.rts.RTTLCodeFormatter"
        id="de.verified.rtt.ide.editors.rts.codeformatter"
        name="RTTL Code Formatter">
  </codeFormatter>

此擴展程序位於頂層。 也許它必須包含某種語言,文件關聯,透視圖或其他內容?

詳細問題描述:

在我的插件中,我使用了一種通過一些關鍵字和概念擴展C ++的語言。 為了解析該文件,我正在編寫自己的擴展GNUCPPParser的Source Parser。 目前,我的解析器為CDT未知的令牌創建了標准的IASTDeclarations。 例如,對於“ @rttConcept {...}”,我的解析器使用“ ICPPASTNamespaceDefinition”,因為@rttConcept類似於命名空間定義。 現在使用“ @rttConcept”不再在編輯器中創建語法錯誤突出顯示。 嘗試使用CodeFormatter格式化此代碼時,將引發異常

org.eclipse.cdt.internal.formatter.AbortFormatting:[1/1]意外的令牌類型,期望:91,實際:令牌類型= 1006 image = @ offset = 0,位於org.eclipse.cdt.internal.formatter.Scribe。 printNextToken(Scribe.java:1653)

檢查一下NamespaceDefinition是否真的對應於代碼中的令牌“ namespace”,而不是它。 我只想使用自己的CodeFormatter來捕獲AbortFormatting異常:

@SuppressWarnings("restriction")
public class MyCodeFormatter extends CCodeFormatter {

    public static final String ID = "de.blub.rtt.ide.editors.rts.codeformatter";

    @Override
    public TextEdit[] format(int kind, String source, IRegion[] regions, String lineSeparator) {
        try {
            return super.format(kind, source, regions, lineSeparator);            
        } catch(AbortFormatting ex) {
            return null;
        }
    }
}

聲明在格式化plugin.xml只是使它提供格式。

如果要將其用作當前格式器,則必須在首選項UI(“首選項”->“ C / C ++”->“代碼樣式”->“格式器”)中進行選擇,應該有一個下拉列表,其中格式器的名稱是其中之一。選項)。

(以上選擇會影響整個工作空間。您還可以在“項目屬性”->“ C / C ++常規”->“格式化程序”中按項目選擇格式化程序。)

也就是說,請注意greywolf82評論中的警告。


更新 :要回答您的評論,是的,我相信可以通過CDT的公共API以編程方式更改當前的格式化程序。 我希望可以進行以下操作:

HashMap<String, String> options = CCorePlugin.getOptions();
options.put(CCorePreferenceConstants.CODE_FORMATTER,
            "de.verified.rtt.ide.editors.rts.codeformatter");
CCorePlugin.setOptions(options);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM