Preserve Kotlin package segments in qualified names
ober
53564cde9654baa98badc585b75952956d2b88b7
--- a/lib/jerboa/typed/kotlin/print.ss +++ b/lib/jerboa/typed/kotlin/print.ss @@ -90,12 +90,27 @@ (def (kotlin-symbol-name sym) (sanitize-kotlin-ident (part->string sym))) + (def (kotlin-qualified-part-name part) + (let ([text (part->string part)]) + (let ([name + (let ([port (open-output-string)]) + (let loop ([chars (string->list text)]) + (unless (null? chars) + (write-kotlin-ident-char (car chars) port) + (loop (cdr chars)))) + (get-output-string port))]) + (cond + [(string=? name "") "_"] + [(not (identifier-start? (string-ref name 0))) + (string-append "_" name)] + [else name])))) + (def (name-parts->strings parts) (cond [(null? parts) '()] [(pair? parts) - (map kotlin-symbol-name parts)] - [else (list (kotlin-symbol-name parts))])) + (map kotlin-qualified-part-name parts)] + [else (list (kotlin-qualified-part-name parts))])) (def (kotlin-package-name parts) (join-strings (name-parts->strings parts) ".")) --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -47,6 +47,9 @@ (test "identifier predicate" (kotlin-symbol-name 'focused?) "focused_p") (test "identifier keyword escape" (kotlin-symbol-name 'class) "_class") (test "package" (kotlin-package-name '(sample typed calc)) "sample.typed.calc") +(test "qualified package segment keyword" + (kotlin-package-name '(java nio file Files)) + "java.nio.file.Files") (test "string literal escapes" (kotlin-string-literal "a\n\"b\"\\c") "\"a\\n\\\"b\\\"\\\\c\"")