src/vs/workbench/contrib/scm/browser/scmViewPane.ts/SCMInputWidget/renderValidation
class SCMInputWidget:	private renderValidation(): void {
		this.clearValidation();

		this.editorContainer.classList.toggle('validation-info', this.validation?.type === InputValidationType.Information);
		this.editorContainer.classList.toggle('validation-warning', this.validation?.type === InputValidationType.Warning);
		this.editorContainer.classList.toggle('validation-error', this.validation?.type === InputValidationType.Error);

		if (!this.validation || !this.inputEditor.hasTextFocus()) {
			return;
		}

		const disposables = new DisposableStore();

		this.validationDisposable = this.contextViewService.showContextView({
			getAnchor: () => this.editorContainer,
			render: container => {
				const element = append(container, $('.scm-editor-validation'));
				element.classList.toggle('validation-info', this.validation!.type === InputValidationType.Information);
				element.classList.toggle('validation-warning', this.validation!.type === InputValidationType.Warning);
				element.classList.toggle('validation-error', this.validation!.type === InputValidationType.Error);
				element.style.width = `${this.editorContainer.clientWidth}px`;

				const message = this.validation!.message;
				if (typeof message === 'string') {
					element.textContent = message;
				} else {
					const tracker = trackFocus(element);
					disposables.add(tracker);
					disposables.add(tracker.onDidFocus(() => (this.validationHasFocus = true)));
					disposables.add(tracker.onDidBlur(() => {
						this.validationHasFocus = false;
						this.contextViewService.hideContextView();
					}));

					const { element: mdElement } = this.instantiationService.createInstance(MarkdownRenderer, {}).render(message, {
						actionHandler: {
							callback: (content) => {
								this.openerService.open(content, { allowCommands: typeof message !== 'string' && message.isTrusted });
								this.contextViewService.hideContextView();
							},
							disposables: disposables
						},
					});
					element.appendChild(mdElement);
				}
				return Disposable.None;
			},
			onHide: () => {
				this.validationHasFocus = false;
				disposables.dispose();
			},
			anchorAlignment: AnchorAlignment.LEFT
		});
	}