public static bool TryGetSemanticModel(this ITextSnapshot snapshot, CancellationToken cancellationToken, out SemanticModel semanticModel)
{
if (HlslPackage.Instance != null && !HlslPackage.Instance.Options.AdvancedOptions.EnableIntelliSense)
{
semanticModel = null;
return false;
}
try
{
semanticModel = CachedSemanticModels.GetValue(snapshot, key =>
{
try
{
var syntaxTree = key.GetSyntaxTree(cancellationToken);
var compilation = new Compilation(syntaxTree);
return compilation.GetSemanticModel(cancellationToken);
}
catch (OperationCanceledException)
{
throw;
}
catch (Exception ex)
{
Logger.Log($"Failed to create semantic model: {ex}");
return null;
}
});
}
catch (OperationCanceledException)
{
semanticModel = null;
}
return semanticModel != null;
}