Quote Kotlin keyword member names
ober
4128d613222aa16f9d2cb8b7c311c73fb4760ecf
--- a/lib/jerboa/typed/kotlin/print.ss +++ b/lib/jerboa/typed/kotlin/print.ss @@ -90,6 +90,24 @@ (def (kotlin-symbol-name sym) (sanitize-kotlin-ident (part->string sym))) + (def (sanitize-kotlin-member-ident raw) + (let ([port (open-output-string)]) + (let loop ([chars (string->list raw)]) + (unless (null? chars) + (write-kotlin-ident-char (car chars) port) + (loop (cdr chars)))) + (let ([name (get-output-string port)]) + (cond + [(string=? name "") "_"] + [(not (identifier-start? (string-ref name 0))) + (string-append "_" name)] + [(kotlin-keyword? name) + (string-append "`" name "`")] + [else name])))) + + (def (kotlin-member-name sym) + (sanitize-kotlin-member-ident (part->string sym))) + (def (kotlin-qualified-part-name part) (let ([text (part->string part)]) (let ([name @@ -280,7 +298,7 @@ (string-append (kotlin-member-target->string (kt-member-call-target expr)) "." - (kotlin-symbol-name (kt-member-call-name expr)) + (kotlin-member-name (kt-member-call-name expr)) "(" (join-strings (map kotlin-expr->string (kt-member-call-args expr)) ", ") ")")] @@ -288,7 +306,7 @@ (string-append (kotlin-member-target->string (kt-member-get-target expr)) "." - (kotlin-symbol-name (kt-member-get-name expr)))] + (kotlin-member-name (kt-member-get-name expr)))] [(kt-index-get? expr) (string-append (kotlin-member-target->string (kt-index-get-target expr)) --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -53,6 +53,13 @@ (test "expression keyword name escape" (kotlin-expr->string (make-kt-name '(out))) "_out") +(test "member keyword name is backticked" + (kotlin-expr->string + (make-kt-member-call + (make-kt-name '(assets)) + 'open + (list (make-kt-lit 'String "box_types.csv")))) + "assets.`open`(\"box_types.csv\")") (test "string literal escapes" (kotlin-string-literal "a\n\"b\"\\c") "\"a\\n\\\"b\\\"\\\\c\"")