public async Task ShouldNotIncludeUsagesFromLoadedFilesWhenOnlyThisFileIsTrue() { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var fileName = Path.Combine(testProject.Directory, "build.cake"); await GetUpdateBufferHandler(host).Handle(new UpdateBufferRequest { Buffer = "Information(\"Hello World\");", FileName = Path.Combine(testProject.Directory, "foo.cake"), FromDisk = false }); await GetUpdateBufferHandler(host).Handle(new UpdateBufferRequest { Buffer = "#load foo.cake\nInformation(\"Hello World\");", FileName = fileName, FromDisk = false }); var request = new FindUsagesRequest { FileName = fileName, Line = 1, Column = 1, OnlyThisFile = true }; var requestHandler = GetRequestHandler(host); var response = await requestHandler.Handle(request); Assert.Single(response.QuickFixes); } }
public override async Task <CodeLens> Handle(CodeLens request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.Data.ToObject <Uri>()), Column = (int)request.Range.Start.Character, Line = (int)request.Range.Start.Line, OnlyThisFile = false, ExcludeDefinition = true }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); var length = omnisharpResponse?.QuickFixes?.Count() ?? 0; var jsonCamelCaseContract = new JsonSerializer { ContractResolver = new CamelCasePropertyNamesContractResolver() }; request = request with { Command = new Command { Title = length == 1 ? "1 reference" : $"{length} references", Name = "omnisharp/client/findReferences", Arguments = new JArray( new[]
public async Task <QuickFixResponse> FindUsages(FindUsagesRequest request) { var document = _workspace.GetDocument(request.FileName); var response = new QuickFixResponse(); 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); var definition = await SymbolFinder.FindSourceDefinitionAsync(symbol, _workspace.CurrentSolution); var usages = request.OnlyThisFile ? await SymbolFinder.FindReferencesAsync(definition ?? symbol, _workspace.CurrentSolution, ImmutableHashSet.Create(document)) : await SymbolFinder.FindReferencesAsync(definition ?? symbol, _workspace.CurrentSolution); var locations = new List <Location>(); foreach (var usage in usages.Where(u => u.Definition.CanBeReferencedByName || (symbol as IMethodSymbol)?.MethodKind == MethodKind.Constructor)) { foreach (var location in usage.Locations) { locations.Add(location.Location); } if (!request.ExcludeDefinition) { var definitionLocations = usage.Definition.Locations .Where(loc => loc.IsInSource && (!request.OnlyThisFile || loc.SourceTree.FilePath == request.FileName)); foreach (var location in definitionLocations) { locations.Add(location); } } } var quickFixTasks = locations.Select(async l => await GetQuickFix(l)); var quickFixes = await Task.WhenAll(quickFixTasks); response = new QuickFixResponse(quickFixes.Distinct() .OrderBy(q => q.FileName) .ThenBy(q => q.Line) .ThenBy(q => q.Column)); } return(response); }
public async override Task <LocationContainer> Handle(ReferenceParams request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), OnlyThisFile = false, ExcludeDefinition = !request.Context.IncludeDeclaration }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); return(omnisharpResponse.QuickFixes?.Select(x => new Location { Uri = Helpers.ToUri(x.FileName), Range = x.ToRange() }).ToArray()); }
private async Task <QuickFixResponse> FindUsagesAsync(TestFile[] testFiles, bool onlyThisFile, bool excludeDefinition = false) { SharedOmniSharpTestHost.AddFilesToWorkspace(testFiles); var file = testFiles.Single(tf => tf.Content.HasPosition); var point = file.Content.GetPointFromPosition(); var requestHandler = GetRequestHandler(SharedOmniSharpTestHost); var request = new FindUsagesRequest { Line = point.Line, Column = point.Offset, FileName = file.FileName, Buffer = file.Content.Code, OnlyThisFile = onlyThisFile, ExcludeDefinition = excludeDefinition }; return(await requestHandler.Handle(request)); }
public async Task Returns_Usages() { const string source = @" public class F$$oo { public string prop { get; set; } } public class FooConsumer { public FooConsumer() { var temp = new Foo(); var prop = foo.prop; } }"; var testfile = new TestFile("a.cs", source); using (var testProject = await TestAssets.Instance.GetTestProjectAsync("EmptyProject")) { using (var host = CreateOmniSharpHost(testProject.Directory)) { var filePath = AddTestFile(testProject, testfile); await WaitForFileUpdate(filePath, host); var point = testfile.Content.GetPointFromPosition(); var request = new FindUsagesRequest() { FileName = filePath, Line = point.Line, Column = point.Offset, Buffer = testfile.Content.Code }; var actual = await host.GetResponse <FindUsagesRequest, QuickFixResponse>(OmniSharpEndpoints.FindUsages, request); Assert.Equal(2, actual.QuickFixes.Count()); } } }
public async override Task <CodeLens> Handle(CodeLens request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.Data.ToObject <Uri>()), Column = (int)request.Range.Start.Character, Line = (int)request.Range.Start.Line, OnlyThisFile = false, ExcludeDefinition = true }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); var length = omnisharpResponse?.QuickFixes?.Count() ?? 0; request.Command = new Command { Title = length == 1 ? "1 reference" : $"{length} references" // TODO: Hook up command. }; return(request); }