-
-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathNotebookCellScopeHandler.ts
More file actions
64 lines (56 loc) · 1.82 KB
/
Copy pathNotebookCellScopeHandler.ts
File metadata and controls
64 lines (56 loc) · 1.82 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,
type IDE,
type Position,
type ScopeType,
type TextEditor,
} from "@cursorless/lib-common";
import type { LanguageDefinitions } from "../../../languages/LanguageDefinitions";
import { BaseScopeHandler } from "./BaseScopeHandler";
import { NotebookCellApiScopeHandler } from "./NotebookCellApiScopeHandler";
import type { TargetScope } from "./scope.types";
import type {
ComplexScopeType,
ScopeHandler,
ScopeIteratorRequirements,
} from "./scopeHandler.types";
import type { ScopeHandlerFactory } from "./ScopeHandlerFactory";
import { SortedScopeHandler } from "./SortedScopeHandler";
export class NotebookCellScopeHandler extends BaseScopeHandler {
public readonly scopeType = { type: "notebookCell" } as const;
protected isHierarchical = false;
private readonly scopeHandler: ScopeHandler;
get iterationScopeType(): ScopeType | ComplexScopeType {
return this.scopeHandler.iterationScopeType;
}
constructor(
ide: IDE,
scopeHandlerFactory: ScopeHandlerFactory,
languageDefinitions: LanguageDefinitions,
_scopeType: ScopeType,
languageId: string,
) {
super();
this.scopeHandler = (() => {
const apiScopeHandler = new NotebookCellApiScopeHandler(ide);
const languageScopeHandler = languageDefinitions
.get(languageId)
?.getScopeHandler(this.scopeType);
if (languageScopeHandler == null) {
return apiScopeHandler;
}
return new SortedScopeHandler(scopeHandlerFactory, languageId, [
languageScopeHandler,
apiScopeHandler,
]);
})();
}
generateScopeCandidates(
editor: TextEditor,
position: Position,
direction: Direction,
hints: ScopeIteratorRequirements,
): Iterable<TargetScope> {
return this.scopeHandler.generateScopes(editor, position, direction, hints);
}
}