/**
 * Sometimes we want to know all possible slicing criteria (obeying some filter).
 * This module provides a function to collect all slicing criteria.
 * @module
 */
import type { MergeableRecord } from '../../util/objects';
import type { SlicingCriteria } from './parse';
import type { ParentInformation, RNodeWithParent } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
import type { RProject } from '../../r-bridge/lang-4.x/ast/model/nodes/r-project';
/**
 * Defines the filter for collecting all possible slicing criteria.
 * @see DefaultAllVariablesFilter
 */
export interface SlicingCriteriaFilter extends MergeableRecord {
    /**
     * Inclusive minimum size of the slicing criteria (number of included slice points).
     * Should be at least `1` to make sense (and of course at most {@link SlicingCriteriaFilter#maximumSize|maximum size}).
     */
    minimumSize: number;
    /**
     * Inclusive maximum size of the slicing criteria (number of included slice points).
     * Should be at least `1` to make sense (and of course at least {@link SlicingCriteriaFilter#minimumSize|minimum size}).
     * <p>
     * Be really careful with this one, as the number of possible slicing criteria can grow exponentially with the maximum size.
     */
    maximumSize: number;
    /**
     * Function that determines the ids of all nodes that can be used as slicing criteria.
     */
    collectAll: (root: RNodeWithParent) => NodeId[];
}
/**
 * Will create all possible slicing criteria for the given ast, based on the {@link SlicingCriteriaFilter}.
 * The slicing criteria will be *ordered* (i.e., it will not return `[1:2,3:4]` and `[3:4,1:2]` if `maximumSize` \> 1).
 * If there are not enough matching nodes within the ast, this will return *no* slicing criteria!
 */
export declare function collectAllSlicingCriteria<OtherInfo>(ast: RProject<OtherInfo & ParentInformation>, filter: Readonly<SlicingCriteriaFilter>): Generator<SlicingCriteria, void, void>;
