import { LogicalOperator, UnaryExpression } from 'estree'
import { Rule } from 'eslint'
type ParentedNode = Rule.NodeParentExtension & UnaryExpression
/**
 * Checks whether the transformed expression must be wrapped in parentheses to
 * bind correctly inside its parent node. The original `!(…)` expression binds
 * as tightly as any unary operator, but the produced `&&`/`||` chain binds much
 * looser, so any parent that binds tighter than the produced operator would
 * otherwise capture only the first operand of the result. Parentheses are also
 * required when the parent is a `??` expression, which cannot be mixed with
 * `&&`/`||` without grouping, and inside a `for` statement initializer, where
 * the grammar forbids an unparenthesized `in` operator.
 *
 * @param node - The negated expression ESLint node being fixed.
 * @param targetOperator - The logical operator produced by the fix.
 * @returns True if the fix result must be wrapped in parentheses.
 */
export declare function needsParentParens(
  node: ParentedNode,
  targetOperator: LogicalOperator,
): boolean
export {}
