public override async Task <LocationOrLocationLinks> Handle(DefinitionParams request, CancellationToken cancellationToken)
        {
            ScriptFile scriptFile = _workspaceService.GetFile(request.TextDocument.Uri);

            SymbolReference foundSymbol =
                SymbolsService.FindSymbolAtLocation(
                    scriptFile,
                    request.Position.Line + 1,
                    request.Position.Character + 1);

            List <LocationOrLocationLink> definitionLocations = new List <LocationOrLocationLink>();

            if (foundSymbol != null)
            {
                SymbolReference foundDefinition = await _symbolsService.GetDefinitionOfSymbolAsync(
                    scriptFile,
                    foundSymbol).ConfigureAwait(false);

                if (foundDefinition != null)
                {
                    definitionLocations.Add(
                        new LocationOrLocationLink(
                            new Location
                    {
                        Uri   = DocumentUri.From(foundDefinition.FilePath),
                        Range = GetRangeFromScriptRegion(foundDefinition.ScriptRegion)
                    }));
                }
            }

            return(new LocationOrLocationLinks(definitionLocations));
        }
        public async Task <LocationOrLocationLinks> Handle(DefinitionParams request, CancellationToken cancellationToken)
        {
            ScriptFile scriptFile =
                _workspaceService.GetFile(
                    request.TextDocument.Uri.ToString());

            SymbolReference foundSymbol =
                _symbolsService.FindSymbolAtLocation(
                    scriptFile,
                    (int)request.Position.Line + 1,
                    (int)request.Position.Character + 1);

            List <LocationOrLocationLink> definitionLocations = new List <LocationOrLocationLink>();

            if (foundSymbol != null)
            {
                SymbolReference foundDefinition = await _symbolsService.GetDefinitionOfSymbolAsync(
                    scriptFile,
                    foundSymbol);

                if (foundDefinition != null)
                {
                    definitionLocations.Add(
                        new LocationOrLocationLink(
                            new Location
                    {
                        Uri   = PathUtils.ToUri(foundDefinition.FilePath),
                        Range = GetRangeFromScriptRegion(foundDefinition.ScriptRegion)
                    }));
                }
            }

            return(new LocationOrLocationLinks(definitionLocations));
        }
        private Task <SymbolReference> GetDefinition(ScriptRegion scriptRegion)
        {
            ScriptFile scriptFile = GetScriptFile(scriptRegion);

            SymbolReference symbolReference = SymbolsService.FindSymbolAtLocation(
                scriptFile,
                scriptRegion.StartLineNumber,
                scriptRegion.StartColumnNumber);

            Assert.NotNull(symbolReference);

            return(symbolsService.GetDefinitionOfSymbolAsync(scriptFile, symbolReference));
        }