コード例 #1
0
        private void GotoIdentByLocation(string name, int line, int col, syntax_tree_node cur)
        {
            if (cur == null)
            {
                return;
            }
            if (cur.line() == line && (cur as ident)?.name == name)
            {
                current = cur;
                return;
            }

            var nodes = cur.DescendantNodes();

            if (cur.line() == line && cur.end_line() == line)
            {
                nodes = nodes?.Where(n => n != null &&
                                     n.column() <= col && n.end_column() >= col);
            }
            else
            {
                nodes = nodes?.Where(n => n != null &&
                                     n.line() <= line && n.end_line() >= line);
            }

            if (nodes != null)
            {
                foreach (var n in nodes)
                {
                    GotoIdentByLocation(name, line, col, n);
                }
            }
        }