public async Task OmitsNamespaceForTypesInGlobalNamespace()
        {
            const string source = @"namespace Bar {
            class Foo {}
            }
            class Baz {}";

            var testFile = new TestFile("dummy.cs", source);

            using (var host = CreateOmniSharpHost(testFile))
            {
                var requestHandler = GetRequestHandler(host);

                var requestInNormalNamespace = new TypeLookupRequest {
                    FileName = testFile.FileName, Line = 1, Column = 19
                };
                var responseInNormalNamespace = await requestHandler.Handle(requestInNormalNamespace);

                var requestInGlobalNamespace = new TypeLookupRequest {
                    FileName = testFile.FileName, Line = 3, Column = 19
                };
                var responseInGlobalNamespace = await requestHandler.Handle(requestInGlobalNamespace);

                Assert.Equal("Bar.Foo", responseInNormalNamespace.Type);
                Assert.Equal("Baz", responseInGlobalNamespace.Type);
            }
        }
Beispiel #2
0
        public async Task Adds_Misc_Document_Which_Supports_TypeLookup()
        {
            const string code     = @"class F$$oo {}";
            var          testfile = new TestFile("a.cs", code);

            using (var testProject = await TestAssets.Instance.GetTestProjectAsync("EmptyProject"))
            {
                using (var host = CreateOmniSharpHost(testProject.Directory))
                {
                    var filePath = await AddTestFile(host, testProject, testfile);

                    var service = host.GetRequestHandler <TypeLookupService>(OmniSharpEndpoints.TypeLookup);
                    var point   = testfile.Content.GetPointFromPosition();
                    var request = new TypeLookupRequest
                    {
                        FileName = filePath,
                        Line     = point.Line,
                        Column   = point.Offset,
                    };

                    var actual = await host.GetResponse <TypeLookupRequest, TypeLookupResponse>(OmniSharpEndpoints.TypeLookup, request);

                    Assert.Equal("Foo", actual.Type);
                }
            }
        }
Beispiel #3
0
        public async Task <IActionResult> TypeLookup(TypeLookupRequest request)
        {
            var document = _workspace.GetDocument(request.FileName);
            var response = new TypeLookupResponse();

            if (document != null)
            {
                var semanticModel = await document.GetSemanticModelAsync();

                var sourceText = await document.GetTextAsync();

                var position = sourceText.Lines.GetPosition(new LinePosition(request.Line - 1, request.Column - 1));
                var symbol   = SymbolFinder.FindSymbolAtPosition(semanticModel, position, _workspace);
                if (symbol != null)
                {
                    if (symbol.Kind == SymbolKind.NamedType)
                    {
                        response.Type = symbol.ContainingNamespace.ToDisplayString() + "."
                                        + symbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat);
                    }
                    else
                    {
                        response.Type = symbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat);
                    }

                    if (request.IncludeDocumentation)
                    {
                        response.Documentation = DocumentationConverter.ConvertDocumentation(symbol.GetDocumentationCommentXml(), _options.FormattingOptions.NewLine);
                    }
                }
            }
            return(new ObjectResult(response));
        }
Beispiel #4
0
        public async Task <TypeLookupResponse> TypeLookup(TypeLookupRequest request)
        {
            var document = _workspace.GetDocument(request.FileName);
            var response = new TypeLookupResponse();

            if (document != null)
            {
                var semanticModel = await document.GetSemanticModelAsync();

                var sourceText = await document.GetTextAsync();

                var position = sourceText.Lines.GetPosition(new LinePosition(request.Line - 1, request.Column - 1));
                var symbol   = SymbolFinder.FindSymbolAtPosition(semanticModel, position, _workspace);
                if (symbol != null)
                {
                    //non regular C# code semantics (interactive, script) don't allow namespaces
                    if (document.SourceCodeKind == SourceCodeKind.Regular && symbol.Kind == SymbolKind.NamedType && !symbol.ContainingNamespace.IsGlobalNamespace)
                    {
                        response.Type = $"{symbol.ContainingNamespace.ToDisplayString()}.{symbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat)}";
                    }
                    else
                    {
                        response.Type = symbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat);
                    }

                    if (request.IncludeDocumentation)
                    {
                        response.Documentation = DocumentationConverter.ConvertDocumentation(symbol.GetDocumentationCommentXml(), _options.FormattingOptions.NewLine);
                    }
                }
            }
            return(response);
        }
Beispiel #5
0
        private async Task <TypeLookupResponse> GetTypeLookUpResponse(int line, int column)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(s_testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new TypeLookupRequest {
                FileName = s_testFile.FileName, Line = line, Column = column
            };

            return(await requestHandler.Handle(request));
        }
        private async Task <TypeLookupResponse> GetTypeLookUpResponse(int line, int column)
        {
            using (var host = CreateOmniSharpHost(s_testFile))
            {
                var requestHandler = GetRequestHandler(host);
                var request        = new TypeLookupRequest {
                    FileName = s_testFile.FileName, Line = line, Column = column
                };

                return(await requestHandler.Handle(request));
            }
        }
Beispiel #7
0
        private async Task <TypeLookupResponse> GetTypeLookUpResponse(string content)
        {
            TestFile testFile = new TestFile("dummy.cs", content);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var point          = testFile.Content.GetPointFromPosition();
            var request        = new TypeLookupRequest {
                FileName = testFile.FileName, Line = point.Line, Column = point.Offset
            };

            request.IncludeDocumentation = true;

            return(await requestHandler.Handle(request));
        }
        public async Task IncludesContainingTypeFoNestedTypesForNonRegularCSharpSyntax()
        {
            var source = @"class Foo {
                class Bar {}
            }";

            var testFile  = new TestFile("dummy.csx", source);
            var workspace = TestHelpers.CreateCsxWorkspace(testFile);

            var controller = new TypeLookupService(workspace, new FormattingOptions());
            var request    = new TypeLookupRequest {
                FileName = testFile.FileName, Line = 1, Column = 23
            };
            var response = await controller.Handle(request);

            Assert.Equal("Foo.Bar", response.Type);
        }
Beispiel #9
0
        public async Task IncludesNamespaceForRegularCSharpSyntax()
        {
            const string source = @"namespace Bar {
            class Foo {}
            }";

            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var request = new TypeLookupRequest {
                FileName = testFile.FileName, Line = 1, Column = 19
            };
            var response = await requestHandler.Handle(request);

            Assert.Equal("Bar.Foo", response.Type);
        }
        public async override Task <Hover> Handle(HoverParams request, CancellationToken token)
        {
            var omnisharpRequest = new TypeLookupRequest()
            {
                FileName             = Helpers.FromUri(request.TextDocument.Uri),
                Column               = Convert.ToInt32(request.Position.Character),
                Line                 = Convert.ToInt32(request.Position.Line),
                IncludeDocumentation = true
            };

            var omnisharpResponse = await _definitionHandler.Handle(omnisharpRequest);

            return(new Hover()
            {
                // TODO: Range?  We don't currently have that!
                // Range =
                Contents = new MarkedStringsOrMarkupContent(new Container <MarkedString>(Helpers.EscapeMarkdown(omnisharpResponse.Type), Helpers.EscapeMarkdown(omnisharpResponse.Documentation)))
            });
        }
Beispiel #11
0
        public async Task IncludesContainingTypeFoNestedTypesForRegularCSharpSyntax()
        {
            var source = @"namespace Bar {
            class Foo {
                    class Xyz {}
                }
            }";

            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var request = new TypeLookupRequest {
                FileName = testFile.FileName, Line = 2, Column = 27
            };
            var response = await requestHandler.Handle(request);

            Assert.Equal("Bar.Foo.Xyz", response.Type);
        }
        public static string LookupType(this string editorText)
        {
            int cursorOffset   = editorText.IndexOf("$", StringComparison.Ordinal);
            var cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset);

            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project  = new FakeProject();

            project.AddFile(editorText);
            solution.Projects.Add(project);

            var handler = new TypeLookupHandler(solution, new BufferParser(solution));
            var request = new TypeLookupRequest()
            {
                Buffer   = editorText,
                FileName = "myfile",
                Line     = cursorPosition.Line,
                Column   = cursorPosition.Column,
            };

            return(handler.GetTypeLookupResponse(request).Type);
        }