Ejemplo n.º 1
0
        public async Task RespectNamingConventions_InOfferedRefactorings(string filename)
        {
            var testFile = new TestFile(Path.Combine(TestAssets.Instance.TestFilesFolder, filename), @"public class Foo
{
    public Foo(string som$$ething)
    {
    }
}");

            using (var host = CreateOmniSharpHost(new[] { testFile }, new Dictionary <string, string>
            {
                ["FormattingOptions:EnableEditorConfigSupport"] = "true",
                ["RoslynExtensionsOptions:EnableAnalyzersSupport"] = "true"
            }, TestAssets.Instance.TestFilesFolder))
            {
                var point             = testFile.Content.GetPointFromPosition();
                var getRequestHandler = host.GetRequestHandler <GetCodeActionsService>(OmniSharpEndpoints.V2.GetCodeActions);
                var getRequest        = new GetCodeActionsRequest
                {
                    Line     = point.Line,
                    Column   = point.Offset,
                    FileName = testFile.FileName
                };

                var getResponse = await getRequestHandler.Handle(getRequest);

                Assert.NotNull(getResponse.CodeActions);
                Assert.Contains(getResponse.CodeActions, f => f.Name == "Create and assign field 'xxx_something'");
            }
        }
        private async Task <IEnumerable <OmniSharpCodeAction> > FindRefactoringsAsync(string code, IDictionary <string, string> configurationData = null)
        {
            var testFile = new TestFile(BufferPath, code);

            using (var host = CreateOmniSharpHost(new[] { testFile }, configurationData))
            {
                var requestHandler = host.GetRequestHandler <GetCodeActionsService>(OmniSharpEndpoints.V2.GetCodeActions);

                var span  = testFile.Content.GetSpans().Single();
                var range = testFile.Content.GetRangeFromSpan(span);

                var request = new GetCodeActionsRequest
                {
                    Line      = range.Start.Line,
                    Column    = range.Start.Offset,
                    FileName  = BufferPath,
                    Buffer    = testFile.Content.Code,
                    Selection = GetSelection(range),
                };

                var response = await requestHandler.Handle(request);

                return(response.CodeActions);
            }
        }
Ejemplo n.º 3
0
        public async Task RespectFolderName_InOfferedRefactorings_AfterLiveChange(string expectedNamespace, params string[] relativePath)
        {
            var testFile = new TestFile(Path.Combine(TestAssets.Instance.TestFilesFolder, Path.Combine(relativePath)), @"namespace Xx$$x { }");

            using (var host = CreateOmniSharpHost(new[] { testFile }, null, path: TestAssets.Instance.TestFilesFolder))
            {
                var point             = testFile.Content.GetPointFromPosition();
                var getRequestHandler = host.GetRequestHandler <GetCodeActionsService>(OmniSharpEndpoints.V2.GetCodeActions);

                var changedSolution = host.Workspace.CurrentSolution.WithProjectDefaultNamespace(host.Workspace.CurrentSolution.Projects.ElementAt(0).Id, "LiveChanged");
                host.Workspace.TryApplyChanges(changedSolution);

                var getRequest = new GetCodeActionsRequest
                {
                    Line     = point.Line,
                    Column   = point.Offset,
                    FileName = testFile.FileName
                };

                var getResponse = await getRequestHandler.Handle(getRequest);

                Assert.NotNull(getResponse.CodeActions);
                Assert.Contains(getResponse.CodeActions, f => f.Name == $"Change namespace to '{expectedNamespace}'");
            }
        }
        public override async Task <CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken)
        {
            var omnisharpRequest = new GetCodeActionsRequest
            {
                FileName  = Helpers.FromUri(request.TextDocument.Uri),
                Column    = request.Range.Start.Character,
                Line      = request.Range.Start.Line,
                Selection = Helpers.FromRange(request.Range),
            };

            var omnisharpResponse = await _getActionsHandler.Handle(omnisharpRequest);

            var codeActions = new List <CodeAction>();

            foreach (var ca in omnisharpResponse.CodeActions)
            {
                CodeActionKind kind;
                if (ca.Identifier.StartsWith("using "))
                {
                    kind = CodeActionKind.SourceOrganizeImports;
                }
                else if (ca.Identifier.StartsWith("Inline "))
                {
                    kind = CodeActionKind.RefactorInline;
                }
                else if (ca.Identifier.StartsWith("Extract "))
                {
                    kind = CodeActionKind.RefactorExtract;
                }
                else if (ca.Identifier.StartsWith("Change "))
                {
                    kind = CodeActionKind.QuickFix;
                }
                else
                {
                    kind = CodeActionKind.Refactor;
                }

                codeActions.Add(
                    new CodeAction
                {
                    Title       = ca.Name,
                    Kind        = kind,
                    Diagnostics = new Container <Diagnostic>(),
                    Edit        = new WorkspaceEdit(),
                    Command     = Command.Create("omnisharp/executeCodeAction")
                                  .WithTitle(ca.Name)
                                  .WithArguments(new CommandData()
                    {
                        Uri        = request.TextDocument.Uri,
                        Identifier = ca.Identifier,
                        Name       = ca.Name,
                        Range      = request.Range,
                    })
                });
            }

            return(new CommandOrCodeActionContainer(
                       codeActions.Select(ca => new CommandOrCodeAction(ca))));
        }
        public async override Task <CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken)
        {
            var omnisharpRequest = new GetCodeActionsRequest {
                FileName  = Helpers.FromUri(request.TextDocument.Uri),
                Column    = (int)request.Range.Start.Character,
                Line      = (int)request.Range.Start.Line,
                Selection = Helpers.FromRange(request.Range),
            };

            var omnisharpResponse = await _getActionsHandler.Handle(omnisharpRequest);

            var codeActions = new List <CodeAction>();

            foreach (var ca in omnisharpResponse.CodeActions)
            {
                var omnisharpCaRequest = new RunCodeActionRequest {
                    Identifier       = ca.Identifier,
                    FileName         = Helpers.FromUri(request.TextDocument.Uri),
                    Column           = Convert.ToInt32(request.Range.Start.Character),
                    Line             = Convert.ToInt32(request.Range.Start.Line),
                    Selection        = Helpers.FromRange(request.Range),
                    ApplyTextChanges = false,
                    WantsTextChanges = true,
                };

                var omnisharpCaResponse = await _runActionHandler.Handle(omnisharpCaRequest);

                var changes = omnisharpCaResponse.Changes.ToDictionary(
                    x => Helpers.ToUri(x.FileName),
                    x => ((ModifiedFileResponse)x).Changes.Select(edit => new TextEdit
                {
                    NewText = edit.NewText,
                    Range   = Helpers.ToRange((edit.StartColumn, edit.StartLine), (edit.EndColumn, edit.EndLine))
                }));
        public async Task <GetCodeActionsResponse> GetCodeActions(GetCodeActionsRequest request)
        {
            var actions = await GetActions(request);

            return(new GetCodeActionsResponse {
                CodeActions = actions.Select(a => new OmniSharpCodeAction(a.GetIdentifier(), a.Title))
            });
        }
Ejemplo n.º 7
0
        private async Task <IEnumerable <OmniSharpCodeAction> > FindRefactoringsAsync(string code)
        {
            using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false))
                using (var host = CreateOmniSharpHost(testProject.Directory))
                {
                    var testFile       = new TestFile(Path.Combine(testProject.Directory, "build.cake"), code);
                    var requestHandler = GetGetCodeActionsHandler(host);

                    var span  = testFile.Content.GetSpans().Single();
                    var range = testFile.Content.GetRangeFromSpan(span);

                    var request = new GetCodeActionsRequest
                    {
                        Line      = range.Start.Line,
                        Column    = range.Start.Offset,
                        FileName  = testFile.FileName,
                        Buffer    = testFile.Content.Code,
                        Selection = GetSelection(range),
                    };

                    var updateBufferRequest = new UpdateBufferRequest
                    {
                        Buffer   = request.Buffer,
                        Column   = request.Column,
                        FileName = request.FileName,
                        Line     = request.Line,
                        FromDisk = false
                    };

                    await GetUpdateBufferHandler(host).Handle(updateBufferRequest);

                    var response = await requestHandler.Handle(request);

                    return(response.CodeActions);
                }
        }