@@ -904,6 +904,50 @@ func TestSession(t *testing.T) {
904904 assert .Equal (t , len (codeLensRefreshCalls ), 1 , "expected one RefreshCodeLens call after code lens preference change" )
905905 assert .Equal (t , len (inlayHintsRefreshCalls ), 1 , "expected one RefreshInlayHints call after inlay hints preference change" )
906906 })
907+ t .Run ("config parsing" , func (t * testing.T ) {
908+ t .Parallel ()
909+ files := map [string ]any {
910+ "/src/tsconfig.json" : "{}" ,
911+ "/src/index.ts" : "export const x = 1;" ,
912+ }
913+ session , _ := projecttestutil .Setup (files )
914+ session .DidOpenFile (context .Background (), "file:///src/index.ts" , 1 , files ["/src/index.ts" ].(string ), lsproto .LanguageKindTypeScript )
915+ _ , err := session .GetLanguageService (context .Background (), lsproto .DocumentUri ("file:///src/index.ts" ))
916+ assert .NilError (t , err )
917+
918+ configMap1 := map [string ]any {
919+ "UseAliasesForRename" : true ,
920+ "QuotePreference" : "single" ,
921+ "OrganizeImportsIgnoreCase" : true ,
922+ }
923+ // set "typescript" options only
924+ session .Configure (lsutil .ParseNewUserConfig ([]any {nil , configMap1 , nil }))
925+ actualConfig1 := session .Config ()
926+ expectedPrefs1 := lsutil .NewDefaultUserPreferences ()
927+ expectedPrefs1 .UseAliasesForRename = core .TSTrue
928+ expectedPrefs1 .QuotePreference = lsutil .QuotePreferenceSingle
929+ expectedPrefs1 .OrganizeImportsIgnoreCase = core .TSTrue
930+
931+ // "javascript" options should default to ts
932+ assert .DeepEqual (t , * actualConfig1 .TS (), * expectedPrefs1 )
933+ assert .DeepEqual (t , * actualConfig1 .JS (), * expectedPrefs1 )
934+
935+ configMap2 := map [string ]any {
936+ "UseAliasesForRename" : false ,
937+ "QuotePreference" : "double" ,
938+ "OrganizeImportsIgnoreCase" : false ,
939+ }
940+ // set "javascript" options only
941+ session .Configure (lsutil .ParseNewUserConfig ([]any {nil , nil , configMap2 }))
942+ actualConfig2 := session .Config ()
943+ expectedPrefs2 := lsutil .NewDefaultUserPreferences ()
944+ expectedPrefs2 .UseAliasesForRename = core .TSFalse
945+ expectedPrefs2 .QuotePreference = lsutil .QuotePreferenceDouble
946+ expectedPrefs2 .OrganizeImportsIgnoreCase = core .TSFalse
947+ // "typescript" options should not change
948+ assert .DeepEqual (t , * actualConfig2 .TS (), * expectedPrefs1 )
949+ assert .DeepEqual (t , * actualConfig2 .JS (), * expectedPrefs2 )
950+ })
907951}
908952
909953func ptrTo [T any ](v T ) * T {
0 commit comments