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;
}
}
}
}