public static void HandleRequest(CodeChangeRequest request) { foreach (var oldMethodRequest in request.UpdateMethods) { NewMethodRequest(oldMethodRequest); } }
private async void Ide_DocumentSaved(object sender, DocumentSavedEventArgs e) { CodeChangeRequest request; try { var oldDocument = currentDocument; var newDocument = e.Document; var oldSyntaxTree = await oldDocument.GetSyntaxTreeAsync(); var semanticModel = await newDocument.GetSemanticModelAsync(); var newSynctaxTree = await newDocument.GetSyntaxTreeAsync(); var diagnostics = semanticModel.GetDiagnostics().Where(x => x.Severity == DiagnosticSeverity.Error); if (diagnostics.Count() == 0) { request = CompareTree(newSynctaxTree, oldSyntaxTree, semanticModel); currentDocument = newDocument; } else { var compileError = ""; var errorIndex = 0; foreach (var diagnostic in diagnostics) { errorIndex++; if (compileError != "") { compileError += "\n"; } compileError += errorIndex + ". Error: "; compileError += diagnostic.GetMessage() + "\n"; compileError += " at " + diagnostic.Location.GetLineSpan().Path; compileError += ": " + diagnostic.Location.GetLineSpan().StartLinePosition; } request = new CodeChangeRequest { CompileError = compileError }; } } catch (Exception ex) { request = new CodeChangeRequest(); request.ParsingError = ex.Message; } await server.Send(request); }
public CodeChangeRequest CompareTree(SyntaxTree newSyntaxTree, SyntaxTree oldSyntaxTree, SemanticModel semanticModel) { var codeChangesVisitor = new CodeChangesVisitor(); codeChangesVisitor.Visit(newSyntaxTree, oldSyntaxTree); var updateMethods = new List <Method>(); foreach (var mds in codeChangesVisitor.UpdatedMethods) { var interpreterHandler = new StatementInterpreterHandler(mds, semanticModel); var method = interpreterHandler.GetMethod(); updateMethods.Add(method); } var request = new CodeChangeRequest(); request.UpdateMethods = updateMethods; return(request); }