@@ -6,10 +6,12 @@ import { unsafeKeys } from "../../../util/object";
6
6
7
7
type IndividualDelimiterText = string | string [ ] ;
8
8
9
- const delimiterToText : Record <
9
+ type DelimiterMap = Record <
10
10
SimpleSurroundingPairName ,
11
11
[ IndividualDelimiterText , IndividualDelimiterText ]
12
- > = Object . freeze ( {
12
+ > ;
13
+
14
+ const delimiterToText : DelimiterMap = Object . freeze ( {
13
15
angleBrackets : [
14
16
[ "</" , "<" ] ,
15
17
[ ">" , "/>" ] ,
@@ -26,20 +28,14 @@ const delimiterToText: Record<
26
28
squareBrackets : [ "[" , "]" ] ,
27
29
} ) ;
28
30
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
+ } ,
36
35
37
- const delimiterToTextLua : Record <
38
- SimpleSurroundingPairName ,
39
- [ IndividualDelimiterText , IndividualDelimiterText ]
40
- > = {
41
- ...delimiterToText ,
42
- // FIXME: Add [[ ]] somewhere
36
+ lua : {
37
+ // FIXME: Add [[ ]] somewhere
38
+ } ,
43
39
} ;
44
40
45
41
export const leftToRightMap : Record < string , string > = Object . fromEntries (
@@ -65,22 +61,30 @@ export const complexDelimiterMap: Record<
65
61
} ;
66
62
67
63
/**
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
71
74
* @returns A list of all possible delimiters for that language
72
75
*/
73
76
export function getSimpleDelimiterMap (
74
- languageId : string ,
77
+ languageId : string | undefined ,
75
78
) : Record <
76
79
SimpleSurroundingPairName ,
77
80
[ IndividualDelimiterText , IndividualDelimiterText ]
78
81
> {
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
+ } ;
85
87
}
88
+
89
+ return delimiterToText ;
86
90
}
0 commit comments