src/vs/editor/common/languages/supports/languageBracketsConfiguration.ts/LanguageBracketsConfiguration/constructor
class LanguageBracketsConfiguration:	constructor(
		public readonly languageId: string,
		config: LanguageConfiguration,
	) {
		let brackets: [string, string][];

		// Prefer colorized bracket pairs, as they are more accurate.
		// TODO@hediet: Deprecate `colorizedBracketPairs` and increase accuracy for brackets.
		if (config.colorizedBracketPairs) {
			brackets = filterValidBrackets(config.colorizedBracketPairs.map(b => [b[0], b[1]]));
		} else if (config.brackets) {
			brackets = filterValidBrackets(config.brackets
				.map((b) => [b[0], b[1]] as [string, string])
				// Many languages set < ... > as bracket pair, even though they also use it as comparison operator.
				// This leads to problems when colorizing this bracket, so we exclude it by default.
				// Languages can still override this by configuring `colorizedBracketPairs`
				// https://github.com/microsoft/vscode/issues/132476
				.filter((p) => !(p[0] === '<' && p[1] === '>')));
		} else {
			brackets = [];
		}

		const openingBracketInfos = new CachedFunction((bracket: string) => {
			const closing = new Set<ClosingBracketKind>();
			return {
				info: new OpeningBracketKind(this, bracket, closing),
				closing,
			};
		});
		const closingBracketInfos = new CachedFunction((bracket: string) => {
			const opening = new Set<OpeningBracketKind>();
			return {
				info: new ClosingBracketKind(this, bracket, opening),
				opening,
			};
		});

		for (const [open, close] of brackets) {
			const opening = openingBracketInfos.get(open);
			const closing = closingBracketInfos.get(close);

			opening.closing.add(closing.info);
			closing.opening.add(opening.info);
		}

		this._openingBrackets = new Map([...openingBracketInfos.cachedValues].map(([k, v]) => [k, v.info]));
		this._closingBrackets = new Map([...closingBracketInfos.cachedValues].map(([k, v]) => [k, v.info]));
	}