diff --git a/package.nls.json b/package.nls.json index f506322..b0ceaad 100644 --- a/package.nls.json +++ b/package.nls.json @@ -91,6 +91,7 @@ "cph.submit.notKattis": "Not a kattis problem.", "cph.submit.notCodeforces": "Not a codeforces problem.", "cph.utils.unsupported": "Unsupported file extension. Only these types are valid: {0}", + "cph.utils.noActiveEditor": "No active editor found.", "cph.preferences.invalidSaveLocation": "Invalid save location, reverting to default. path not exists: {0}", "cph.processRunSingle.invalidChecker": "Custom checker script not found at '{0}'" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index d0a3497..ddf4b66 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -91,6 +91,7 @@ "cph.submit.notKattis": "不是 Kattis 题目。", "cph.submit.notCodeforces": "不是 Codeforces 题目。", "cph.utils.unsupported": "不支持的文件扩展名。只有以下类型有效:{0}", + "cph.utils.noActiveEditor": "未发现活动中的编辑器。", "cph.preferences.invalidSaveLocation": "保存位置无效,正在恢复为默认值。路径不存在:{0}", "cph.processRunSingle.invalidChecker": "在“{0}”处未找到自定义判题脚本" } diff --git a/src/utils.ts b/src/utils.ts index 901cb37..16b4fa6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -40,7 +40,7 @@ const oc = vscode.window.createOutputChannel('cph'); * Get language based on file extension */ export const getLanguage = (srcPath: string): Language => { - const extension = path.extname(srcPath).split('.').pop(); + const extension = path.extname(srcPath).toLowerCase().replace('.', ''); let langName: string | void = undefined; for (const [lang, ext] of Object.entries(config.extensions)) { if (ext === extension) { @@ -48,6 +48,13 @@ export const getLanguage = (srcPath: string): Language => { } } + if ( + langName === undefined && + (config.extensions as any)[extension] !== undefined + ) { + langName = extension; + } + if (langName === undefined) { throw new Error('Invalid extension'); } @@ -148,9 +155,8 @@ export const getLanguage = (srcPath: string): Language => { }; export const isValidLanguage = (srcPath: string): boolean => { - return config.supportedExtensions.includes( - path.extname(srcPath).split('.')[1], - ); + const ext = path.extname(srcPath).toLowerCase().replace('.', ''); + return config.supportedExtensions.includes(ext); }; export const isCodeforcesUrl = (url: URL): boolean => { @@ -194,6 +200,12 @@ export const randomId = (index: number | null) => { * unsupported. */ export const checkUnsupported = (srcPath: string): boolean => { + if (srcPath === '') { + vscode.window.showErrorMessage( + localize('cph.utils.noActiveEditor', 'No active editor found.'), + ); + return true; + } if (!isValidLanguage(srcPath)) { vscode.window.showErrorMessage( localize(