import {Command, ParseContext, StrTerm} from "./command.js"; import {LexInput} from "../lexer.js"; import {StrVM} from "../vm.js"; import {Awaitable} from "../../util/types.js"; export class Suffix extends Command<{ with: StrTerm }> { attemptParse(context: ParseContext): { with: StrTerm } { return { with: context.popTerm(), } } getDisplayName(): string { return 'suffix' } isParseCandidate(token: LexInput): boolean { return this.isKeyword(token, 'suffix') } execute(vm: StrVM, data: { with: StrTerm }): Awaitable { return vm.replaceContextMatchingTerm(ctx => ({ string: sub => `${sub}${ctx.resolveString(data.with)}`, })) } }