@SuppressWarnings("unchecked")
    public T setExpressionStart(char expressionStart) {
        if (expressionStart == ' ' || expressionStart == '\n') {
            throw new IllegalArgumentException("expressionStart must not be set to " + expressionStart);
        }

        currentState.expressionStart = expressionStart;
        return (T) this;
    }
Sets the character used to start expressions in the current state when calling
{@link #write}, {@link #writeInline}, {@link #openBlock}, etc.

<p>By default, {@code $} is used to start expressions (for example
{@code $L}. However, some programming languages frequently give
syntactic meaning to {@code $}, making this an inconvenient syntactic
character for the AbstractCodeWriter. In these cases, the character used to
start a AbstractCodeWriter expression can be changed. Just like {@code $}, the
custom start character can be escaped using two subsequent start
characters (e.g., {@code $$}).

@param expressionStart Character to use to start expressions.
@return Returns self.
smithy-utils/src/main/java/software/amazon/smithy/utils/AbstractCodeWriter.java