import type { RedirectResult } from '../../../../context/session_context.ts';
import type { TSNodeLike } from '../../../../shell/types.ts';
import { type SessionState } from '../../../session/session.ts';
import type { BuiltinCall } from '../types.ts';
import type { AliasMark } from './types.ts';
/** Define or print aliases. `mark` is the read the definition sits in:
 * bash expands aliases as it reads, so the commands of that read still see
 * the value from before it. */
export declare function handleAlias(args: string[], session: SessionState, mark: AliasMark): RedirectResult;
/** Remove aliases: the named ones, or all under `-a`. The commands of the
 * read at `mark` still see the aliases it removes. */
export declare function handleUnalias(args: string[], session: SessionState, mark: AliasMark): RedirectResult;
/**
 * Keep `expand_aliases` as the read at `mark` found it, before a `shopt` in
 * that read changes it: the commands of that read were expanded, or not,
 * already. Mirrors Python's note_expanding.
 */
export declare function noteExpanding(session: SessionState, mark: AliasMark): void;
/**
 * The alias names a command word would expand as right now. bash checks a
 * word where a command starts for an alias before it checks for a reserved
 * word, so one of these names is a command there even when it is spelled
 * `fi` or `do`. Mirrors Python's expanding_aliases.
 */
export declare function expandingAliases(session: SessionState): ReadonlySet<string>;
/**
 * The alias names a stored function's body is read with
 * (`bodyAliasValues`). Mirrors Python's body_aliases.
 */
export declare function bodyAliases(session: SessionState, name: string): ReadonlySet<string>;
/**
 * The aliases a stored function's body is read with, by name: the ones its
 * definition saw, or the session's own for a definition that kept none (one
 * restored from a stored session). Mirrors Python's body_alias_values.
 */
export declare function bodyAliasValues(session: SessionState, name: string): Map<string, string>;
/**
 * The aliases a function defined by `node` keeps for its body. bash expands
 * a function's aliases as it reads the definition, so the body runs them as
 * they were then, whatever is defined or removed later: the aliases a use in
 * the read at `mark` would expand, none while `expand_aliases` is off, and
 * inside another function's body that body's own, less any alias being
 * expanded where the definition stands. What is read later (`eval`,
 * `source`, a trap action, `$( )`) reads the aliases as they are then.
 * Mirrors Python's alias_view.
 */
export declare function aliasView(session: SessionState, node: TSNodeLike, mark: AliasMark): Record<string, string>;
/**
 * The alias text a command word expands to, or null. bash expands aliases
 * as it reads a command, so the word sees the aliases, and
 * `expand_aliases`, as the read at `mark` found them. Null when they are
 * not being expanded, when the word is no alias, or when it is guarded. In
 * a function's body the aliases are the ones its definition saw
 * (`aliasView`). Mirrors Python's alias_value.
 */
export declare function aliasValue(session: SessionState, name: string, mark: AliasMark, blocked: ReadonlySet<string>): string | null;
/**
 * Replace alias words, preserving the rest of the command and its guards.
 * Each insertion inherits the replaced word's guards and adds its name.
 * A trailing blank checks the next caller word through the same loop.
 */
export declare function aliasCommandText(session: SessionState, node: TSNodeLike, head: TSNodeLike, mark: AliasMark): [string, readonly ReadonlySet<string>[]] | null;
/** The read a command at `row` of the running parse belongs to (`readRow`).
 * Mirrors Python's alias_mark. */
export declare function aliasMark(session: SessionState, row: number): AliasMark;
/** The `alias` arm; the row marks the read the definition sits in. */
export declare function aliasBuiltin(call: BuiltinCall): Promise<RedirectResult>;
/** The `unalias` arm. */
export declare function unaliasBuiltin(call: BuiltinCall): Promise<RedirectResult>;
//# sourceMappingURL=alias.d.ts.map