Я хотел бы расширить плагин языка CDT для gnu c, чтобы создать на нем новый язык.Eclipse CDT расширяется для создания дополнительного языка
Новый язык должен иметь визуальное оформление в редакторе. Я хотел бы покрасить тело метода в серый цвет, если перед ним есть специальная предпроцессорная директива (например, аннотация).
Кто-нибудь знает, где расширить язык GCC для такой модификации?
EDIT1:
В качестве примера я хочу, чтобы цвет тела метода specialFunction быть серым, как причина примера аннотации ->#annotation
#annotation
int specialFunction(){
return 1;
}
EDIT2:
То, что я пробовал до сих пор, заключается в создании «расширенного языка». План состоял в том, чтобы выделить позицию препроцессора, а также сохранить позицию, чтобы следующий метод был окрашен. Мне удалось получить ключевое слово препроцессора, но не как работать с цветом тела метода.
public class OwnKeyWords extends GCCLanguage implements ICLanguageKeywords
@Override
public String[] getPreprocessorKeywords() {
//System.out.println("Called keywords" + timesPre++);
return new String[]{
"hide",
"show"
};
}
Пример должен быть окрашен:
#hide
int specialFunction(){
return 1;
}
В приведенном выше примере "шкуру" будет выделена.
EDIT3:
Я пытался реализовать ISemanticHighlighter и попробовал несколько способов, чтобы выделить свой код:
CVariable
CFunction
ObjectStyleMacro
...
, но не из них, где подходит, чтобы выделить метод тело директив препроцессора или что-то еще сверху.
Также примечание в ISemanticHighlighter:
* NOTE: Implementors are not allowed to keep a reference on the token or on any object retrieved from the
* token.
Не то, что я хочу достичь, потому что я хотел бы сохранить ссылку на выделенный объект для последующих операций.
Может быть, org.eclipse.cdt.ui.text.folding.DefaultCFoldingStructureProvider тоже будет вариантом, там я не могу покрасить прибор, я мог бы скрыть его.
Это очень широкий вопрос, который в настоящее время задан, поэтому я не могу дать полный ответ. Посмотрите на http://help.eclipse.org/mars/topic/org.eclipse.cdt.doc.isv/reference/extension-points/org_eclipse_cdt_core_language.html?cp=14_1_1_7 и как эта точка расширения используется в Сам CDT, чтобы определить вариант языка GCC или один из других подобных языков, таких как Qt. –
@JonahGraham уточнил вопрос –
«Не то, чего я хочу достичь, потому что я хотел бы сохранить ссылку на выделенный объект для последующих операций». - это не звучит правильно в любых отношениях, вы, как правило, во всех API-интерфейсах в CDT не допускаете ссылок на узлы AST. –