Skip to content
This repository was archived by the owner on Nov 6, 2019. It is now read-only.

Commit bd795d0

Browse files
committed
Escape identifiers contains only underscore
Fix #73
1 parent 1e2c8b0 commit bd795d0

File tree

5 files changed

+24
-8
lines changed

5 files changed

+24
-8
lines changed

src/ast/typescript/typeScriptAstUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ fun String.escapeIfNeed(): String {
5555
private fun String.isIdentifier(): Boolean {
5656
if (isEmpty()) return false
5757
if (this in SHOULD_BE_ESCAPED) return false
58+
if (this.all { it == '_' }) return false
5859
if (!this[0].isIdentifierStart()) return false
5960
return this.drop(1).all { it.isIdentifierPart() }
6061
}

testData/escaping.d.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ external open class `is`<`interface`> {
2121
open fun `package`(a: Any): Boolean = definedExternally
2222
}
2323
external fun <T, U> When(value: `when`.Promise<T>, transform: (`val`: T) -> U): `fun`.Promise<U> = definedExternally
24+
external var `_`: `__`.`___` = definedExternally
2425

2526
// ------------------------------------------------------------------------------------------
2627
@file:JsQualifier("when")
@@ -29,3 +30,10 @@ package escaping.`when`
2930
external var `$`: Boolean = definedExternally
3031
external fun `package`(`as`: bar.string.`interface`, b: `$boo`.`typealias`): `$tring` = definedExternally
3132
external interface Promise<T>
33+
34+
// ------------------------------------------------------------------------------------------
35+
@file:JsQualifier("__")
36+
package escaping.`__`
37+
38+
external interface `___`
39+
external interface _OK_

testData/escaping.d.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,12 @@ declare namespace when {
3232
interface Promise<T> {}
3333
}
3434

35-
// val var is as interface package object when typealias fun in This
36-
// contains any of: $ \s
35+
declare var _: __.___;
36+
37+
declare namespace __ {
38+
interface ___ {
39+
}
40+
41+
interface _OK_ {
42+
}
43+
}

testData/mergeDeclarations/interfaces.d.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@file:JsQualifier("_")
2-
package interfaces._
2+
package interfaces.`_`
33

44
external interface LoDashStatic {
55
fun chain(value: Number): LoDashWrapper<Number>
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
package module
22

33
@JsModule("lodash")
4-
external val _: _.LoDashStatic = definedExternally
4+
external val `_`: `_`.LoDashStatic = definedExternally
55

66
// ------------------------------------------------------------------------------------------
77
@file:JsModule("lodash")
8-
package module._
8+
package module.`_`
99

1010
external interface LoDashStatic {
1111
@nativeInvoke
1212
operator fun invoke(value: Number): LoDashWrapper<Number>
1313
var VERSION: String
14-
var support: Support
14+
var support: `_`.Support
1515
}
1616
external interface Support {
1717
var argsClass: Boolean
1818
var argsObject: Boolean
1919
}
2020
external interface LoDashArrayWrapper<T> {
21-
fun difference(vararg others: Array<T>): LoDashArrayWrapper<T>
22-
fun difference(vararg others: List<T>): LoDashArrayWrapper<T>
21+
fun difference(vararg others: Array<T>): `_`.LoDashArrayWrapper<T>
22+
fun difference(vararg others: List<T>): `_`.LoDashArrayWrapper<T>
2323
}

0 commit comments

Comments
 (0)