Vorrei generare nodi di sintassi con l'API di Roslyn senza avere un nodo di sintassi preesistente. Cioè, non posso semplicemente usare i metodi WithXYZ() su un oggetto esistente per modificarlo perché non esiste alcun oggetto esistente.Come si creano nodi di sintassi in Roslyn da zero?
Ad esempio, vorrei generare un oggetto InvocationExpressionSyntax. Supponendo un costruttore era disponibile, ho potuto fare qualcosa di simile
var invoke = new InvocationExpressionSyntax(expression, arguments);
Ma il costruttore di InvocationExpressionSyntax
sembra non sono pubbliche.
http://www.philjhale.com/2012/10/getting-started-with-roslyn.html
questo blog suggerisce che posso usare un'API come
Syntax.InvocationExpression()
ma non vedere ciò che si riferisce alla Syntax
, e io non vedo nulla che assomiglia nel API di Roslyn.
ho trovato Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory che mi permette di fare
var invoke = SyntaxFactory.InvocationExpression().WithExpression(expression);
E questo funziona abbastanza bene per me. C'è anche lo Microsoft.CodeAnalysis.CSharp.SyntaxFactory
per chi si chiede.
SyntaxFactory
è il modo corretto per creare nuovi nodi di sintassi?
Il modo in cui ho trovato SyntaxFactory.InvocationExpression è stato esaminando il file PublicAPI.txt nel codice sorgente Roslyn (https://github.com/dotnet/roslyn) nella directory src/Compilers/VisualBasic/Portable. Altrimenti, non vedo dove sia documentato SyntaxFactory
.