public static async Task <NavigateResponse> TranslateAsync(this NavigateResponse response, OmniSharpWorkspace workspace, Request request)
        {
            var(line, _) = await LineIndexHelper.TranslateFromGenerated(request.FileName, response.Line, workspace, true);

            response.Line = line;

            return(response);
        }
Exemple #2
0
        public static async Task <NavigateResponse> Navigate(OmniSharpWorkspace workspace, Request request, Func <FileMemberElement, FileMemberElement, Request, bool> IsCloserNode)
        {
            var stack    = new List <FileMemberElement>(await StructureComputer.Compute(workspace.GetDocuments(request.FileName)));
            var response = new NavigateResponse();

            //Retain current line in case we dont need to navigate.
            response.Line   = request.Line;
            response.Column = request.Column;

            FileMemberElement closestNode = null;
            FileMemberElement thisNode    = null;

            while (stack.Count > 0)
            {
                var node = stack[0];
                stack.Remove(node);
                var isCloserNode = IsCloserNode(node, closestNode, request);
                if (isCloserNode)
                {
                    closestNode = node;
                }
                if (node.Location.Line == request.Line)
                {
                    thisNode = node;
                }
                stack.AddRange(node.ChildNodes);
            }

            //If there is a closest node, use its line and column.
            //or if we are on the last node, adjust column.
            //if we are above the first or below the last node, do nothing.
            if (closestNode != null)
            {
                response.Line   = closestNode.Location.Line;
                response.Column = closestNode.Location.Column;
            }
            else if (thisNode != null)
            {
                response.Column = thisNode.Location.Column;
            }
            return(response);
        }
Exemple #3
0
        public void NavigateResponse_ZeroBased()
        {
            Configuration.ZeroBasedIndices = true;

            var input = new NavigateResponse()
            {
                Line   = 0,
                Column = 0
            };

            var json = JsonConvert.SerializeObject(input, Formatting.Indented);

            var output = @"
{
  ""Line"": 0,
  ""Column"": 0
}
".Trim();

            Assert.Equal(output, json);
        }
Exemple #4
0
        public void NavigateResponse_OneBased()
        {
            Configuration.ZeroBasedIndices = false;

            var input = new NavigateResponse()
            {
                Line   = 0,
                Column = 0
            };

            var json = JsonConvert.SerializeObject(input, Formatting.Indented);

            const string output = @"
{
  ""Line"": 1,
  ""Column"": 1
}
";

            Assert.Equal(output.Trim(), json);
        }