HamzaHassanain/polyman

Simplify Config.json by Auto-Deriving Names from File Paths

オープン

#12 opened on 2025/11/24

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (2 件のフォーク)auto 404
bugdocumentationenhancementgood first issuehelp wanted

Repository metrics

Stars
 (33 個のスター)
PR merge metrics
 (PR metrics pending)

説明

Currently, the Config.json file requires explicitly specifying a name field for solutions, generators, checkers, and validators, even though this name can be automatically derived from the file path. This creates unnecessary verbosity, increases the chance of typos/inconsistencies, and makes configuration more error-prone.

Current Configuration (Verbose):

{
  "solutions": [
    {
      "name": "main",
      "source": "./solutions/main.cpp",
      "tag": "MA",
      "sourceType": "cpp.g++17"
    },
    {
      "name": "correct2",
      "source": "./solutions/correct2.java",
      "tag": "OK",
      "sourceType": "java.11"
    }
  ],
  "generators": [
    {
      "name": "gen-random",
      "source": "./generators/gen-random.cpp"
    },
    {
      "name": "gen-edge",
      "source": "./generators/gen-edge.cpp"
    }
  ],
  "validator": {
    "name": "validator",
    "source": "./validator/validator.cpp"
  }
}

Derived names (automatic):

  • ./solutions/main.cpp → name: main
  • ./solutions/correct2.java → name: correct2
  • ./generators/gen-random.cpp → name: gen-random
  • ./validator/validator.cpp → name: validator

Keep name as optional

  • If name is present, use it (backward compatible)
  • If name is absent, derive it from source
  • Display deprecation warning if name is specified
interface LocalSolution {
  name?: string; // Optional now
  source: string;
  tag: SolutionTag;
  sourceType: SolutionSourceType;
}

function getSolutionName(solution: LocalSolution): string {
  if (solution.name) {
    // Deprecated: show warning
    console.warn(`[DEPRECATED] Explicit 'name' field is no longer needed for ${solution.source}`);
    return solution.name;
  }
  return deriveNameFromPath(solution.source);
}

コントリビューターガイド