public async Task <ActionResult> GoToDefinitionAsync(string projectId, string symbolId) { try { Requests.LogRequest(this); var definitions = await Storage.GetReferencesToSymbolAsync( this.GetSearchRepos(), new Symbol() { ProjectId = projectId, Id = SymbolId.UnsafeCreateWithValue(symbolId), Kind = nameof(ReferenceKind.Definition) }); definitions.Entries = definitions.Entries.Distinct(m_referenceEquator).ToList(); if (definitions.Entries.Count == 1) { var definitionReference = definitions.Entries[0]; return(await Index(definitionReference.ReferringProjectId, definitionReference.File, partial : true)); } else { var definitionResult = await Storage.GetDefinitionsAsync(this.GetSearchRepos(), projectId, symbolId); var symbolName = definitionResult?.FirstOrDefault()?.Span.Definition.DisplayName ?? symbolId; definitions.SymbolName = symbolName ?? definitions.SymbolName; if (definitions.Entries.Count == 0) { definitions = await Storage.GetReferencesToSymbolAsync( this.GetSearchRepos(), new Symbol() { ProjectId = projectId, Id = SymbolId.UnsafeCreateWithValue(symbolId) }); } var referencesText = ReferencesController.GenerateReferencesHtml(definitions); if (string.IsNullOrEmpty(referencesText)) { referencesText = "No definitions found."; } else { referencesText = "<!--Definitions-->" + referencesText; } Responses.PrepareResponse(Response); return(PartialView("~/Views/References/References.cshtml", referencesText)); } } catch (Exception ex) { return(Responses.Exception(ex)); } }
private async Task <ActionResult> TextSearchResults(string searchTerm) { var result = await storage.TextSearchAsync(this.GetSearchRepos(), searchTerm.TrimStart('`'), 500); if (result.Count == 0) { return(PartialView(null)); } SymbolReferenceResult referencesResult = FromTextEntries(result); referencesResult.SymbolName = searchTerm; return(PartialView("~/Views/References/References.cshtml", (object)ReferencesController.GenerateReferencesHtml(referencesResult))); }
public async Task <ActionResult> GoToDefinitionGetContentAsync(string projectId, string symbolId) { try { Requests.LogRequest(this); var definitions = await Storage.GetReferencesToSymbolAsync( this.GetSearchRepos(), new Symbol() { ProjectId = projectId, Id = SymbolId.UnsafeCreateWithValue(symbolId), Kind = nameof(ReferenceKind.Definition) }); definitions.Entries = definitions.Entries.Distinct(m_referenceEquator).ToList(); if (definitions.Entries.Count == 1) { var definitionReference = definitions.Entries[0]; var sourceFile = await GetSourceFileAsync(definitionReference.ReferringProjectId, definitionReference.File); if (sourceFile != null) { var referringSpan = definitions.Entries[0].ReferringSpan; var position = new Span() { lineNumber = referringSpan.LineNumber + 1, column = referringSpan.LineSpanEnd + 1, length = referringSpan.Length, }; sourceFile.position = position; } return(WrapTheModel(sourceFile)); } else { var definitionResult = await Storage.GetDefinitionsAsync(this.GetSearchRepos(), projectId, symbolId); var symbolName = definitionResult?.FirstOrDefault()?.Span.Definition.DisplayName ?? symbolId; definitions.SymbolName = symbolName ?? definitions.SymbolName; if (definitions.Entries.Count == 0) { definitions = await Storage.GetReferencesToSymbolAsync( this.GetSearchRepos(), new Symbol() { ProjectId = projectId, Id = SymbolId.UnsafeCreateWithValue(symbolId) }); } var referencesText = ReferencesController.GenerateReferencesHtml(definitions); if (string.IsNullOrEmpty(referencesText)) { referencesText = "No defintions found."; } else { referencesText = "<!--Definitions-->" + referencesText; } Responses.PrepareResponse(Response); return(PartialView("~/Views/References/References.cshtml", referencesText)); } } catch (Exception ex) { return(Responses.Exception(ex)); } }