Как динамически добавлять слова завершения в расширение синтаксиса VS2013 (MEF)

Очень возможно, что я просто не понимаю проблемное пространство, но у меня возникли проблемы с определением MEF (проект редактора классификатора).

Я создал (собрал по кусочкам пошаговые руководства из MSDN https://msdn.microsoft.com/en-us/library/ee197665.aspx) — средство выделения синтаксиса для языка хранимых процедур Informix.

У меня есть одна серьезная проблема: я хочу иметь возможность найти все экземпляры ключевого слова «DEFINE» и заполнить слово, непосредственно следующее за ним, в имеющееся у меня расширение «Завершение оператора» (в настоящее время оно заполняется из определенного списка слов).

Подобно встроенной поддержке C# — когда вы определяете переменную, она становится доступной в раскрывающемся списке автозаполнения.

Я избавился от жесткого кодирования в классе (из пошагового руководства), и мои слова завершения определены следующим образом:

List<Completion> completions = new List<Completion>();

CompletionTags completionTags = new CompletionTags();

foreach (string completionTag in completionTags.completionTags)
{
    completions.Add(new Completion(completionTag));
};

Мой класс CompletionTags довольно прост:

класс CompletionTags { общедоступный список завершенных тегов;

public CompletionTags()
{
    this.completionTags = new List<string> {
        // SQL keywords
        "COUNT",
        "FROM",
        "HAVING",
    };
}

Я знаю, ЧТО мне нужно делать. Мне как-то нужно захватить буфер, когда он изменится, найти все вхождения «DEFINE ([a-zA-Z0-9_] {1,})» и добавить \1 в список завершения.

Я понятия не имею, КАК это сделать. Любые указатели в правильном (или любом) направлении на этом этапе будут очень признательны.

Будьте добры - мы все были не в своей тарелке на каком-то этапе (я программирую на C# уже 3 дня)...


person Trent    schedule 15.05.2015    source источник
comment
Мне удалось заставить это работать, превратив класс CompletionTags в синглтон, а затем я взломал классификатор подсветки синтаксиса, чтобы проверить определения и добавить в список завершения. Я ЗНАЮ, что это неправильный способ сделать это, поэтому вопрос остается в силе.   -  person Trent    schedule 15.05.2015


Ответы (1)


Чтение этот ответ будет полезно. Смотреть на:

Функции IntelliSense редактора XML

Кэш схемы

person Aly Elhaddad    schedule 24.05.2015