public static IEnumerable GetAvailableValueSymbols()

in dotnet/CSharpSourceGraphExtraction/Utils/RoslynUtils.cs [189:221]


        public static IEnumerable<ISymbol> GetAvailableValueSymbols(SemanticModel semanticModel, SyntaxToken token)
        {
            var allSymbols = semanticModel.LookupSymbols(token.SpanStart);
            foreach (var symbol in allSymbols)
            {
                if (symbol.Kind == SymbolKind.Local)
                {
                    ILocalSymbol localSymbol = (ILocalSymbol)symbol;
                    var declarationSyntax = localSymbol.DeclaringSyntaxReferences[0].GetSyntax();
                    int declarationEnd;
                    switch (declarationSyntax)
                    {
                        case ForEachStatementSyntax foreachSyntax:
                            declarationEnd = foreachSyntax.CloseParenToken.SpanStart;
                            break;
                        default:
                            declarationEnd = declarationSyntax.Span.End;
                            break;
                    }
                    if (declarationEnd < token.SpanStart)
                    {
                        yield return localSymbol;
                    }
                }
                else
                {
                    if (symbol.Kind == SymbolKind.Field || symbol.Kind == SymbolKind.Property || symbol.Kind == SymbolKind.Parameter) 
                    {
                        yield return symbol;
                    }
                }
            }
        }