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); } }
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); } } }
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)); }
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); }
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)); } }
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); }
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))) }); }
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); }