/**
 * PHP 8 modernization candidate finder (M1).
 *
 * Companion to M3 (php8_compat_check). Where M3 is the gating tool — "will
 * this PHP 8 merge break anything" — M1 is the post-merge modernization
 * tool. After PHP 8 lands, run M1 to surface places where the legacy
 * 7.2-style idiom can be tightened up using new language features.
 *
 * Sub-checks (each is a regex pattern over file content):
 *
 *   promotable-ctor           ctor with N parameters whose body only does
 *                             $this->x = $x assignments — collapse to
 *                             promoted constructor (PHP 8.0+).
 *   docblock-to-typed-property /** @var T *\/ above an untyped public/private
 *                             property — convert to inline `public T $x`
 *                             (PHP 7.4+).
 *   nullable-flag-to-syntax   /** @var T|null *\/ — same conversion but
 *                             produces `public ?T $x`.
 *   readonly-candidate        property only assigned in __construct — add
 *                             `readonly` modifier (PHP 8.1+).
 *   enum-from-class-consts    class with N const NAME = 'value' entries +
 *                             a getValues()/getOptions() method — convert
 *                             to a backed enum (PHP 8.1+).
 *   match-from-switch         switch ($x) { case A: return ...; ...}
 *                             without fall-through — convert to match.
 *
 * Each finding includes:
 *   - file, line, snippet
 *   - rule_id, severity (always "modernize" — informational, never blocking)
 *   - suggested_replacement: rough sketch of the new form (string, NOT
 *     auto-applied)
 *   - confidence: "high" | "medium" | "low"
 *
 * The tool is intentionally lossy: many candidates will be rejected after
 * human review (e.g., a property "only assigned in ctor" might still be
 * mutated via reflection for testing). The point is to triage thousands
 * of files into a small reviewable list, not to auto-fix.
 */
export type Php8MigrationRuleId = "promotable-ctor" | "docblock-to-typed-property" | "nullable-flag-to-syntax" | "readonly-candidate" | "enum-from-class-consts" | "match-from-switch";
export type Confidence = "high" | "medium" | "low";
export interface Php8Candidate {
    rule_id: Php8MigrationRuleId;
    file: string;
    line: number;
    snippet: string;
    description: string;
    suggested_replacement: string;
    confidence: Confidence;
}
export interface Php8MigrationCandidates {
    repo: string;
    scanned_files: number;
    total_candidates: number;
    by_rule: Array<{
        rule_id: Php8MigrationRuleId;
        count: number;
        description: string;
        samples: Php8Candidate[];
    }>;
    candidates: Php8Candidate[];
}
export declare function findPhp8MigrationCandidates(repo: string, options?: {
    file_pattern?: string;
    rules?: Php8MigrationRuleId[];
    max_samples_per_rule?: number;
    include_vendor?: boolean;
}): Promise<Php8MigrationCandidates>;
//# sourceMappingURL=php8-migration-candidates-tools.d.ts.map