import { CaretJuxtapositionParselet, CaretNode, CaretParser, TokensTag, } from "@caret-js/core"; import { VariableNode } from "../nodes/variable"; import { FunctionCallNode } from "../nodes/functionCall"; import { ParenthesesChildTag } from "./parentheses"; export class FunctionCallParselet extends CaretJuxtapositionParselet { constructor(private funcNames: Set) { super(); } canParse(left: CaretNode, right: CaretNode): boolean { return ( left instanceof VariableNode && this.funcNames.has(left.name) && right.hasTag(ParenthesesChildTag) ); } parse(parser: CaretParser, left: VariableNode, right: CaretNode): CaretNode { return FunctionCallNode.from(left.name, [right]).addTag( new TokensTag([...(left.getTag(TokensTag)?.ownTokens ?? [])]) ); } }