Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | /** * 语言工具函数 * 提供语言检测和文件扩展名映射功能 */ /** * 语言到文件扩展名的映射 */ const LANGUAGE_EXTENSIONS: Record<string, string> = { javascript: '.js', typescript: '.ts', python: '.py', java: '.java', cpp: '.cpp', c: '.c', csharp: '.cs', php: '.php', go: '.go', rust: '.rs', sql: '.sql', html: '.html', css: '.css', xml: '.xml', yaml: '.yml', json: '.json', markdown: '.md', shellscript: '.sh', dockerfile: '.dockerfile', powershell: '.ps1', ruby: '.rb', swift: '.swift', kotlin: '.kt', scala: '.scala', perl: '.pl', lua: '.lua', r: '.r', matlab: '.m', vb: '.vb', fsharp: '.fs', dart: '.dart', elixir: '.ex', erlang: '.erl', haskell: '.hs', clojure: '.clj', groovy: '.groovy', coffeescript: '.coffee', less: '.less', scss: '.scss', sass: '.sass', stylus: '.styl', vue: '.vue', svelte: '.svelte', jsx: '.jsx', tsx: '.tsx', } /** * 根据语言获取对应的文件扩展名 * @param language 语言类型 * @returns 文件扩展名 */ export function getFileExtension(language: string): string { const normalizedLanguage = language.toLowerCase() return LANGUAGE_EXTENSIONS[normalizedLanguage] || '.txt' } /** * 获取所有支持的语言列表 * @returns 支持的语言数组 */ export function getSupportedLanguages(): string[] { return Object.keys(LANGUAGE_EXTENSIONS) } /** * 检查是否为支持的语言 * @param language 语言类型 * @returns 是否支持 */ export function isSupportedLanguage(language: string): boolean { const normalizedLanguage = language.toLowerCase() return normalizedLanguage in LANGUAGE_EXTENSIONS } /** * 根据文件扩展名获取语言类型 * @param extension 文件扩展名(包含点号) * @returns 语言类型,如果未找到则返回 'plaintext' */ export function getLanguageFromExtension(extension: string): string { const normalizedExt = extension.toLowerCase() for (const [language, ext] of Object.entries(LANGUAGE_EXTENSIONS)) { if (ext === normalizedExt) { return language } } return 'plaintext' } /** * 生成临时文件名 * @param fieldName 字段名 * @param language 语言类型 * @param timestamp 时间戳(可选) * @returns 临时文件名 */ export function generateTempFileName(fieldName: string, language: string, timestamp?: number): string { const cleanFieldName = fieldName.replace(/[^a-z0-9]/gi, '_') const ts = timestamp || Date.now() const extension = getFileExtension(language) return `temp_${cleanFieldName}_${ts}${extension}` } |