@@ -6,10 +6,12 @@ import { unsafeKeys } from "../../../util/object";
66
77type 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
4541export 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 */
7376export 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}
0 commit comments