1

Можно ли переместить каретку в определенную позицию после выполнения кода?Как перемещать каретку в определенную позицию после выполнения исправления кода

Представьте себе следующий сценарий: - вблизи начало исходного кода, который я издаю, есть ошибка, что мой анализатор кода обнаруживает и основные моменты с красными каракулями - я редактирую файл так Выделенная ошибка выходит из отображаемый объем - с помощью колеса мыши я получаю вышеупомянутую ошибку - после наведения курсора появляется всплывающее окно ошибки с предлагаемым исправлением кода - после выполнения этого просмотра редактор возвращается к позиции каретки - я не могу немедленно увидеть результат выполнения кода

Решение заключается в перемещении позиции каретки в положение где произошло исправление кода. Однако я не могу найти способ.

+0

Я сомневаюсь, что это возможно, так как карет является функцией IDE, и диагностика должна быть агностикой IDE - это может быть также консольный проект или PCL. Я не мог найти существующую проблему на странице репо, поэтому вы всегда можете предложить ее сами: https://github.com/dotnet/roslyn/issues –

+0

Я не совсем согласен - похоже, не может найти причину диагностика должна быть IDE агностиком (вы имели в виду анализ кода в целом? Если это так, я согласен с вами). Напротив, вы не можете писать анализатор кода для других IDE, чем VS. Я не уверен, что это то, к чему должна обратиться команда Рослина. С моей точки зрения, это скорее общая вещь расширения Visual Studio (на стороне заметки, даже «собственные» исправления кода ведут себя одинаково). Однако, возможно, я не использовал подходящий набор тегов для моего вопроса. – MaSlo

+0

Ну, для начала диагностика может быть прекрасно использована в консольных приложениях или библиотеках классов. Возможно, вы могли бы что-то сделать с этим проектом Vsix, но у меня нет опыта в этой области. –

ответ

1

Если это расширение vsix, это должно закрыть вас как минимум.

IVsTextManager textManager = (IVsTextManager)GetService(typeof(SVsTextManager)); 
IVsTextView textView = null; 
textManager.GetActiveView(1, null, out textView); 
IComponentModel componentModel =(IComponentModel)GetService(typeof(SComponentModel)); 
Microsoft.VisualStudio.Text.Editor.IWpfTextView textView = componentModel.GetService<IVsEditorAdaptersFactoryService>().GetWpfTextView(textView); 

textView.Caret.MoveTo(/*lots of overrides*/); 
Смежные вопросы