-
-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathCollectionItemScopeHandler.ts
More file actions
64 lines (56 loc) · 1.83 KB
/
Copy pathCollectionItemScopeHandler.ts
File metadata and controls
64 lines (56 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import type {
Direction,
Position,
ScopeType,
TextEditor,
} from "@cursorless/lib-common";
import type { LanguageDefinitions } from "../../../../languages/LanguageDefinitions";
import { BaseScopeHandler } from "../BaseScopeHandler";
import { SortedScopeHandler } from "../SortedScopeHandler";
import type { TargetScope } from "../scope.types";
import type {
ComplexScopeType,
ScopeHandler,
ScopeIteratorRequirements,
} from "../scopeHandler.types";
import type { ScopeHandlerFactory } from "../ScopeHandlerFactory";
import { CollectionItemTextualScopeHandler } from "./CollectionItemTextualScopeHandler";
export class CollectionItemScopeHandler extends BaseScopeHandler {
public scopeType: ScopeType = { type: "collectionItem" };
protected isHierarchical = true;
private scopeHandler: ScopeHandler;
get iterationScopeType(): ScopeType | ComplexScopeType {
return this.scopeHandler.iterationScopeType;
}
constructor(
scopeHandlerFactory: ScopeHandlerFactory,
languageDefinitions: LanguageDefinitions,
languageId: string,
) {
super();
this.scopeHandler = (() => {
const textualScopeHandler = new CollectionItemTextualScopeHandler(
scopeHandlerFactory,
languageId,
);
const languageScopeHandler = languageDefinitions
.get(languageId)
?.getScopeHandler(this.scopeType);
if (languageScopeHandler == null) {
return textualScopeHandler;
}
return new SortedScopeHandler(scopeHandlerFactory, languageId, [
languageScopeHandler,
textualScopeHandler,
]);
})();
}
generateScopeCandidates(
editor: TextEditor,
position: Position,
direction: Direction,
hints: ScopeIteratorRequirements,
): Iterable<TargetScope> {
return this.scopeHandler.generateScopes(editor, position, direction, hints);
}
}