import { Config } from '../config'; export interface AtCoderLangInfo { id: string; name: string; langKey: string; version: string; rawName: string; } export interface LocalLangInfo { langKey: string; name: string; version: string; isRecommended: boolean; rawOutput: string; } export interface SetupAction { langKey: string; title: string; commands: string[]; /** * true の場合、判定環境(GCC)と挙動が異なる可能性のある代替コンパイラである旨を * 呼び出し側(CLI)で警告表示すべきであることを示す。 */ caveat?: string; } /** * コマンドが存在するかチェックする */ export declare function hasCommand(cmd: string): boolean; /** * 簡易的に SemVer を比較し、local が remote より古いか判定する */ export declare function isVersionOlder(localVer: string, remoteVer: string): boolean; /** * AtCoderのラベルからバージョン文字列をパースする */ export declare function extractVersionFromLabel(label: string): string; /** * 提出ラベルからどの言語キーであるかを判別する */ export declare function mapLabelToLangKey(label: string): string | null; /** * AtCoderの提出ページから言語バージョン一覧を取得する(キャッシュ付き) */ export declare function getRemoteLangVersions(workspaceRoot: string): Promise; /** * ローカルのコンパイラやランタイムの状態をチェックする */ export declare function detectLocalLangInfo(langKey: string): LocalLangInfo; /** * ワークスペースで使われている言語をスキャン */ export declare function scanWorkspaceLanguages(workspaceRoot: string, config: Config): string[]; /** * セットアップ用の実行コマンドを動的に決定する * * NOTE(Windows/GCC系): winget には「AtCoderの判定環境と挙動が一致するGCC/MinGW」に * 対応する決定版パッケージが存在しない。以前のコード(`winget install MSJS.MSVC`)は * 実在しないIDな上、そもそもMSVCはGCCと言語拡張・警告の挙動が異なるため * 自動導入対象として不適切だった。ここでは MSYS2 経由の MinGW-w64 導入に変更し、 * 「GCCそのものではなく近い代替である」ことを caveat として呼び出し側に伝える。 * 正確な自動化が難しい場合は、コマンドを空にして手動導入手順への案内に留める設計とする。 */ export declare function resolveSetupAction(langKey: string, local: LocalLangInfo, remote: AtCoderLangInfo, lang: 'ja' | 'en'): SetupAction | null; export interface RunCommandOptions { /** ミリ秒。省略時はタイムアウトなし */ timeoutMs?: number; /** 実行前にコマンド内容を stdout に出す(既定 true) */ echo?: boolean; } /** * 実際にコマンドを非同期で実行する。 * sudo やパッケージマネージャなどシステムを変更するコマンドを扱うため、 * - 実行前に何を実行するかを必ず表示する * - タイムアウトを指定できるようにし、対話待ちでハングし続けるのを防ぐ */ export declare function runCommandAsync(fullCommand: string, options?: RunCommandOptions): Promise; /** * SetupAction に含まれる全コマンドを順に実行するヘルパー。 * どれか1つでも失敗コードを返したら、それ以降は実行せず打ち切る。 */ export declare function runSetupAction(action: SetupAction, options?: RunCommandOptions): Promise;