Roslyn: Учитывая исходное местоположение / линию, как выяснить, можно ли и где установить точку останова

Я работаю над редактором кода, используя Roslyn и, для отладки, MDbg.

В редакторе я стремлюсь к визуальному студийному поведению для установки точек останова. То есть пользователь может нажать на строку, и мне нужно будет выяснить,

  1. Это исходное местоположение, в котором я могу установить точку останова?
  2. если это так, в какой строке должна быть установлена ​​точка останова?

Например, предполагая, что у пользователя есть такой документ:

line 01:  using System;
line 02: 
line 03:  public class SomeClass
line 04:  {
line 05:   public string someMethod()
line 06:   {
line 07:     return @"
line 08:       abcdefg
line 09:     ";
line 10:   }
line 11:  }

При нажатии на строку 1 ничего не должно происходить - невозможно установить точку останова для оператора using.

При щелчке по строке 3 он должен установить точку останова в строке 4 (не может установить точку останова в самом определении метода, а скорее в маркере начальной скобки, где начинается выполнение метода).

При щелчке на строке 7, 8 или 9 он должен установить точку останова на строке 7, поскольку это всего лишь одно утверждение.

Если честно, на данный момент у меня даже нет идей, как к этому подойти вообще. У кого-нибудь есть указания, как подходить к этому концептуально? Я надеялся, что у Roslyn есть несколько полезных вспомогательных методов, но я не нашел много в его источнике, связанном с точками останова

Просто повторюсь, основной вопрос, я думаю, сводится к выяснению

  1. определенная строка в коде - это место, в котором я могу установить точку останова?
  2. если это так, в какой строке должна быть установлена ​​точка останова?

Спасибо!

1 ответ

Решение

Как указано в комментарии, это именно то, что вам нужно: http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices.CSharp/Debugging/CSharpBreakpointResolutionService.cs,6a9951745157788a

Другие вопросы по тегам