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); } } }