689
}
690
}
692
>
const objectProperties = prop.type === 'object' ? prop.properties : undefined;
693
>
const objectPatternProperties = prop.type === 'object' ? prop.patternProperties : undefined;
694
>
const objectAdditionalProperties = prop.type === 'object' ? prop.additionalProperties : undefined;
695
>
const propertyNames = prop.type === 'object' ? prop.propertyNames : undefined;
696
>
697
>
let enumToUse = prop.enum;
698
>
let enumDescriptions = prop.markdownEnumDescriptions ?? prop.enumDescriptions;
699
>
let enumDescriptionsAreMarkdown = !!prop.markdownEnumDescriptions;
700
>
if (listItemType === 'enum' && !Array.isArray(prop.items)) {
701
enumToUse = prop.items!.enum;
702
enumDescriptions = prop.items!.markdownEnumDescriptions ?? prop.items!.enumDescriptions;
703
enumDescriptionsAreMarkdown = !!prop.items!.markdownEnumDescriptions;
704
}
706
>
let allKeysAreBoolean = false;
707
>
if (prop.type === 'object' && !prop.additionalProperties && prop.properties && Object.keys(prop.properties).length) {
708
allKeysAreBoolean = Object.keys(prop.properties).every(key => {
709
return prop.properties![key].type === 'boolean';
710
});
711
}
713
>
let isLanguageTagSetting = false;
714
>
if (OVERRIDE_PROPERTY_REGEX.test(key)) {
715
isLanguageTagSetting = true;
716
}
718
>
let defaultValueSource: ConfigurationDefaultValueSource | undefined;
719
>
if (!isLanguageTagSetting) {
720
>
const registeredConfigurationProp = prop as IRegisteredConfigurationPropertySchema;
721
>
if (registeredConfigurationProp && registeredConfigurationProp.defaultValueSource) {
722
defaultValueSource = registeredConfigurationProp.defaultValueSource;
723
}
725
>
726
>
if (!enumToUse && (prop.enumItemLabels || enumDescriptions || enumDescriptionsAreMarkdown)) {
727
console.error(`The setting ${key} has enum-related fields, but doesn't have an enum field. This setting may render improperly in the Settings editor.`);
728
}
730
>
return {
731
>
key,
732
>
value,
733
>
description: descriptionLines,
734
>
descriptionIsMarkdown: !!prop.markdownDescription,
735
>
keywords: prop.keywords,
736
>
range: nullRange,
737
>
keyRange: nullRange,
738
>
valueRange: nullRange,
739
>
descriptionRanges: [],
740
>
overrides,
741
>
scope: prop.scope,
742
>
type: prop.type,
743
>
arrayItemType: listItemType,
744
>
objectProperties,
745
>
objectPatternProperties,
746
>
objectAdditionalProperties,
747
>
propertyNames,
748
>
enum: enumToUse,
749
>
enumDescriptions: enumDescriptions,
750
>
enumDescriptionsAreMarkdown: enumDescriptionsAreMarkdown,
751
>
enumItemLabels: prop.enumItemLabels,
752
>
uniqueItems: prop.uniqueItems,
753
>
tags: prop.tags,
754
>
disallowSyncIgnore: prop.disallowSyncIgnore,
755
>
restricted: prop.restricted,
756
>
extensionInfo: isString(prop.source) ? undefined : prop.source,
757
>
deprecationMessage: prop.markdownDeprecationMessage || prop.deprecationMessage,
758
>
deprecationMessageIsMarkdown: !!prop.markdownDeprecationMessage,
759
>
validator: createValidator(prop),
760
>
allKeysAreBoolean,
761
>
editPresentation: prop.editPresentation,
762
>
order: prop.order,
763
>
nonLanguageSpecificDefaultValueSource: defaultValueSource,
764
>
isLanguageTagSetting,
765
>
categoryLabel: (isString(prop.source) ? undefined : prop.source?.id) === prop.section?.id ? prop.title : prop.section?.id
766
>
};
767
>
}
768
>
769
>
private parseOverrideSettings(overrideSettings: any): ISetting[] {
770
return Object.keys(overrideSettings).map((key) => ({
771
key,