private IEnumerable<ModifiedFileResponse> Rename(string renameTo, params Buffer[] buffers)
        {
            RenameRequest request = null;
            var solutionBuilder = new FakeSolutionBuilder();
            foreach (var buffer in buffers)
            {
                if (buffer.Text.Contains("$"))
                {
                    var location = TestHelpers.GetLineAndColumnFromDollar(buffer.Text);
                    buffer.Text = buffer.Text.Replace("$", "");
                    request = new RenameRequest
                    {
                        Buffer = buffer.Text,
                        Column = location.Column - 1,
                        Line = location.Line,
                        RenameTo = renameTo,
                        FileName = buffer.Filename
                    };
                }
                //solutionBuilder = solutionBuilder.AddProject();
                solutionBuilder = solutionBuilder.AddFile(buffer.Text, buffer.Filename);
            }
            var solution = solutionBuilder.Build();
            var bufferParser = new BufferParser(solution);
            var renameHandler = new RenameHandler(solution, bufferParser, new OmniSharpConfiguration());

            var response = renameHandler.Rename(request);
            return response.Changes;
        }
        private string Rename(string buffer, string renameTo)
        {
            var location = TestHelpers.GetLineAndColumnFromDollar(buffer);
            buffer = buffer.Replace("$", "");
            
            var solution = new FakeSolutionBuilder()
                .AddFile(buffer)
                .Build();
            
            var bufferParser = new BufferParser(solution);
            var renameHandler = new RenameHandler(solution, bufferParser, new OmniSharpConfiguration(), new FindUsagesHandler(bufferParser, solution, new ProjectFinder(solution)));
            var request = new RenameRequest
                {
                    Buffer = buffer,
                    Column = location.Column - 1,
                    Line = location.Line,
                    RenameTo = renameTo,
                    FileName = "myfile"
                };

            var response = renameHandler.Rename(request);
            if(response.Changes.Any())
                return response.Changes.First().Buffer;
            return buffer;
        }
Esempio n. 3
0
        public RenameResponse Rename(RenameRequest req)
        {
            var project = _solution.ProjectContainingFile(req.FileName);
            var syntaxTree = project.CreateParser().Parse(req.Buffer, req.FileName);
            var sourceNode = syntaxTree.GetNodeAt(req.Line, req.Column);
            if(sourceNode == null)
                return new RenameResponse();
            var originalName = sourceNode.GetText();

            IEnumerable<AstNode> nodes = _findUsagesHandler.FindUsageNodes(req).ToArray();

            var response = new RenameResponse();

            var modfiedFiles = new List<ModifiedFileResponse>();
            response.Changes = modfiedFiles;

            foreach (IGrouping<string, AstNode> groupedNodes in nodes.GroupBy(n => n.GetRegion().FileName.FixPath()))
            {
                string fileName = groupedNodes.Key;
                OmniSharpRefactoringContext context;
                if (groupedNodes.Key != req.FileName)
                {
                    var file = _solution.GetFile(fileName);
                    var bufferParser = new BufferParser(_solution);
                    var content = bufferParser.ParsedContent(file.Document.Text, file.FileName);
                    var resolver = new CSharpAstResolver(content.Compilation, content.SyntaxTree, content.UnresolvedFile);
                    context = new OmniSharpRefactoringContext(file.Document, resolver);
                }
                else
                {
                    context = OmniSharpRefactoringContext.GetContext(_bufferParser, req);
                }
                string modifiedBuffer = null;
                foreach (var node in groupedNodes.Where(n => n.GetText() == originalName))
                {
                    using (var script = new OmniSharpScript(context))
                    {
                        script.Rename(node, req.RenameTo);
                        modifiedBuffer = script.CurrentDocument.Text;
                    }
                }

                if (modifiedBuffer != null)
                {
                    var modifiedFile = new ModifiedFileResponse
                    {
                        FileName
                        = fileName,
                        Buffer = modifiedBuffer
                    };
                    modfiedFiles.Add(modifiedFile);
                    response.Changes = modfiedFiles;

                    _bufferParser.ParsedContent(modifiedBuffer, fileName);
                    _solution.GetFile(fileName).Update(modifiedBuffer);
                }
            }

            return response;
        }
Esempio n. 4
0
        public RenameResponse Rename(RenameRequest req)
        {
            var project    = _solution.ProjectContainingFile(req.FileName);
            var syntaxTree = project.CreateParser().Parse(req.Buffer, req.FileName);
            var sourceNode = syntaxTree.GetNodeAt(req.Line, req.Column);

            if (sourceNode == null)
            {
                return(new RenameResponse());
            }

            IEnumerable <AstNode> nodes = _findUsagesHandler.FindUsageNodes(req).ToArray();

            var response = new RenameResponse();

            var modfiedFiles = new List <ModifiedFileResponse>();

            response.Changes = modfiedFiles;

            foreach (IGrouping <string, AstNode> groupedNodes in nodes.GroupBy(n => n.GetRegion().FileName.LowerCaseDriveLetter()))
            {
                string fileName = groupedNodes.Key;
                OmniSharpRefactoringContext context;
                if (groupedNodes.Key != req.FileName)
                {
                    var file         = _solution.GetFile(fileName);
                    var bufferParser = new BufferParser(_solution);
                    var content      = bufferParser.ParsedContent(file.Document.Text, file.FileName);
                    var resolver     = new CSharpAstResolver(content.Compilation, content.SyntaxTree, content.UnresolvedFile);
                    context = new OmniSharpRefactoringContext(file.Document, resolver);
                }
                else
                {
                    context = OmniSharpRefactoringContext.GetContext(_bufferParser, req);
                }
                string modifiedBuffer = null;

                var lastToFirstNodes = groupedNodes.OrderByDescending(n => n.EndLocation.Line)
                                       .ThenByDescending(n => n.EndLocation.Column);

                foreach (var node in lastToFirstNodes)
                {
                    using (var script = new OmniSharpScript(context, _config))
                    {
                        script.Rename(node, req.RenameTo);
                        modifiedBuffer = script.CurrentDocument.Text;
                    }
                }

                if (modifiedBuffer != null)
                {
                    var modifiedFile = new ModifiedFileResponse
                    {
                        FileName
                               = fileName,
                        Buffer = modifiedBuffer
                    };
                    modfiedFiles.Add(modifiedFile);
                    response.Changes = modfiedFiles;

                    _bufferParser.ParsedContent(modifiedBuffer, fileName);
                    _solution.ProjectContainingFile(fileName).UpdateFile(fileName, modifiedBuffer);
                }
            }

            return(response);
        }