src/vs/workbench/browser/parts/editor/editorPlaceholder.ts/EditorPlaceholder/renderInput
class EditorPlaceholder:	private async renderInput(input: EditorInput, options: IEditorOptions | undefined): Promise<IDisposable> {
		const [container, scrollbar] = assertAllDefined(this.container, this.scrollbar);

		// Reset any previous contents
		clearNode(container);

		// Delegate to implementation for contents
		const disposables = new DisposableStore();
		const { icon, label, actions } = await this.getContents(input, options, disposables);

		// Icon
		const iconContainer = container.appendChild($('.editor-placeholder-icon-container'));
		const iconWidget = new SimpleIconLabel(iconContainer);
		iconWidget.text = icon;

		// Label
		const labelContainer = container.appendChild($('.editor-placeholder-label-container'));
		const labelWidget = document.createElement('span');
		labelWidget.textContent = label;
		labelContainer.appendChild(labelWidget);

		// ARIA label
		container.setAttribute('aria-label', `${computeEditorAriaLabel(input, undefined, this.group, undefined)}, ${label}`);

		// Actions
		const actionsContainer = container.appendChild($('.editor-placeholder-actions-container'));
		for (const action of actions) {
			disposables.add(this.instantiationService.createInstance(Link, actionsContainer, {
				label: action.label,
				href: ''
			}, {
				opener: () => action.run()
			}));
		}

		// Adjust scrollbar
		scrollbar.scanDomNode();

		return disposables;
	}