HamzaHassanain/polyman

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

Aperta

#12 aperta il 24 nov 2025

 (0 commenti) (0 reazioni) (0 assegnatari)TypeScript (2 fork)auto 404
bugdocumentationenhancementgood first issuehelp wanted

Metriche repository

Star
 (33 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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);
}

Guida contributor