import { SourceLocation } from '../../util/range';
import { type LintingResult, LintingResultCertainty } from '../linter-format';
import type { FlowrSearchElement, FlowrSearchElements } from '../../search/flowr-search';
import type { NormalizedAst, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
import type { MergeableRecord } from '../../util/objects';
import type { DataflowInformation } from '../../dataflow/info';
import type { FunctionInfo } from '../../queries/catalog/dependencies-query/function-info/function-info';
import type { ReadonlyFlowrAnalysisProvider } from '../../project/flowr-analyzer';
import { Ternary } from '../../util/logic';
export interface FunctionsResult extends LintingResult {
    function: string;
    loc: SourceLocation;
}
export interface FunctionsMetadata extends MergeableRecord {
    totalCalls: number;
    totalFunctionDefinitions: number;
}
export interface FunctionsToDetectConfig extends MergeableRecord {
    /**
     * The list of function names that should be marked in the given context.
     */
    fns: readonly string[];
}
/**
 * This helper object collects utility functions used to create linting rules that search for specific functions.
 */
export declare const functionFinderUtil: {
    createSearch: (functions: readonly string[]) => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["filter", "with", "filter"], ParentInformation, Promise<FlowrSearchElements<ParentInformation, [] | FlowrSearchElement<ParentInformation>[]>>>;
    processSearchResult: <T extends FlowrSearchElement<ParentInformation>[]>(elements: FlowrSearchElements<ParentInformation, T>, _config: unknown, _data: unknown, refineSearch?: (elements: T) => (T[number] & {
        certainty?: LintingResultCertainty;
    })[]) => {
        results: FunctionsResult[];
        '.meta': FunctionsMetadata;
    };
    prettyPrint: (functionType: string) => {
        query: (result: FunctionsResult) => string;
        full: (result: FunctionsResult) => string;
    };
    requireArgumentValue(element: FlowrSearchElement<ParentInformation>, pool: readonly FunctionInfo[], data: {
        normalize: NormalizedAst;
        dataflow: DataflowInformation;
        analyzer: ReadonlyFlowrAnalysisProvider;
    }, requireValue: RegExp | string | undefined): Ternary;
};
