Пример #1
0
 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;
         }
     }
 }