Skip to content

Commit 57f50b1

Browse files
Fixes
1 parent 5026b89 commit 57f50b1

File tree

6 files changed

+26
-12
lines changed

6 files changed

+26
-12
lines changed

packages/common/src/types/command/PartialTargetDescriptor.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ export const simpleScopeTypeTypes = [
155155
"ifStatement",
156156
"instance",
157157
"interior",
158+
"interiorTreeOnly",
158159
"list",
159160
"map",
160161
"name",

packages/cursorless-engine/src/processTargets/modifiers/InteriorStage.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export class InteriorOnlyStage implements ModifierStage {
2222

2323
const containingInteriorStage = this.modifierStageFactory.create({
2424
type: "containingScope",
25-
scopeType: { type: "interior" },
25+
scopeType: {
26+
type: target.hasExplicitScopeType ? "interiorTreeOnly" : "interior",
27+
},
2628
});
2729

2830
return containingInteriorStage.run(target);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ export class ScopeHandlerFactoryImpl implements ScopeHandlerFactory {
121121
languageId,
122122
);
123123
case "interior":
124+
case "interiorTreeOnly":
124125
return new InteriorScopeHandler(
125126
this,
126127
this.languageDefinitions,

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

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import type {
2-
Direction,
3-
Position,
4-
ScopeType,
5-
SimpleScopeType,
6-
TextEditor,
1+
import {
2+
NoContainingScopeError,
3+
type Direction,
4+
type Position,
5+
type ScopeType,
6+
type SimpleScopeType,
7+
type TextEditor,
78
} from "@cursorless/common";
89
import type { LanguageDefinitions } from "../../../../languages/LanguageDefinitions";
910
import { BaseScopeHandler } from "../BaseScopeHandler";
@@ -28,12 +29,23 @@ export class InteriorScopeHandler extends BaseScopeHandler {
2829
constructor(
2930
scopeHandlerFactory: ScopeHandlerFactory,
3031
languageDefinitions: LanguageDefinitions,
31-
_scopeType: SimpleScopeType,
32+
scopeType: SimpleScopeType,
3233
languageId: string,
3334
) {
3435
super();
3536

3637
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+
3749
const pairInteriorScopeHandler = scopeHandlerFactory.create(
3850
{
3951
type: "surroundingPairInterior",
@@ -43,10 +55,6 @@ export class InteriorScopeHandler extends BaseScopeHandler {
4355
languageId,
4456
);
4557

46-
const languageScopeHandler = languageDefinitions
47-
.get(languageId)
48-
?.getScopeHandler(this.scopeType);
49-
5058
if (languageScopeHandler == null) {
5159
return pairInteriorScopeHandler;
5260
}

packages/cursorless-engine/src/scopeProviders/ScopeInfoProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ function isLanguageSpecific(scopeType: ScopeType): boolean {
127127
case "ifStatement":
128128
case "instance":
129129
case "interior":
130+
case "interiorTreeOnly":
130131
case "list":
131132
case "map":
132133
case "name":

packages/cursorless-engine/src/spokenForms/defaultSpokenFormMapCore.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ export const defaultSpokenFormMapCore: DefaultSpokenFormMapDefinition = {
105105
disqualifyDelimiter: isPrivate("disqualify delimiter"),
106106
pairDelimiter: isPrivate("pair delimiter"),
107107
interior: isPrivate("inside"),
108+
interiorTreeOnly: isPrivate("inside tree only"),
108109
["private.fieldAccess"]: isPrivate("access"),
109110
["private.switchStatementSubject"]: isPrivate("subject"),
110111
},

0 commit comments

Comments
 (0)