| 80 | } |
| 81 | |
| 82 | function collectFormatterExtensions(languages: Set<string>): string[] { |
| 83 | const extensions = new Set<string>(); |
| 84 | const modeMap = new Map<string, Mode>(); |
| 85 | |
| 86 | try { |
| 87 | const modes = getModes() as Mode[]; |
| 88 | modes.forEach((mode) => { |
| 89 | const key = String(mode?.name ?? "") |
| 90 | .trim() |
| 91 | .toLowerCase(); |
| 92 | if (key) modeMap.set(key, mode); |
| 93 | }); |
| 94 | } catch (_) { |
| 95 | // Ignore mode loading errors |
| 96 | } |
| 97 | |
| 98 | languages.forEach((language) => { |
| 99 | const key = String(language ?? "") |
| 100 | .trim() |
| 101 | .toLowerCase(); |
| 102 | if (!key) return; |
| 103 | extensions.add(key); |
| 104 | const mode = modeMap.get(key); |
| 105 | if (!mode?.extensions) return; |
| 106 | String(mode.extensions) |
| 107 | .split("|") |
| 108 | .forEach((part) => { |
| 109 | const ext = part.trim(); |
| 110 | if (ext && !ext.startsWith("^")) { |
| 111 | extensions.add(ext); |
| 112 | } |
| 113 | }); |
| 114 | }); |
| 115 | |
| 116 | if (!extensions.size) { |
| 117 | return ["*"]; |
| 118 | } |
| 119 | |
| 120 | return Array.from(extensions); |
| 121 | } |