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

Commit 2c6c3b6

Browse files
committed
Add -Xdeclare-is-optional option to make declare keyword as optional for top level declarations
Partial fix for #50
1 parent 4d78e74 commit 2c6c3b6

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ts2kt",
3-
"version": "0.1.2",
3+
"version": "0.1.3",
44
"description": "Converter of TypeScript definition files to Kotlin declarations",
55
"author": "JetBrains s.r.o.",
66
"homepage": "https://github.com/Kotlin/ts2kt",

src/runner/runner.kt

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,18 @@ private fun mkDirs(dirs: String): Boolean {
6767
}
6868

6969
// TODO share more code between [translateToDir] and [translateToFile]
70-
fun translateToDir(sources: List<String>, outDir: String, basePackage: String? = null, libraries: List<String> = emptyList()) {
70+
fun translateToDir(
71+
sources: List<String>,
72+
outDir: String, basePackage: String? = null,
73+
libraries: List<String> = emptyList(),
74+
declareModifierIsOptional: Boolean = false
75+
) {
7176
var isOutDirExists = false
7277

7378
for (src in sources) {
7479
console.log("Converting $src")
7580
val baseSrcName = path.basename(src, TYPESCRIPT_DEFINITION_FILE_EXT)
76-
val packageParts = translate(src, basePackage ?: "")
81+
val packageParts = translate(src, basePackage ?: "", declareModifierIsOptional)
7782

7883
if (packageParts.isEmpty()) {
7984
console.log("Nothing was converted")
@@ -120,7 +125,13 @@ fun translateToDir(sources: List<String>, outDir: String, basePackage: String? =
120125
}
121126
}
122127

123-
data class CliArguments(val sources: List<String>, val outDir: String, val basePackage: String?, val libraries: List<String>)
128+
data class CliArguments(
129+
val sources: List<String>,
130+
val outDir: String,
131+
val basePackage: String?,
132+
val libraries: List<String>,
133+
val declareModifierIsOptional: Boolean
134+
)
124135

125136
private fun printUsage(program: String) {
126137
console.log("""
@@ -167,6 +178,7 @@ fun parseArguments(): CliArguments? {
167178

168179
var destination: String? = null
169180
var basePackage: String? = null
181+
var declareModifierIsOptional = false
170182

171183
while (it.hasNext()) {
172184
val arg = it.next()
@@ -206,6 +218,7 @@ fun parseArguments(): CliArguments? {
206218
console.log("""
207219
Usage: $program <options> <d.ts files>
208220
where possible options include:
221+
-Xdeclare-is-optional Treat declare keyword for top level declarations as optional
209222
-Xdiagnostic-level <level> How report diagnostics, ${DiagnosticLevel.DEFAULT} by default,
210223
where level can be any of {${DiagnosticLevel.values().joinToString()}}
211224
-Xtrack-unsupported-kinds Enable tracking unsupported node kinds and print statistic at the finish
@@ -224,6 +237,9 @@ fun parseArguments(): CliArguments? {
224237
"-Xtrack-unsupported-kinds" -> {
225238
trackUnsupportedKinds = true
226239
}
240+
"-Xdeclare-is-optional" -> {
241+
declareModifierIsOptional = true
242+
}
227243
else -> {
228244
other += arg
229245
}
@@ -246,16 +262,16 @@ fun parseArguments(): CliArguments? {
246262
return null
247263
}
248264

249-
return CliArguments(sources, destination ?: ".", basePackage, emptyList())
265+
return CliArguments(sources, destination ?: ".", basePackage, emptyList(), declareModifierIsOptional)
250266
}
251267

252268
fun main(args: Array<String>) {
253269
// do nothing when it loaded as library
254270
if (module.parent != null) return
255271

256-
val (sources, destination, basePackage, libraries) = parseArguments() ?: return
272+
val (sources, destination, basePackage, libraries, declareModifierIsOptional) = parseArguments() ?: return
257273

258-
translateToDir(sources, destination, basePackage, libraries)
274+
translateToDir(sources, destination, basePackage, libraries, declareModifierIsOptional)
259275

260276
if (trackUnsupportedKinds) {
261277
reportUnsupportedKinds()

src/runner/translate.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ private val host = FileSystemBasedLSH(mapOf(), "")
5454
private val documentRegistry = createDocumentRegistry()
5555
private val languageService = createLanguageService(host, documentRegistry)
5656

57-
fun translate(srcPath: String, basePackageName: String): List<KtPackagePart> {
57+
fun translate(srcPath: String, basePackageName: String, declareModifierIsOptional: Boolean = false): List<KtPackagePart> {
5858
val normalizeSrcPath = normalizePath(srcPath)
5959

6060
val file2scriptSnapshot = hashMapOf(LIB_D_TS_WITH_SNAPSHOT, normalizeSrcPath to getScriptSnapshotFromFile(normalizeSrcPath))
@@ -236,7 +236,7 @@ fun translate(srcPath: String, basePackageName: String): List<KtPackagePart> {
236236
isOverride = ::isOverride,
237237
isOverrideProperty = ::isOverrideProperty,
238238
qualifier = listOf(),
239-
requiredModifier = SyntaxKind.DeclareKeyword
239+
requiredModifier = if (declareModifierIsOptional) null else SyntaxKind.DeclareKeyword
240240
)
241241

242242
// TODO fix

0 commit comments

Comments
 (0)