Skip to content

Commit 61e5e3a

Browse files
Started working on custom relative command
1 parent a525b59 commit 61e5e3a

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

packages/cursorless-engine/src/customCommandGrammar/generated/grammar.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import { lexer } from "../lexer";
1616
import {
1717
bringMoveActionDescriptor,
1818
containingScopeModifier,
19-
partialPrimitiveTargetDescriptor,
2019
createPlaceholderTarget,
20+
partialPrimitiveTargetDescriptor,
2121
primitiveDestinationDescriptor,
22+
relativeScopeModifier,
2223
simpleActionDescriptor,
2324
simplePartialMark,
2425
simpleScopeType,
@@ -83,15 +84,23 @@ const grammar: Grammar = {
8384
{"name": "modifier", "symbols": ["containingScopeModifier"], "postprocess":
8485
([containingScopeModifier]) => containingScopeModifier
8586
},
87+
{"name": "modifier", "symbols": ["relativeScopeModifier"], "postprocess":
88+
([relativeScopeModifier]) => relativeScopeModifier
89+
},
8690
{"name": "containingScopeModifier", "symbols": ["scopeType"], "postprocess":
8791
([scopeType]) => containingScopeModifier(scopeType)
8892
},
93+
{"name": "relativeScopeModifier", "symbols": ["direction", "scopeType"], "postprocess":
94+
([direction, scopeType]) => relativeScopeModifier(scopeType, direction)
95+
},
8996
{"name": "scopeType", "symbols": [(lexer.has("simpleScopeTypeType") ? {type: "simpleScopeTypeType"} : simpleScopeTypeType)], "postprocess":
9097
([simpleScopeTypeType]) => simpleScopeType(simpleScopeTypeType)
9198
},
9299
{"name": "scopeType", "symbols": [(lexer.has("pairedDelimiter") ? {type: "pairedDelimiter"} : pairedDelimiter)], "postprocess":
93100
([delimiter]) => surroundingPairScopeType(delimiter)
94101
},
102+
{"name": "direction", "symbols": [{"literal":"next"}], "postprocess": ([]) => "forward"},
103+
{"name": "direction", "symbols": [{"literal":"previous"}], "postprocess": ([]) => "backward"},
95104
{"name": "mark", "symbols": [(lexer.has("simpleMarkType") ? {type: "simpleMarkType"} : simpleMarkType)], "postprocess":
96105
([simpleMarkType]) => simplePartialMark(simpleMarkType)
97106
},

packages/cursorless-engine/src/customCommandGrammar/grammar.ne

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import { lexer } from "../lexer";
55
import {
66
bringMoveActionDescriptor,
77
containingScopeModifier,
8-
partialPrimitiveTargetDescriptor,
98
createPlaceholderTarget,
9+
partialPrimitiveTargetDescriptor,
1010
primitiveDestinationDescriptor,
11+
relativeScopeModifier,
1112
simpleActionDescriptor,
1213
simplePartialMark,
1314
simpleScopeType,
@@ -58,10 +59,18 @@ modifier -> containingScopeModifier {%
5859
([containingScopeModifier]) => containingScopeModifier
5960
%}
6061

62+
modifier -> relativeScopeModifier {%
63+
([relativeScopeModifier]) => relativeScopeModifier
64+
%}
65+
6166
containingScopeModifier -> scopeType {%
6267
([scopeType]) => containingScopeModifier(scopeType)
6368
%}
6469

70+
relativeScopeModifier -> direction scopeType {%
71+
([direction, scopeType]) => relativeScopeModifier(scopeType, direction)
72+
%}
73+
6574
# --------------------------- Scope types ---------------------------
6675

6776
scopeType -> %simpleScopeTypeType {%
@@ -72,6 +81,12 @@ scopeType -> %pairedDelimiter {%
7281
([delimiter]) => surroundingPairScopeType(delimiter)
7382
%}
7483

84+
# --------------------------- Directions ---------------------------
85+
86+
direction -> "next" {% ([]) => "forward" %}
87+
88+
direction -> "previous" {% ([]) => "backward" %}
89+
7590
# --------------------------- Marks ---------------------------
7691

7792
mark -> %simpleMarkType {%

packages/cursorless-engine/src/customCommandGrammar/grammarUtil.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import type {
22
BringMoveActionDescriptor,
33
DestinationDescriptor,
4+
Direction,
45
InsertionMode,
56
PartialListTargetDescriptor,
67
PartialRangeTargetDescriptor,
78
PartialTargetMark,
89
PrimitiveDestinationDescriptor,
10+
RelativeScopeModifier,
911
} from "@cursorless/common";
1012
import {
1113
type ContainingScopeModifier,
@@ -75,6 +77,19 @@ export function containingScopeModifier(
7577
};
7678
}
7779

80+
export function relativeScopeModifier(
81+
scopeType: ScopeType,
82+
direction: Direction,
83+
): RelativeScopeModifier {
84+
return {
85+
type: "relativeScope",
86+
scopeType,
87+
offset: 1,
88+
length: 1,
89+
direction,
90+
};
91+
}
92+
7893
export function simpleScopeType(type: SimpleScopeTypeType): SimpleScopeType {
7994
return { type };
8095
}

0 commit comments

Comments
 (0)