private static IEnumerable<SymbolSpan> GetSymbolSpans(SemanticModel semanticModel, SyntaxNode node)
{
switch (node.Kind)
{
case SyntaxKind.VariableDeclarator:
{
var expression = (VariableDeclaratorSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol, expression.Identifier.SourceRange, expression.Identifier.Span);
break;
}
case SyntaxKind.ClassType:
{
var expression = (ClassTypeSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.StructType:
{
var expression = (StructTypeSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null && expression.Name != null)
yield return SymbolSpan.CreateDefinition(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.InterfaceType:
{
var expression = (InterfaceTypeSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.IdentifierName:
{
var expression = (IdentifierNameSyntax) node;
var symbol = semanticModel.GetSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateReference(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.IdentifierDeclarationName:
{
var expression = (IdentifierDeclarationNameSyntax) node;
var symbol = semanticModel.GetSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.FieldAccessExpression:
{
var expression = (FieldAccessExpressionSyntax) node;
var symbol = semanticModel.GetSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateReference(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.MethodInvocationExpression:
{
var expression = (MethodInvocationExpressionSyntax) node;
var symbol = semanticModel.GetSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateReference(symbol, expression.Name.SourceRange, expression.Name.Span);
break;
}
case SyntaxKind.FunctionInvocationExpression:
{
var expression = (FunctionInvocationExpressionSyntax) node;
var symbol = semanticModel.GetSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateReference(symbol,
expression.Name.GetUnqualifiedName().Name.SourceRange,
expression.Name.GetUnqualifiedName().Name.Span);
break;
}
case SyntaxKind.FunctionDefinition:
{
var expression = (FunctionDefinitionSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol,
expression.Name.GetUnqualifiedName().Name.SourceRange,
expression.Name.GetUnqualifiedName().Name.Span);
break;
}
case SyntaxKind.FunctionDeclaration:
{
var expression = (FunctionDeclarationSyntax) node;
var symbol = semanticModel.GetDeclaredSymbol(expression);
if (symbol != null)
yield return SymbolSpan.CreateDefinition(symbol,
expression.Name.GetUnqualifiedName().Name.SourceRange,
expression.Name.GetUnqualifiedName().Name.Span);
break;
}
}
}