Example #1
0
        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));
            }
        }
Example #2
0
        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)));
        }
Example #3
0
        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));
            }
        }