Ejemplo n.º 1
0
        public Task <SymbolInformationOrDocumentSymbolContainer> Handle(DocumentSymbolParams request, CancellationToken cancellationToken)
        {
            var symbols = new List <SymbolInformationOrDocumentSymbol>();

            foreach (var doc in documentsManager.GetDocuments())
            {
                foreach (var c in doc.Value.GlobalConstants)
                {
                    var pos    = new Position(c.Line - 1, c.Column);
                    var symbol = new SymbolInformationOrDocumentSymbol(new DocumentSymbol
                    {
                        Kind  = SymbolKind.Constant,
                        Name  = c.Name,
                        Range = new Range(pos, pos),
                    });
                    symbols.Add(symbol);
                }
                foreach (var v in doc.Value.GlobalVariables)
                {
                    var pos    = new Position(v.Line - 1, v.Column);
                    var symbol = new SymbolInformationOrDocumentSymbol(new DocumentSymbol
                    {
                        Kind  = SymbolKind.Variable,
                        Name  = v.Name,
                        Range = new Range(pos, pos),
                    });
                    symbols.Add(symbol);
                }
            }
            return(Task.FromResult(new SymbolInformationOrDocumentSymbolContainer(symbols)));
        }
        public Task <SymbolInformationOrDocumentSymbolContainer> Handle(DocumentSymbolParams request, CancellationToken cancellationToken)
        {
            ScriptFile scriptFile =
                _workspaceService.GetFile(
                    request.TextDocument.Uri.ToString());

            IEnumerable <SymbolReference> foundSymbols =
                this.ProvideDocumentSymbols(scriptFile);

            SymbolInformationOrDocumentSymbol[] symbols = null;

            string containerName = Path.GetFileNameWithoutExtension(scriptFile.FilePath);

            if (foundSymbols != null)
            {
                symbols =
                    foundSymbols
                    .Select(r =>
                {
                    return(new SymbolInformationOrDocumentSymbol(new SymbolInformation
                    {
                        ContainerName = containerName,
                        Kind = GetSymbolKind(r.SymbolType),
                        Location = new Location
                        {
                            Uri = PathUtils.ToUri(r.FilePath),
                            Range = GetRangeFromScriptRegion(r.ScriptRegion)
                        },
                        Name = GetDecoratedSymbolName(r)
                    }));
                })
                    .ToArray();
            }
            else
            {
                symbols = new SymbolInformationOrDocumentSymbol[0];
            }


            return(Task.FromResult(new SymbolInformationOrDocumentSymbolContainer(symbols)));
        }