-
-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathConditionalScopeHandler.ts
More file actions
63 lines (56 loc) · 1.61 KB
/
Copy pathConditionalScopeHandler.ts
File metadata and controls
63 lines (56 loc) · 1.61 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
import {
NoContainingScopeError,
type Direction,
type Position,
type ScopeType,
type TextEditor,
} from "@cursorless/lib-common";
import { ifilter } from "itertools";
import { BaseScopeHandler } from "./BaseScopeHandler";
import type { TargetScope } from "./scope.types";
import type {
ConditionalScopeType,
ScopeHandler,
ScopeIteratorRequirements,
} from "./scopeHandler.types";
import type { ScopeHandlerFactory } from "./ScopeHandlerFactory";
export class ConditionalScopeHandler extends BaseScopeHandler {
public scopeType = undefined;
protected isHierarchical = true;
static maybeCreate(
scopeHandlerFactory: ScopeHandlerFactory,
conditionalScopeType: ConditionalScopeType,
languageId: string,
): ConditionalScopeHandler | undefined {
const scopeHandler = scopeHandlerFactory.maybeCreate(
conditionalScopeType.scopeType,
languageId,
);
if (scopeHandler == null) {
return undefined;
}
return new ConditionalScopeHandler(scopeHandler, conditionalScopeType);
}
private constructor(
private scopeHandler: ScopeHandler,
private conditionalScopeType: ConditionalScopeType,
) {
super();
}
get iterationScopeType(): ScopeType {
throw new NoContainingScopeError(
"Iteration scope for ConditionalScopeHandler",
);
}
generateScopeCandidates(
editor: TextEditor,
position: Position,
direction: Direction,
hints: ScopeIteratorRequirements,
): Iterable<TargetScope> {
return ifilter(
this.scopeHandler.generateScopes(editor, position, direction, hints),
this.conditionalScopeType.predicate,
);
}
}