I'm writing a grammar in Rascal for handling interpolated strings while ensuring that whitespace around interpolated parts is preserved. However, my pretty printer currently strips or modifies whitespace, and I need help fixing it.
My Grammar:
lexical RawText = ![${}];
syntax Expr
= InterpolatedString;
syntax InterpolatedString
= interpolatedString: "s\"" RawText InterpolatedPart RawText "\"";
syntax InterpolatedPart
= interpolatedPart: "${" Id variable "}";
My PrettyPrinter:
public str toString(interpolatedPart(str variable)){
return "${<variable>}";
}
public str toString(interpolatedPart(str variable)){
return "${<variable>}";
}
public str toString(interpolatedString(str text1, InterpolatedPart intpart, str text2)){
return "s\"<text1><toString(intpart)><text2>\"";
}
My Example: let x = s" ${foobar} "
The Output I expected from my prettyprinter: let x = s" ${foobar} "
The Output I got: let x = s"${foobar}"