Skip to content

Commit 1462bc7

Browse files
committed
Revert to explicit (sequential) fold.
1 parent 1be93b7 commit 1462bc7

File tree

1 file changed

+11
-22
lines changed

1 file changed

+11
-22
lines changed

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/rascal/RascalTextDocumentService.java

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,9 @@
9898
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode;
9999
import org.eclipse.lsp4j.services.LanguageClient;
100100
import org.eclipse.lsp4j.services.LanguageClientAware;
101-
import org.eclipse.lsp4j.util.Ranges;
102101
import org.rascalmpl.library.Prelude;
103-
import org.rascalmpl.uri.URIResolverRegistry;
104102
import org.rascalmpl.library.util.PathConfig;
103+
import org.rascalmpl.uri.URIResolverRegistry;
105104
import org.rascalmpl.values.parsetrees.ITree;
106105
import org.rascalmpl.values.parsetrees.ProductionAdapter;
107106
import org.rascalmpl.values.parsetrees.TreeAdapter;
@@ -537,32 +536,22 @@ public CompletableFuture<List<SelectionRange>> selectionRange(SelectionRangePara
537536
private SelectionRange selectionRangeForPosition(ITree tr, Position pos) {
538537
// Compute focus list for cursor position
539538
var focus = TreeSearch.computeFocusList(tr, pos.getLine(), pos.getCharacter());
540-
541-
return focus
542-
// Iterate in reverse order, starting with the outermost tree
539+
var ranges = focus
540+
// Reverse, to prepare for folding later
543541
.reverse()
544542
.stream()
545543
.map(ITree.class::cast)
546544
.map(TreeAdapter::getLocation)
547-
// Map to distinct ranges
548545
.map(l -> Locations.toRange(l, columns))
546+
// Remove duplicate ranges
549547
.distinct()
550-
// Reduce to a single, nested SelectionRange
551-
.map(r -> new SelectionRange(r, null))
552-
.reduce((t, u) -> {
553-
if (Ranges.containsRange(t.getRange(), u.getRange())) {
554-
// `t` contains `u`
555-
u.setParent(t);
556-
return u;
557-
} else if (Ranges.containsRange(u.getRange(), t.getRange())) {
558-
// `u` contains `t`
559-
t.setParent(u);
560-
return t;
561-
} else {
562-
throw new UnsupportedOperationException(String.format("Cannot combine two `SelectionRange`s, since they are not nested (%s and %s)", t, u));
563-
}
564-
})
565-
.orElse(new SelectionRange());
548+
.collect(Collectors.toList());
549+
550+
SelectionRange selectionRange = null;
551+
for (var r : ranges) {
552+
selectionRange = new SelectionRange(r, selectionRange);
553+
}
554+
return selectionRange;
566555
}
567556

568557
@Override

0 commit comments

Comments
 (0)