@borgar/fx
Version:
Utilities for working with Excel formulas
151 lines (138 loc) • 4.14 kB
text/typescript
import type {
Node,
Identifier,
ReferenceIdentifier,
Literal,
ErrorLiteral,
UnaryExpression,
BinaryExpression,
CallExpression,
ArrayExpression,
LambdaExpression,
LetExpression,
LetDeclarator,
AstExpression
} from './astTypes.ts';
import {
ARRAY,
BINARY,
CALL,
ERROR_LITERAL,
IDENTIFIER,
LAMBDA,
LET,
LET_DECL,
LITERAL,
REFERENCE,
UNARY
} from './constants.ts';
/**
* Determines whether the specified node is an Identifier.
* @param node An AST node.
* @returns True if the specified token is an Identifier, False otherwise.
*/
export function isIdentifierNode (node?: Node | null): node is Identifier {
return node?.type === IDENTIFIER;
}
/**
* Determines whether the specified node is a ReferenceIdentifier.
* @param node An AST node.
* @returns True if the specified token is a ReferenceIdentifier, False otherwise.
*/
export function isReferenceNode (node?: Node | null): node is ReferenceIdentifier {
return node?.type === REFERENCE;
}
/**
* Determines whether the specified node is a Literal.
* @param node An AST node.
* @returns True if the specified token is a Literal, False otherwise.
*/
export function isLiteralNode (node?: Node | null): node is Literal {
return node?.type === LITERAL;
}
/**
* Determines whether the specified node is an ErrorLiteral.
* @param node An AST node.
* @returns True if the specified token is an ErrorLiteral, False otherwise.
*/
export function isErrorNode (node?: Node | null): node is ErrorLiteral {
return node?.type === ERROR_LITERAL;
}
/**
* Determines whether the specified node is a UnaryExpression.
* @param node An AST node.
* @returns True if the specified token is a UnaryExpression, False otherwise.
*/
export function isUnaryNode (node?: Node | null): node is UnaryExpression {
return node?.type === UNARY;
}
/**
* Determines whether the specified node is a BinaryExpression.
* @param node An AST node.
* @returns True if the specified token is a BinaryExpression, False otherwise.
*/
export function isBinaryNode (node?: Node | null): node is BinaryExpression {
return node?.type === BINARY;
}
/**
* Determines whether the specified node is a CallExpression.
* @param node An AST node.
* @returns True if the specified token is a CallExpression, False otherwise.
*/
export function isCallNode (node?: Node | null): node is CallExpression {
return node?.type === CALL;
}
/**
* Determines whether the specified node is a ArrayExpression.
* @param node An AST node.
* @returns True if the specified token is a ArrayExpression, False otherwise.
*/
export function isArrayNode (node?: Node | null): node is ArrayExpression {
return node?.type === ARRAY;
}
/**
* Determines whether the specified node is a LambdaExpression.
* @param node An AST node.
* @returns True if the specified token is a LambdaExpression, False otherwise.
*/
export function isLambdaNode (node?: Node | null): node is LambdaExpression {
return node?.type === LAMBDA;
}
/**
* Determines whether the specified node is a LetExpression.
* @param node An AST node.
* @returns True if the specified token is a LetExpression, False otherwise.
*/
export function isLetNode (node?: Node | null): node is LetExpression {
return node?.type === LET;
}
/**
* Determines whether the specified node is a LetDeclarator.
* @param node An AST node.
* @returns True if the specified token is a LetDeclarator, False otherwise.
*/
export function isLetDeclaratorNode (node?: Node | null): node is LetDeclarator {
return node?.type === LET_DECL;
}
/**
* Determines whether the specified node is a AstExpression.
* @param node An AST node.
* @returns True if the specified token is a AstExpression, False otherwise.
*/
export function isExpressionNode (node?: Node | null): node is AstExpression {
const type = node?.type;
if (type) {
return (
type === REFERENCE ||
type === LITERAL ||
type === ERROR_LITERAL ||
type === UNARY ||
type === BINARY ||
type === CALL ||
type === ARRAY ||
type === LAMBDA ||
type === LET
);
}
return false;
}