Skip to content

Commit af665ed

Browse files
committed
Tweaks
1 parent 1987f51 commit af665ed

File tree

4 files changed

+36
-33
lines changed

4 files changed

+36
-33
lines changed

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

+29-25
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { unsafeKeys } from "../../../util/object";
66

77
type IndividualDelimiterText = string | string[];
88

9-
const delimiterToText: Record<
9+
type DelimiterMap = Record<
1010
SimpleSurroundingPairName,
1111
[IndividualDelimiterText, IndividualDelimiterText]
12-
> = Object.freeze({
12+
>;
13+
14+
const delimiterToText: DelimiterMap = Object.freeze({
1315
angleBrackets: [
1416
["</", "<"],
1517
[">", "/>"],
@@ -26,20 +28,14 @@ const delimiterToText: Record<
2628
squareBrackets: ["[", "]"],
2729
});
2830

29-
const delimiterToTextNix: Record<
30-
SimpleSurroundingPairName,
31-
[IndividualDelimiterText, IndividualDelimiterText]
32-
> = {
33-
...delimiterToText,
34-
singleQuotes: ["''", "''"],
35-
};
31+
const delimiterToTextOverrides: Record<string, Partial<DelimiterMap>> = {
32+
nix: {
33+
singleQuotes: ["''", "''"],
34+
},
3635

37-
const delimiterToTextLua: Record<
38-
SimpleSurroundingPairName,
39-
[IndividualDelimiterText, IndividualDelimiterText]
40-
> = {
41-
...delimiterToText,
42-
// FIXME: Add [[ ]] somewhere
36+
lua: {
37+
// FIXME: Add [[ ]] somewhere
38+
},
4339
};
4440

4541
export const leftToRightMap: Record<string, string> = Object.fromEntries(
@@ -65,22 +61,30 @@ export const complexDelimiterMap: Record<
6561
};
6662

6763
/**
68-
* Given a language id, returns a list of all possible delimiters
69-
* for that language.
70-
* @param languageId The language id
64+
* Given a language id, returns a list of all possible delimiters for that
65+
* language.
66+
*
67+
* Allows us to support languages where the parse tree gives type names to nodes
68+
* that don't correspond to the actual delimiter.
69+
*
70+
* Note that we pass in `undefined` if we are in a text fragment, because then
71+
* we won't be using a parse tree.
72+
*
73+
* @param languageId The language id, or `undefined` if in a text fragment
7174
* @returns A list of all possible delimiters for that language
7275
*/
7376
export function getSimpleDelimiterMap(
74-
languageId: string,
77+
languageId: string | undefined,
7578
): Record<
7679
SimpleSurroundingPairName,
7780
[IndividualDelimiterText, IndividualDelimiterText]
7881
> {
79-
if (languageId == "nix") {
80-
return delimiterToTextNix;
81-
} else if (languageId == "lua") {
82-
return delimiterToTextLua;
83-
} else {
84-
return delimiterToText;
82+
if (languageId != null && languageId in delimiterToTextOverrides) {
83+
return {
84+
...delimiterToText,
85+
...delimiterToTextOverrides[languageId],
86+
};
8587
}
88+
89+
return delimiterToText;
8690
}

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

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

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

8279
const delimiterTextToDelimiterInfoMap = Object.fromEntries(
8380
individualDelimiters.map((individualDelimiter) => [

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import { SimpleSurroundingPairName, isString } from "@cursorless/common";
22
import { IndividualDelimiter } from "./types";
3-
import { getSimpleDelimiterMap } from "./getDelimiterMaps";
3+
import { getSimpleDelimiterMap } from "./delimiterMaps";
44
import { concat, uniq } from "lodash";
55

66
/**
77
* Given a list of delimiters, returns a list where each element corresponds to
88
* a single right or left delimiter. Each item contains information such as a
99
* reference to delimiter name, the text to expect, etc.
1010
*
11+
* @param languageId The language id, or `undefined` if in a text fragment
1112
* @param delimiters The delimiter names
12-
* @returns A list of information about all possible left / right delimiter instances
13+
* @returns A list of information about all possible left / right delimiter
14+
* instances
1315
*/
1416
export function getIndividualDelimiters(
15-
languageId: string,
17+
languageId: string | undefined,
1618
delimiters: SimpleSurroundingPairName[],
1719
): IndividualDelimiter[] {
1820
const delimiterToText = getSimpleDelimiterMap(languageId);

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { LanguageDefinitions } from "../../../languages/LanguageDefinitions";
77
import { Target } from "../../../typings/target.types";
88
import { SurroundingPairTarget } from "../../targets";
99
import { getContainingScopeTarget } from "../getContainingScopeTarget";
10-
import { complexDelimiterMap } from "./getDelimiterMaps";
10+
import { complexDelimiterMap } from "./delimiterMaps";
1111
import { SurroundingPairInfo } from "./extractSelectionFromSurroundingPairOffsets";
1212
import { findSurroundingPairParseTreeBased } from "./findSurroundingPairParseTreeBased";
1313
import { findSurroundingPairTextBased } from "./findSurroundingPairTextBased";

0 commit comments

Comments
 (0)