[英]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.