Skip to content

Commit e48da99

Browse files
Rename lookup
1 parent 1d7b1f0 commit e48da99

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { Range } from "@cursorless/common";
44
* An iterator that allows for efficient lookup of ranges that contain a search item.
55
* The items must be sorted in document order.
66
*/
7-
export class RangeIterator<T extends { range: Range }> {
7+
export class RangeLookupList<T extends { range: Range }> {
88
private index = 0;
99

1010
/**
Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
import type { Range } from "@cursorless/common";
22
import { RangeTreeNode } from "./RangeTreeNode";
3+
import { RangeLookupList } from "./RangeLookupList";
4+
5+
export class RangeLookupTree<T extends { range: Range }> {
6+
private children: RangeLookupList<RangeTreeNode<T>>;
7+
8+
constructor(items: T[]) {
9+
this.children = createNodes(items);
10+
}
11+
12+
getSmallLestContaining(separator: Range): T | undefined {
13+
return this.children
14+
.getContaining(separator)
15+
?.getSmallLestContaining(separator);
16+
}
17+
}
318

419
/**
520
* Creates a tree of ranges from a list of ranges. This improves containing lookup time.
621
* @param items The ranges to create a tree from. They must be sorted in document order.
722
* @returns The root nodes of the tree.
823
*/
9-
export function createRangeTree<T extends { range: Range }>(
24+
function createNodes<T extends { range: Range }>(
1025
items: T[],
11-
): RangeTreeNode<T>[] {
26+
): RangeLookupList<RangeTreeNode<T>> {
1227
const results: RangeTreeNode<T>[] = [];
1328
const parents: RangeTreeNode<T>[] = [];
1429

@@ -33,5 +48,5 @@ export function createRangeTree<T extends { range: Range }>(
3348
parents.push(node);
3449
}
3550

36-
return results;
51+
return new RangeLookupList(results);
3752
}

packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/SurroundingPairScopeHandler/getDelimiterOccurrences.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import {
66
} from "@cursorless/common";
77
import type { LanguageDefinition } from "../../../../languages/LanguageDefinition";
88
import type { QueryCapture } from "../../../../languages/TreeSitterQuery/QueryCapture";
9-
import { createRangeTree } from "./createRangeTree";
109
import { getDelimiterRegex } from "./getDelimiterRegex";
11-
import { RangeIterator } from "./RangeIterator";
10+
import { RangeLookupList } from "./RangeLookupList";
11+
import { RangeLookupTree } from "./RangeLookupTree";
1212
import type { DelimiterOccurrence, IndividualDelimiter } from "./types";
1313

1414
/**
@@ -28,14 +28,12 @@ export function getDelimiterOccurrences(
2828
return [];
2929
}
3030

31-
const disqualifyDelimiters = new RangeIterator(
31+
const disqualifyDelimiters = new RangeLookupList(
3232
getSortedCaptures(languageDefinition, document, "disqualifyDelimiter"),
3333
);
34-
const textFragments = new RangeIterator(
35-
// We need to create a tree for text fragments since they can be nested
36-
createRangeTree(
37-
getSortedCaptures(languageDefinition, document, "textFragment"),
38-
),
34+
// We need a tree for text fragments since they can be nested
35+
const textFragments = new RangeLookupTree(
36+
getSortedCaptures(languageDefinition, document, "textFragment"),
3937
);
4038

4139
const delimiterTextToDelimiterInfoMap = Object.fromEntries(
@@ -63,9 +61,8 @@ export function getDelimiterOccurrences(
6361
const isDisqualified = delimiter != null && !delimiter.hasError();
6462

6563
if (!isDisqualified) {
66-
const textFragmentRange = textFragments
67-
.getContaining(range)
68-
?.getSmallLestContaining(range).range;
64+
const textFragmentRange =
65+
textFragments.getSmallLestContaining(range)?.range;
6966
results.push({
7067
delimiterInfo: delimiterTextToDelimiterInfoMap[text],
7168
textFragmentRange,

0 commit comments

Comments
 (0)