UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

50 lines (49 loc) 4.43 kB
import type { RAstNodeBase, Location, NoInfo, WithChildren } from '../model'; import { RNode } from '../model'; import { RType } from '../type'; import type { RSymbol } from './r-symbol'; /** * Holds a list of expressions (and hence may be the root of an AST, summarizing all expressions in a file). * The `grouping` property holds information on if the expression list is structural or created by a wrapper like `{}` or `()`. */ export interface RExpressionList<Info = NoInfo> extends WithChildren<Info, RNode<Info>>, RAstNodeBase<Info, string | undefined>, Partial<Location> { readonly type: RType.ExpressionList; /** encodes wrappers like `{}` or `()` */ readonly grouping: undefined | [start: RSymbol<Info>, end: RSymbol<Info>]; } /** * Helper for working with {@link RExpressionList} AST nodes. */ export declare const RExpressionList: { readonly name: "RExpressionList"; /** * Type guard for {@link RExpressionList} nodes. */ readonly is: <Info = object>(this: void, node: RNode<Info> | undefined) => node is RExpressionList<Info>; /** * Type guard for implicit {@link RExpressionList} nodes, i.e., expression lists that are not created by a wrapper like `{}`. */ readonly isImplicit: <Info = object>(this: void, node: RNode<Info> | undefined) => node is RExpressionList<Info>; /** * Returns the grouping symbol at the start of the expression list, if it exists. For example, for an expression list created by `{ ... }`, this would return the symbol for `{`. */ readonly groupStart: <Info = object>(this: void, node: RExpressionList<Info>) => RSymbol<Info> | undefined; /** * Returns the grouping symbol at the end of the expression list, if it exists. For example, for an expression list created by `{ ... }`, this would return the symbol for `}`. */ readonly groupEnd: <Info = object>(this: void, node: RExpressionList<Info>) => RSymbol<Info> | undefined; readonly getLocation: (this: void, node: RNode) => import("../../../../../util/range").SourceLocation | undefined; readonly getId: (this: void, node: RNode<import("../processing/decorate").ParentInformation>) => import("../processing/node-id").NodeId; readonly getType: (this: void, node: RNode) => RType; readonly visitAst: <OtherInfo = object>(this: void, nodes: import("../model").SingleOrArrayOrNothing<RNode<OtherInfo>>, onVisit?: import("../processing/visitor").OnEnter<OtherInfo>, onExit?: import("../processing/visitor").OnExit<OtherInfo>) => void; readonly collectAllIds: <OtherInfo>(this: void, nodes: import("../model").SingleOrArrayOrNothing<RNode<OtherInfo & import("../processing/decorate").ParentInformation>>) => Set<import("../processing/node-id").NodeId>; readonly directChildren: <OtherInfo>(this: void, node: RNode<OtherInfo>) => readonly (RNode<OtherInfo> | typeof import("./r-function-call").EmptyArgument)[]; readonly directParent: <OtherInfo>(this: void, node: RNode<OtherInfo & import("../processing/decorate").ParentInformation>, idMap: import("../processing/decorate").AstIdMap<OtherInfo & import("../processing/decorate").ParentInformation>) => RNode<OtherInfo & import("../processing/decorate").ParentInformation> | undefined; readonly iterateParents: <OtherInfo>(this: void, node: RNode<OtherInfo & import("../processing/decorate").ParentInformation> | undefined, idMap: import("../processing/decorate").AstIdMap<OtherInfo & import("../processing/decorate").ParentInformation>) => Generator<RNode<OtherInfo & import("../processing/decorate").ParentInformation>>; readonly depth: (this: void, node: RNode<import("../processing/decorate").ParentInformation>, idMap: import("../processing/decorate").AstIdMap<import("../processing/decorate").ParentInformation>) => number; readonly collectAllIdsWithStop: <OtherInfo>(this: void, nodes: import("../model").SingleOrArrayOrNothing<RNode<OtherInfo & import("../processing/decorate").ParentInformation>>, stop: (node: RNode<OtherInfo & import("../processing/decorate").ParentInformation>) => boolean) => Set<import("../processing/node-id").NodeId>; readonly lexeme: <R extends RNode<import("../processing/decorate").ParentInformation>>(this: void, node: R | undefined) => R extends { lexeme: string; } ? string : string | undefined; readonly documentation: typeof import("../../../../roxygen2/documentation-provider").getDocumentationOf; };