Пример #1
0
        public Task <Reference[]> FindReferences(ReferencesParams @params, CancellationToken cancellationToken)
        {
            var uri = @params.textDocument.uri;

            _log?.Log(TraceEventType.Verbose, $"References in {uri} at {@params.position}");
            return(new ReferenceSource(Services).FindAllReferencesAsync(uri, @params.position, ReferenceSearchOptions.All, cancellationToken));
        }
Пример #2
0
        public Task <DocumentHighlight[]> DocumentHighlight(ReferencesParams @params, CancellationToken cancellationToken)
        {
            var uri = @params.textDocument.uri;

            _log?.Log(TraceEventType.Verbose, $"Document highlight in {uri} at {@params.position}");
            return(new DocumentHighlightSource(Services).DocumentHighlightAsync(uri, @params.position, cancellationToken));
        }
Пример #3
0
        public async Task <Reference[]> FindReferences(ReferencesParams @params, CancellationToken cancellationToken)
        {
            var uri = @params.textDocument.uri;

            _log?.Log(TraceEventType.Verbose, $"References in {uri} at {@params.position}");

            return(Array.Empty <Reference>());
        }
Пример #4
0
        protected async Task HandleReferencesRequest(
            ReferencesParams referencesParams,
            EditorSession editorSession,
            RequestContext <Location[], object> requestContext)
        {
            ScriptFile scriptFile =
                editorSession.Workspace.GetFile(
                    referencesParams.Uri);

            SymbolReference foundSymbol =
                editorSession.LanguageService.FindSymbolAtLocation(
                    scriptFile,
                    referencesParams.Position.Line + 1,
                    referencesParams.Position.Character + 1);

            FindReferencesResult referencesResult =
                await editorSession.LanguageService.FindReferencesOfSymbol(
                    foundSymbol,
                    editorSession.Workspace.ExpandScriptReferences(scriptFile));

            Location[] referenceLocations = null;

            if (referencesResult != null)
            {
                referenceLocations =
                    referencesResult
                    .FoundReferences
                    .Select(r =>
                {
                    return(new Location
                    {
                        Uri = new Uri(r.FilePath).AbsoluteUri,
                        Range = GetRangeFromScriptRegion(r.ScriptRegion)
                    });
                })
                    .ToArray();
            }
            else
            {
                referenceLocations = new Location[0];
            }

            await requestContext.SendResult(referenceLocations);
        }
 public virtual Task <Reference[]> FindReferences(ReferencesParams @params, CancellationToken cancellationToken)
 => throw new NotImplementedException();
        private IEnumerable <Reference> GetModuleReferences(IPythonProjectEntry entry, PythonAst tree, BufferVersion version, ReferencesParams @params)
        {
            if ([email protected]?.includeDeclaration == true)
            {
                return(Enumerable.Empty <Reference>());
            }

            var index = tree.LocationToIndex(@params.position);
            var w     = new ImportedModuleNameWalker(entry, index, tree);

            tree.Walk(w);

            if (w.ImportedType != null)
            {
                @params._expr = w.ImportedType.Name;
                return(Enumerable.Empty <Reference>());
            }

            var modulesNamesInRange = w.ImportedModules.Where(m => {
                var start = tree.LocationToIndex(m.SourceSpan.Start);
                var end   = tree.LocationToIndex(m.SourceSpan.End);
                return(start <= index && index < end);
            }).ToArray();

            if (modulesNamesInRange.Length == 0)
            {
                return(Enumerable.Empty <Reference>());
            }

            var refs = new List <Reference>();

            foreach (var n in modulesNamesInRange)
            {
                if (Analyzer.Modules.TryGetImportedModule(n.Name, out var modRef) && modRef.AnalysisModule != null)
                {
                    // Return a module reference
                    refs.AddRange(modRef.AnalysisModule.Locations
                                  .Select(l => new Reference {
                        uri      = l.DocumentUri,
                        range    = l.Span,
                        _version = version?.Version,
                        _kind    = ReferenceKind.Definition
                    })
                                  .ToArray());
                }
            }
            return(refs);
        }
        public override async Task <Reference[]> FindReferences(ReferencesParams @params, CancellationToken cancellationToken)
        {
            await WaitForCompleteAnalysisAsync(cancellationToken);

            var uri = @params.textDocument.uri;

            ProjectFiles.GetEntry(@params.textDocument, @params._version, out var entry, out var tree);

            TraceMessage($"References in {uri} at {@params.position}");

            var analysis = entry != null ? await entry.GetAnalysisAsync(50, cancellationToken) : null;

            if (analysis == null)
            {
                TraceMessage($"No analysis found for {uri}");
                return(Array.Empty <Reference>());
            }

            tree = GetParseTree(entry, uri, cancellationToken, out var version);
            var modRefs = GetModuleReferences(entry, tree, version, @params);

            IEnumerable <IAnalysisVariable> result;

            if (!string.IsNullOrEmpty(@params._expr))
            {
                TraceMessage($"Getting references for {@params._expr}");
                result = analysis.GetVariables(@params._expr, @params.position);
            }
            else
            {
                var finder = new ExpressionFinder(tree, GetExpressionOptions.FindDefinition);
                if (finder.GetExpression(@params.position) is Expression expr)
                {
                    TraceMessage($"Getting references for {expr.ToCodeString(tree, CodeFormattingOptions.Traditional)}");
                    result = analysis.GetVariables(expr, @params.position);
                }
                else
                {
                    TraceMessage($"No references found in {uri} at {@params.position}");
                    result = Enumerable.Empty <IAnalysisVariable>();
                }
            }

            var filtered = result.Where(v => v.Type != VariableType.None);

            if (!(@params.context?.includeDeclaration ?? false))
            {
                filtered = filtered.Where(v => v.Type != VariableType.Definition);
            }
            if (!(@params.context?._includeValues ?? false))
            {
                filtered = filtered.Where(v => v.Type != VariableType.Value);
            }

            var res = filtered.Select(v => new Reference {
                uri      = v.Location.DocumentUri,
                range    = v.Location.Span,
                _kind    = ToReferenceKind(v.Type),
                _version = version?.Version
            })
                      .Concat(modRefs)
                      .GroupBy(r => r, ReferenceComparer.Instance)
                      .Select(g => g.OrderByDescending(r => (SourceLocation)r.range.end).ThenBy(r => (int?)r._kind ?? int.MaxValue).First())
                      .ToArray();

            return(res);
        }
Пример #8
0
 private static async Task HandleReferencesRequest(
     ReferencesParams referencesParams,
     RequestContext <Location[]> requestContext)
 {
     await Task.FromResult(true);
 }