@@ -48,6 +48,11 @@ function isJSONProperty(obj: unknown): obj is IJSONProperty {
48
48
*/
49
49
type LanguageServerSettings = Record < string , ServerSchemaWrapper > ;
50
50
51
+ /**
52
+ * Default server priority; this should match the value defined in `plugin.json` schema.
53
+ */
54
+ const DEAULT_SERVER_PRIORITY = 50 ;
55
+
51
56
/**
52
57
* Get default values from JSON Schema properties field.
53
58
*/
@@ -396,7 +401,7 @@ export class SettingsSchemaManager {
396
401
composite . language_servers
397
402
) ;
398
403
399
- composite . language_servers = this . _mergeByServer (
404
+ composite . language_servers = SettingsSchemaManager . mergeByServer (
400
405
collapsedDefaults . settings ,
401
406
collapsedUser . settings
402
407
) ;
@@ -552,7 +557,7 @@ export class SettingsSchemaManager {
552
557
} ;
553
558
}
554
559
555
- private _mergeByServer (
560
+ static mergeByServer (
556
561
defaults : LanguageServerSettings ,
557
562
userSettings : LanguageServerSettings
558
563
) : LanguageServerSettings {
@@ -565,9 +570,19 @@ export class SettingsSchemaManager {
565
570
// nothing to merge with
566
571
result [ serverKey ] = JSONExt . deepCopy ( serverSettingsGroup ) ;
567
572
} else {
573
+ // priority should come from (a) user (b) overrides (c) fallback default;
574
+ // unfortunately the user and default values get merged in the form so we
575
+ // cannot distinguish (a) from (c); as a workaround we can compare its value
576
+ // with the default value.
577
+ const userOrDefaultPriority = serverSettingsGroup . priority ;
578
+ const isPriorityUserSet =
579
+ typeof userOrDefaultPriority !== 'undefined' &&
580
+ userOrDefaultPriority !== DEAULT_SERVER_PRIORITY ;
581
+ const priority = isPriorityUserSet
582
+ ? userOrDefaultPriority
583
+ : result [ serverKey ] . priority ?? DEAULT_SERVER_PRIORITY ;
568
584
const merged : Required < ServerSchemaWrapper > = {
569
- priority : ( result [ serverKey ] . priority ||
570
- serverSettingsGroup . priority ) as any ,
585
+ priority,
571
586
// `serverSettings` entries are expected to be flattened to dot notation here.
572
587
serverSettings : {
573
588
...( result [ serverKey ] . serverSettings || { } ) ,
0 commit comments