Skip to content

Commit df0c5ab

Browse files
More testing
1 parent fd17e7c commit df0c5ab

File tree

6 files changed

+49
-69
lines changed

6 files changed

+49
-69
lines changed

packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/FallbackScopeHandler.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,23 @@ export class FallbackScopeHandler extends BaseScopeHandler {
2424
);
2525
}
2626

27-
constructor(
28-
public scopeHandlerFactory: ScopeHandlerFactory,
29-
private fallbackScopeType: FallbackScopeType,
30-
private languageId: string,
31-
) {
27+
static create(
28+
scopeHandlerFactory: ScopeHandlerFactory,
29+
scopeType: FallbackScopeType,
30+
languageId: string,
31+
): ScopeHandler {
32+
const scopeHandlers: ScopeHandler[] = scopeType.scopeTypes.map(
33+
(scopeType) => scopeHandlerFactory.create(scopeType, languageId),
34+
);
35+
36+
return this.createFromScopeHandlers(scopeHandlers);
37+
}
38+
39+
static createFromScopeHandlers(scopeHandlers: ScopeHandler[]): ScopeHandler {
40+
return new FallbackScopeHandler(scopeHandlers);
41+
}
42+
43+
private constructor(private scopeHandlers: ScopeHandler[]) {
3244
super();
3345
}
3446

@@ -38,12 +50,7 @@ export class FallbackScopeHandler extends BaseScopeHandler {
3850
direction: Direction,
3951
hints: ScopeIteratorRequirements,
4052
): Iterable<TargetScope> {
41-
const scopeHandlers: ScopeHandler[] = this.fallbackScopeType.scopeTypes.map(
42-
(scopeType) =>
43-
this.scopeHandlerFactory.create(scopeType, this.languageId),
44-
);
45-
46-
for (const scopeHandler of scopeHandlers) {
53+
for (const scopeHandler of this.scopeHandlers) {
4754
yield* scopeHandler.generateScopes(editor, position, direction, hints);
4855
}
4956
}

packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class ScopeHandlerFactoryImpl implements ScopeHandlerFactory {
133133
case "oneOf":
134134
return OneOfScopeHandler.create(this, scopeType, languageId);
135135
case "fallback":
136-
return new FallbackScopeHandler(this, scopeType, languageId);
136+
return FallbackScopeHandler.create(this, scopeType, languageId);
137137
case "conditional":
138138
return new ConditionalScopeHandler(this, scopeType, languageId);
139139
case "instance":

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
NoContainingScopeError,
32
type Direction,
43
type Position,
54
type ScopeType,
@@ -8,6 +7,7 @@ import {
87
} from "@cursorless/common";
98
import type { LanguageDefinitions } from "../../../../languages/LanguageDefinitions";
109
import { BaseScopeHandler } from "../BaseScopeHandler";
10+
import { FallbackScopeHandler } from "../FallbackScopeHandler";
1111
import { OneOfScopeHandler } from "../OneOfScopeHandler";
1212
import type { TargetScope } from "../scope.types";
1313
import type {
@@ -27,25 +27,14 @@ export class InteriorScopeHandler extends BaseScopeHandler {
2727
}
2828

2929
constructor(
30-
scopeHandlerFactory: ScopeHandlerFactory,
30+
private scopeHandlerFactory: ScopeHandlerFactory,
3131
languageDefinitions: LanguageDefinitions,
3232
scopeType: SimpleScopeType,
33-
languageId: string,
33+
private languageId: string,
3434
) {
3535
super();
3636

3737
this.scopeHandler = (() => {
38-
const languageScopeHandler = languageDefinitions
39-
.get(languageId)
40-
?.getScopeHandler(this.scopeType);
41-
42-
if (scopeType.type === "interiorTreeOnly") {
43-
if (languageScopeHandler == null) {
44-
throw new NoContainingScopeError(this.scopeType.type);
45-
}
46-
return languageScopeHandler;
47-
}
48-
4938
const pairInteriorScopeHandler = scopeHandlerFactory.create(
5039
{
5140
type: "surroundingPairInterior",
@@ -55,10 +44,21 @@ export class InteriorScopeHandler extends BaseScopeHandler {
5544
languageId,
5645
);
5746

47+
const languageScopeHandler = languageDefinitions
48+
.get(languageId)
49+
?.getScopeHandler(this.scopeType);
50+
5851
if (languageScopeHandler == null) {
5952
return pairInteriorScopeHandler;
6053
}
6154

55+
if (scopeType.type === "interiorTreeOnly") {
56+
return FallbackScopeHandler.createFromScopeHandlers([
57+
languageScopeHandler,
58+
pairInteriorScopeHandler,
59+
]);
60+
}
61+
6262
return OneOfScopeHandler.createFromScopeHandlers(
6363
scopeHandlerFactory,
6464
{

packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/TreeSitterScopeHandler/TreeSitterScopeHandler.ts

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,22 @@ export class TreeSitterScopeHandler extends BaseTreeSitterScopeHandler {
5252
const domain =
5353
getRelatedRange(match, scopeTypeType, "domain", true) ?? contentRange;
5454

55-
const removalRange = getRelatedRange(match, scopeTypeType, "removal", true);
55+
if (scopeTypeType === "interior") {
56+
return {
57+
editor,
58+
domain,
59+
allowMultiple,
60+
getTargets: (isReversed) => [
61+
new InteriorTarget({
62+
editor,
63+
isReversed,
64+
fullInteriorRange: contentRange,
65+
}),
66+
],
67+
};
68+
}
5669

57-
const interiorRange = getRelatedRange(
58-
match,
59-
scopeTypeType,
60-
"interior",
61-
true,
62-
);
70+
const removalRange = getRelatedRange(match, scopeTypeType, "removal", true);
6371

6472
const prefixRange = getRelatedRange(
6573
match,
@@ -82,21 +90,6 @@ export class TreeSitterScopeHandler extends BaseTreeSitterScopeHandler {
8290
true,
8391
)?.with(contentRange.end);
8492

85-
if (scopeTypeType === "interior") {
86-
return {
87-
editor,
88-
domain,
89-
allowMultiple,
90-
getTargets: (isReversed) => [
91-
new InteriorTarget({
92-
editor,
93-
isReversed,
94-
fullInteriorRange: contentRange,
95-
}),
96-
],
97-
};
98-
}
99-
10093
return {
10194
editor,
10295
domain,
@@ -111,7 +104,6 @@ export class TreeSitterScopeHandler extends BaseTreeSitterScopeHandler {
111104
removalRange,
112105
leadingDelimiterRange,
113106
trailingDelimiterRange,
114-
interiorRange,
115107
insertionDelimiter,
116108
}),
117109
],

packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ export class LegacyContainingSyntaxScopeStage implements ModifierStage {
6565
leadingDelimiterRange,
6666
trailingDelimiterRange,
6767
removalRange,
68-
interiorRange,
6968
} = scope.context;
7069

7170
if (
@@ -85,7 +84,6 @@ export class LegacyContainingSyntaxScopeStage implements ModifierStage {
8584
isReversed: target.isReversed,
8685
contentRange: contentSelection,
8786
removalRange: removalRange,
88-
interiorRange: interiorRange,
8987
insertionDelimiter: containingListDelimiter,
9088
leadingDelimiterRange,
9189
trailingDelimiterRange,

packages/cursorless-engine/src/processTargets/targets/ScopeTypeTarget.ts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import type { Range, SimpleScopeTypeType } from "@cursorless/common";
2+
import type { Target } from "../../typings/target.types";
23
import type { CommonTargetParameters } from "./BaseTarget";
34
import { BaseTarget } from "./BaseTarget";
4-
import { InteriorTarget } from "./InteriorTarget";
55
import { PlainTarget } from "./PlainTarget";
6-
import type { Target } from "../../typings/target.types";
76
import {
87
createContinuousRange,
98
createContinuousRangeFromRanges,
@@ -20,7 +19,6 @@ export interface ScopeTypeTargetParameters extends CommonTargetParameters {
2019
readonly insertionDelimiter?: string;
2120
readonly prefixRange?: Range;
2221
readonly removalRange?: Range;
23-
readonly interiorRange?: Range;
2422
readonly leadingDelimiterRange?: Range;
2523
readonly trailingDelimiterRange?: Range;
2624
}
@@ -29,7 +27,6 @@ export class ScopeTypeTarget extends BaseTarget<ScopeTypeTargetParameters> {
2927
type = "ScopeTypeTarget";
3028
private scopeTypeType_: SimpleScopeTypeType;
3129
private removalRange_?: Range;
32-
private interiorRange_?: Range;
3330
private leadingDelimiterRange_?: Range;
3431
private trailingDelimiterRange_?: Range;
3532
private hasDelimiterRange_: boolean;
@@ -40,7 +37,6 @@ export class ScopeTypeTarget extends BaseTarget<ScopeTypeTargetParameters> {
4037
super(parameters);
4138
this.scopeTypeType_ = parameters.scopeTypeType;
4239
this.removalRange_ = parameters.removalRange;
43-
this.interiorRange_ = parameters.interiorRange;
4440
this.leadingDelimiterRange_ = parameters.leadingDelimiterRange;
4541
this.trailingDelimiterRange_ = parameters.trailingDelimiterRange;
4642
this.prefixRange = parameters.prefixRange;
@@ -79,19 +75,6 @@ export class ScopeTypeTarget extends BaseTarget<ScopeTypeTargetParameters> {
7975
return undefined;
8076
}
8177

82-
getInterior() {
83-
if (this.interiorRange_ == null) {
84-
return super.getInterior();
85-
}
86-
return [
87-
new InteriorTarget({
88-
editor: this.editor,
89-
isReversed: this.isReversed,
90-
fullInteriorRange: this.interiorRange_,
91-
}),
92-
];
93-
}
94-
9578
getRemovalRange(): Range {
9679
return this.removalRange_ != null
9780
? this.removalRange_

0 commit comments

Comments
 (0)