in src/services/jsonCompletion.ts [546:625]
private addDefaultValueCompletions(schema: JSONSchema, separatorAfter: string, collector: CompletionsCollector, arrayDepth = 0): void {
let hasProposals = false;
if (isDefined(schema.default)) {
let type = schema.type;
let value = schema.default;
for (let i = arrayDepth; i > 0; i--) {
value = [value];
type = 'array';
}
collector.add({
kind: this.getSuggestionKind(type),
label: this.getLabelForValue(value),
insertText: this.getInsertTextForValue(value, separatorAfter),
insertTextFormat: InsertTextFormat.Snippet,
detail: localize('json.suggest.default', 'Default value')
});
hasProposals = true;
}
if (Array.isArray(schema.examples)) {
schema.examples.forEach(example => {
let type = schema.type;
let value = example;
for (let i = arrayDepth; i > 0; i--) {
value = [value];
type = 'array';
}
collector.add({
kind: this.getSuggestionKind(type),
label: this.getLabelForValue(value),
insertText: this.getInsertTextForValue(value, separatorAfter),
insertTextFormat: InsertTextFormat.Snippet
});
hasProposals = true;
});
}
if (Array.isArray(schema.defaultSnippets)) {
schema.defaultSnippets.forEach(s => {
let type = schema.type;
let value = s.body;
let label = s.label;
let insertText: string;
let filterText: string;
if (isDefined(value)) {
let type = schema.type;
for (let i = arrayDepth; i > 0; i--) {
value = [value];
type = 'array';
}
insertText = this.getInsertTextForSnippetValue(value, separatorAfter);
filterText = this.getFilterTextForSnippetValue(value);
label = label || this.getLabelForSnippetValue(value);
} else if (typeof s.bodyText === 'string') {
let prefix = '', suffix = '', indent = '';
for (let i = arrayDepth; i > 0; i--) {
prefix = prefix + indent + '[\n';
suffix = suffix + '\n' + indent + ']';
indent += '\t';
type = 'array';
}
insertText = prefix + indent + s.bodyText.split('\n').join('\n' + indent) + suffix + separatorAfter;
label = label || insertText,
filterText = insertText.replace(/[\n]/g, ''); // remove new lines
} else {
return;
}
collector.add({
kind: this.getSuggestionKind(type),
label,
documentation: this.fromMarkup(s.markdownDescription) || s.description,
insertText,
insertTextFormat: InsertTextFormat.Snippet,
filterText
});
hasProposals = true;
});
}
if (!hasProposals && typeof schema.items === 'object' && !Array.isArray(schema.items) && arrayDepth < 5 /* beware of recursion */) {
this.addDefaultValueCompletions(schema.items, separatorAfter, collector, arrayDepth + 1);
}
}