Skip to content

Commit 8dedf7e

Browse files
author
fidgetingbits
committed
Add language overrides for delimiter maps
1 parent 3b5eed1 commit 8dedf7e

File tree

5 files changed

+50
-5
lines changed

5 files changed

+50
-5
lines changed

packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/findSurroundingPairParseTreeBased.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ export function findSurroundingPairParseTreeBased(
6666
) {
6767
const document: TextDocument = editor.document;
6868

69-
const individualDelimiters = getIndividualDelimiters(delimiters);
69+
const individualDelimiters = getIndividualDelimiters(
70+
document.languageId,
71+
delimiters,
72+
);
7073

7174
const delimiterTextToDelimiterInfoMap = Object.fromEntries(
7275
individualDelimiters.map((individualDelimiter) => [

packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/findSurroundingPairTextBased.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ export function findSurroundingPairTextBased(
7474
const document: TextDocument = editor.document;
7575
const fullRange = allowableRange ?? document.range;
7676

77-
const individualDelimiters = getIndividualDelimiters(delimiters);
77+
const individualDelimiters = getIndividualDelimiters(
78+
document.languageId,
79+
delimiters,
80+
);
7881

7982
const delimiterTextToDelimiterInfoMap = Object.fromEntries(
8083
individualDelimiters.map((individualDelimiter) => [

packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts renamed to packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/getDelimiterMaps.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55

66
type IndividualDelimiterText = string | string[];
77

8-
export const delimiterToText: Record<
8+
const delimiterToText: Record<
99
SimpleSurroundingPairName,
1010
[IndividualDelimiterText, IndividualDelimiterText]
1111
> = {
@@ -25,6 +25,22 @@ export const delimiterToText: Record<
2525
squareBrackets: ["[", "]"],
2626
};
2727

28+
const delimiterToTextNix: Record<
29+
SimpleSurroundingPairName,
30+
[IndividualDelimiterText, IndividualDelimiterText]
31+
> = {
32+
...delimiterToText,
33+
singleQuotes: ["''", "''"],
34+
};
35+
36+
const delimiterToTextLua: Record<
37+
SimpleSurroundingPairName,
38+
[IndividualDelimiterText, IndividualDelimiterText]
39+
> = {
40+
...delimiterToText,
41+
// FIXME: Add [[ ]] somewhere
42+
};
43+
2844
export const leftToRightMap: Record<string, string> = Object.fromEntries(
2945
Object.values(delimiterToText),
3046
);
@@ -46,3 +62,24 @@ export const complexDelimiterMap: Record<
4662
"angleBrackets",
4763
],
4864
};
65+
66+
/**
67+
* Given a language id, returns a list of all possible delimiters
68+
* for that language.
69+
* @param languageId The language id
70+
* @returns A list of all possible delimiters for that language
71+
*/
72+
export function getSimpleDelimiterMap(
73+
languageId: string,
74+
): Record<
75+
SimpleSurroundingPairName,
76+
[IndividualDelimiterText, IndividualDelimiterText]
77+
> {
78+
if (languageId == "nix") {
79+
return delimiterToTextNix;
80+
} else if (languageId == "lua") {
81+
return delimiterToTextLua;
82+
} else {
83+
return delimiterToText;
84+
}
85+
}

packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/getIndividualDelimiters.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SimpleSurroundingPairName } from "@cursorless/common";
22
import { IndividualDelimiter } from "./types";
3-
import { delimiterToText } from "./delimiterMaps";
3+
import { getSimpleDelimiterMap } from "./getDelimiterMaps";
44
import { concat, uniq } from "lodash";
55
import { isString } from "../../../util/type";
66

@@ -13,8 +13,10 @@ import { isString } from "../../../util/type";
1313
* @returns A list of information about all possible left / right delimiter instances
1414
*/
1515
export function getIndividualDelimiters(
16+
languageId: string,
1617
delimiters: SimpleSurroundingPairName[],
1718
): IndividualDelimiter[] {
19+
const delimiterToText = getSimpleDelimiterMap(languageId);
1820
return delimiters.flatMap((delimiter) => {
1921
const [leftDelimiter, rightDelimiter] = delimiterToText[delimiter];
2022

packages/cursorless-engine/src/processTargets/modifiers/surroundingPair/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import getTextFragmentExtractor from "../../../languages/getTextFragmentExtracto
99
import { Target } from "../../../typings/target.types";
1010
import { SurroundingPairTarget } from "../../targets";
1111
import { getContainingScopeTarget } from "../getContainingScopeTarget";
12-
import { complexDelimiterMap } from "./delimiterMaps";
12+
import { complexDelimiterMap } from "./getDelimiterMaps";
1313
import { SurroundingPairInfo } from "./extractSelectionFromSurroundingPairOffsets";
1414
import { findSurroundingPairParseTreeBased } from "./findSurroundingPairParseTreeBased";
1515
import { findSurroundingPairTextBased } from "./findSurroundingPairTextBased";

0 commit comments

Comments
 (0)