Roslyn Diagnostic Analzyer — подчеркивание только параметра атрибутаC#

Место общения программистов C#
Ответить
Anonymous
 Roslyn Diagnostic Analzyer — подчеркивание только параметра атрибута

Сообщение Anonymous »

Я создал диагностический анализатор, который сообщает о различных проблемах с настраиваемыми атрибутами свойств. Однако у меня возникли проблемы с определением местоположения только атрибута и/или аргументов атрибута (в зависимости от конкретной диагностики).
Поскольку есть (на данный момент) два атрибута, которые необходимо указать. для анализа я создал вспомогательный метод, который определяет, существует ли атрибут в свойстве:

Код: Выделить всё

private static bool HasAttribute(SyntaxNodeAnalysisContext context, string attributeName, out PropertyAttributeData data)
{
var propertyDeclarationSyntax = (PropertyDeclarationSyntax)context.Node;

data = new PropertyAttributeData
{
Type = propertyDeclarationSyntax.Type
};

var propertyAttribute = propertyDeclarationSyntax.AttributeLists.FirstOrDefault()
?.GetAttributes(context.Compilation)
?.FirstOrDefault(attr => attr.AttributeClass?.Name == attributeName);

if (propertyAttribute == null)
{
return false;
}

data.AttributeData = propertyAttribute;
data.ConstructorArg1 = propertyAttribute.ConstructorArguments.FirstOrDefault();
if (propertyAttribute.ConstructorArguments.Length > 1)
{
data.ConstructorArg2 = propertyAttribute.ConstructorArguments.Skip(1).FirstOrDefault();
}

return true;
}
Однако здесь я как бы застреваю. Я использовал context.Node.GetLocation в целях тестирования, но это подчеркивает атрибут и свойство. Я также пробовал использовать SemanticModel.GetSymbolInfo() и SemanticModel.GetDeclaredSymbol(), а также некоторые другие вещи. Однако местоположение, которое я получаю, находится либо от начала атрибута до конца файла, либо сообщает исходное местоположение атрибута (в отдельной библиотеке).
Как я бы пошел на получение местоположения только атрибута или первого/второго аргумента it? Любые рекомендации будут оценены по достоинству. ТИА.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»