Встроенный редактор C#/VB.Net с intellisense — Roslyn, VSTA или что-то еще?

Мне нужно предоставить возможности сценариев в моем приложении, что позволит клиентам расширять его функциональность с помощью нашей объектной модели. Я надеялся предложить какой-то интегрированный редактор C#/VB.Net с intellisense, но после просмотра таких продуктов, как AvalonEdit и ScintillaNet, они, похоже, не обеспечивают истинное завершение кода, просто API, где вы можете предоставить свой собственный список элементов, которые будут отображаться во всплывающем списке автозаполнения.

Поэтому мне было интересно, предоставляет ли Roslyn какие-либо такие функции? Из руководств и примеров, с которыми я сталкивался, кажется, что Roslyn — это просто служба компилятора.

В крайнем случае клиенты могут использовать что-то вроде VS Express, но встроенный редактор явно лучше.

(Я также наткнулся на инструменты Visual Studio для приложений, которые звучали многообещающе; однако онлайн-ресурсам уже несколько лет, а документации/учебников не существует, поэтому я ничего не понял).


person Andrew Stephens    schedule 10.10.2012    source источник
comment
Этот вопрос может оказаться полезным: stackoverflow.com/questions/939841/   -  person Erik Funkenbusch    schedule 14.10.2012


Ответы (3)


Я конечно не специалист в этой области. Но поскольку других ответов вы не получили, я попробую.

Я думаю, что короткий ответ "да".

Глядя на код в AvalonEdit и SharpDevelop, кажется, что завершение кода — одна из самых сложных частей. По сути, вам нужно написать компилятор (или, во всяком случае, синтаксический анализатор), чтобы выяснить, какие элементы должны быть в списке завершения. Похоже, что Roslyn предоставляет инструменты для построения списка завершения. В более старых версиях эти инструменты были привязаны к редактору VS, но я видел заявления о том, что в последней версии они независимы. Если да, то эти инструменты будут очень полезны при реализации автозавершения кода.

На самом деле я вообще не вникал в детали, но собираюсь, так как у меня есть некоторые из тех же целей, что и у вас, и Рослин, похоже, будет полезно (исходя из того, что я знаю до сих пор, что не очень ).

person bubba    schedule 14.10.2012

Вы сделали очень интересное заявление о том, что «посмотрев на такие продукты, как AvalonEdit, SharpDevelop и ScintillaNet, они, похоже, не обеспечивают истинного интеллекта завершения кода». SharpDevelop — это полноценная IDE, и почему вы не находите «настоящее» завершение кода Intellisense? Вам придется предоставить какие-то доказательства, иначе это заявление будет недействительным.

То, чего вы хотите достичь, может быть достигнуто только с помощью двух важных компонентов:

  • Парсер языка, с помощью которого вы можете получить контекст и элементы для завершения кода. Это то, что предлагает Roslyn, но Roslyn еще недостаточно развита, чтобы анализировать весь существующий синтаксис C#. SharpDevelop (а также MonoDevelop) использует NRefactory. , который служит той же цели.

  • Элемент пользовательского интерфейса, поддерживающий подсветку синтаксиса. Этого можно добиться с помощью AvalonEdit или ScintillaNet в зависимости от выбранной вами среды пользовательского интерфейса.

Visual Studio Shell может оказать вам некоторую помощь, как указал @Mystere Man. Но лично я мало что знаю об этом.

person Lex Li    schedule 14.10.2012
comment
Я тоже так думал - мне не известны какие-либо недостатки автодополнения кода в SharpDevelop. - person bubba; 15.10.2012
comment
Это может быть полезно: социальный .msdn.microsoft.com/Forums/en-US/roslyn/thread/ - person bubba; 15.10.2012
comment
Спасибо за ответ и извинения - я по ошибке упомянул SharpDevelop и теперь удалил его. - person Andrew Stephens; 15.10.2012

Я очень старался использовать один из этих встроенных компонентов, но в итоге реализовал его сам. После дня изучения API RichTextBox вы можете с комфортом создать эту поддержку. Просто поиграйте с PreviewKeyDown/Up, убедитесь, что партия работает с поддержкой отмены и т.д.

person hammett    schedule 18.12.2012