Build Online C# Syntax Checker with Roslyn
On 19th Oct, Microsoft released first Community Technology Preview of the Roslyn Project. With the release of Roslyn Project, First time Microsoft is opening up the C# and Visual Basic compilers through Rich Roslyn API. More detail about Core API and others feature of October CTP released can be found here.
As far as the web development concerns, Possibilities are lot increased with Roslyn project. In future we might see web application for online syntax checker-formatter, online code compiler (Upload code and download dll / assembly!!!), and might even whole online IDE based on SaaS model!!!
Possibilities are endless. Here we will see how we can create online C# syntax checker with the help of Roslyn.Compilers.CSharp.DiagnosticList class.
NOTE: Please note that Roslyn Project is a still in technology preview and there are known issues and only a subset of the VB and C# languages has been implemented at this time.
Create new web application with Roslyn (See my post on how to setup .NET project with Roslyn).
In default.aspx add one textbox, button, and label as below. And on button click event write following code.
protected void btnCheck_Click(object sender, EventArgs e)
string strDetail = "";
var tree = SyntaxTree.ParseCompilationUnit(txtSyntax.Text);
if (tree.GetDiagnostics().Count == 0)
strDetail += "Diagnostic test passed!!!";
for (int i = 0; i < tree.GetDiagnostics().Count; i++)
obj = tree.GetDiagnostics()[i];
strDetail += "<b>" + (i + 1).ToString() + ". Info: </b>" + obj.Info.ToString();
strDetail += " <b>Warning Level: </b>" + obj.Info.WarningLevel.ToString();
strDetail += " <b>Severity Level: </b>" + obj.Info.Severity.ToString() + "<br/>";
strDetail += " <b>Location: </b>" + obj.Location.Kind.ToString();
strDetail += " <b>Character at: </b>" + obj.Location.GetLineSpan(true).StartLinePosition.Character.ToString();
strDetail += " <b>On Line: </b>" + obj.Location.GetLineSpan(true).StartLinePosition.Line.ToString();
strDetail += "</br>";
lblResult.Text = strDetail;
DiagnosticList is a collection or list of Diagnostic class gives information which can be helpful to diagnosis any error if there is. Diagnostic.Info property gives various information which is helpful in diagnosis. For e.g. Error code, Warning Level, Severity Level, Message, etc. whereas Diagnostic.Location property give information which can be helpful to identify error location. For e.g. line no, character position, source file or metadata error and lot more.