Skip to content

Instantly share code, notes, and snippets.

@mat-mcloughlin
Created May 30, 2015 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mat-mcloughlin/14655d1050f2978e5576 to your computer and use it in GitHub Desktop.
Save mat-mcloughlin/14655d1050f2978e5576 to your computer and use it in GitHub Desktop.
Roslyn Rename
public RosylnController()
{
_workspace = new AdhocWorkspace();
_project = _workspace.AddProject("AdhocProject", LanguageNames.CSharp);
}
[Route("rename")]
public async Task<string> Post(string buffer, int line, int column, string newName)
{
var document = _project.AddDocument("AdhocDocument", SourceText.From(buffer));
var sourceText = await document.GetTextAsync();
var symbolPosition = sourceText.Lines.GetPosition(new LinePosition(line, column));
var symbol = await SymbolFinder.FindSymbolAtPositionAsync(document, symbolPosition);
if (symbol != null)
{
var newSolution = await Renamer.RenameSymbolAsync(_workspace.CurrentSolution, symbol, newName, _workspace.Options);
var solutionChanges = newSolution.GetChanges(_workspace.CurrentSolution);
var projectChanges = solutionChanges.GetProjectChanges();
var documentChanges = projectChanges.First().GetChangedDocuments();
var changedDocument = newSolution.GetDocument(documentChanges.First());
var newSourceText = await changedDocument.GetTextAsync();
return newSourceText.ToString();
}
return null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment