(
name: string,
caption: string | undefined,
extensions: string | string[],
languageExtension: LanguageExtensionProvider | null = null,
options: AddModeOptions = {},
)
| 179 | languageExtension: LanguageExtensionProvider | null; |
| 180 | |
| 181 | constructor( |
| 182 | name: string, |
| 183 | caption: string | undefined, |
| 184 | extensions: string | string[], |
| 185 | languageExtension: LanguageExtensionProvider | null = null, |
| 186 | options: AddModeOptions = {}, |
| 187 | ) { |
| 188 | if (Array.isArray(extensions)) { |
| 189 | extensions = extensions.join("|"); |
| 190 | } |
| 191 | |
| 192 | this.name = name; |
| 193 | this.mode = name; // CodeMirror uses different mode naming |
| 194 | this.extensions = extensions; |
| 195 | this.caption = caption || this.name.replace(/_/g, " "); |
| 196 | this.aliases = normalizeAliases(options.aliases, this.name); |
| 197 | this.filenameMatchers = Array.isArray(options.filenameMatchers) |
| 198 | ? options.filenameMatchers.filter((matcher) => matcher instanceof RegExp) |
| 199 | : []; |
| 200 | this.languageExtension = languageExtension; |
| 201 | let re = ""; |
| 202 | |
| 203 | if (!extensions) { |
| 204 | this.extRe = null; |
| 205 | return; |
| 206 | } |
| 207 | |
| 208 | const patterns = extensions |
| 209 | .split("|") |
| 210 | .map((pattern) => pattern.trim()) |
| 211 | .filter(Boolean); |
| 212 | const filenamePatterns = patterns |
| 213 | .filter((pattern) => pattern.startsWith("^")) |
| 214 | .map((pattern) => `^${escapeRegExp(pattern.slice(1))}$`); |
| 215 | const extensionPatterns = patterns |
| 216 | .filter((pattern) => !pattern.startsWith("^")) |
| 217 | .map((pattern) => escapeRegExp(pattern)); |
| 218 | const regexParts: string[] = []; |
| 219 | |
| 220 | if (extensionPatterns.length) { |
| 221 | regexParts.push(`^.*?\\.(${extensionPatterns.join("|")})$`); |
| 222 | } |
| 223 | |
| 224 | regexParts.push(...filenamePatterns); |
| 225 | |
| 226 | if (!regexParts.length) { |
| 227 | this.extRe = null; |
| 228 | return; |
| 229 | } |
| 230 | |
| 231 | re = |
| 232 | regexParts.length === 1 ? regexParts[0] : `(?:${regexParts.join("|")})`; |
| 233 | this.extRe = new RegExp(re, "i"); |
| 234 | } |
| 235 | |
| 236 | supportsFile(filename: string): boolean { |
| 237 | if (this.extRe?.test(filename)) return true; |
nothing calls this directly
no test coverage detected