From f22c5146533b2499fe30f3819b4f176cb4adaf02 Mon Sep 17 00:00:00 2001 From: Alexey Trilis Date: Mon, 10 Aug 2020 12:37:15 +0300 Subject: [PATCH 1/2] Append informtional note to each generated file Users can use --no-header to disable this feature --- .../src/org/jetbrains/dukat/cli/cli.kt | 55 ++++++++++++++----- .../dukat/compiler/tests/CliBodyTranslator.kt | 2 +- .../dukat/compiler/tests/CliTranslator.kt | 2 +- .../tests/extended/DescriptorTests.kt | 2 +- node-package/bin/dukat-cli.js | 10 ++-- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/command-line/src/org/jetbrains/dukat/cli/cli.kt b/command-line/src/org/jetbrains/dukat/cli/cli.kt index 5d3b2bf25..fb44274ef 100644 --- a/command-line/src/org/jetbrains/dukat/cli/cli.kt +++ b/command-line/src/org/jetbrains/dukat/cli/cli.kt @@ -34,6 +34,13 @@ import kotlin.system.exitProcess val PACKAGE_DIR = System.getProperty("dukat.cli.internal.packagedir") +private fun getHeaderText(version: String?) = """ + // NOTE: THIS FILE IS AUTO-GENERATED BY DUKAT (${version ?: "UNKNOWN VERSION"}) + // See github.com/kotlin/dukat for details + + + """.trimIndent() + @Serializable private data class Report(val outputs: List) @@ -50,11 +57,12 @@ fun translateBinaryBundle( outDir: String?, translator: InputTranslator, pathToReport: String?, - generateDescriptors: Boolean + generateDescriptors: Boolean, + header: String? ) { if (!generateDescriptors) { val translatedUnits = translateModule(input, translator) - compileUnits(translatedUnits, outDir, pathToReport) + compileUnits(translatedUnits, outDir, pathToReport, header) } else { writeDescriptorsToFile(translator, input, outDir ?: "./") } @@ -65,18 +73,20 @@ fun translateWithBodyBinaryBundle( outDir: String?, moduleNameResolver: ModuleNameResolver, packageName: NameEntity?, - pathToReport: String? + pathToReport: String?, + header: String? ) { val translator = createJsByteArrayWithBodyTranslator(moduleNameResolver, packageName) val translatedUnits = translateModule(input, translator) - compileUnits(translatedUnits, outDir, pathToReport) + compileUnits(translatedUnits, outDir, pathToReport, header) } private fun compile( filenames: List, outDir: String?, translator: InputTranslator, - pathToReport: String? + pathToReport: String?, + header: String? ) { val translatedUnits: List = filenames.flatMap { filename -> val sourceFile = File(filename) @@ -84,10 +94,10 @@ private fun compile( translateModule(sourceFile.absolutePath, translator) } - compileUnits(translatedUnits, outDir, pathToReport) + compileUnits(translatedUnits, outDir, pathToReport, header) } -fun compileUnits(translatedUnits: List, outDir: String?, pathToReport: String?) { +fun compileUnits(translatedUnits: List, outDir: String?, pathToReport: String?, header: String?) { val dirFile = File(outDir ?: "./") if (translatedUnits.isNotEmpty()) { dirFile.mkdirs() @@ -109,7 +119,7 @@ fun compileUnits(translatedUnits: List, outDir: String?, output.add(resolvedTarget.name) } - resolvedTarget.writeText(translationUnitResult.content) + resolvedTarget.writeText((header ?: "") + translationUnitResult.content) } else { val fileName = when (translationUnitResult) { is TranslationErrorInvalidFile -> translationUnitResult.fileName @@ -159,6 +169,7 @@ where possible options include: -m String use this value as @file:JsModule annotation value whenever such annotation occurs -d destination directory for files with converted declarations (by default declarations are generated in current directory) -v, -version print version + --no-header don't print note with link to dukat repository at the beginning of each file """.trimIndent() ) } @@ -172,7 +183,9 @@ private data class CliOptions( val reportPath: String?, val tsDefaultLib: String, val generateDescriptors: Boolean, - val tsConfig: String? + val tsConfig: String?, + val noHeader: Boolean, + val version: String? ) @@ -190,6 +203,8 @@ private fun process(args: List): CliOptions? { var reportPath: String? = null var generateDescriptors = false var tsConfig: String? = null + var noHeader = false + var version: String? = argsIterator.next() while (argsIterator.hasNext()) { val arg = argsIterator.next() @@ -231,6 +246,10 @@ private fun process(args: List): CliOptions? { jsModuleName = packageNameString } + "--no-header" -> { + noHeader = true + } + "-r" -> { reportPath = argsIterator.readArg() @@ -277,11 +296,11 @@ following file extensions are supported: val tsDefaultLib = File(PACKAGE_DIR, "d.ts.libs/lib.d.ts").absolutePath - return CliOptions(sources, outDir, basePackageName, jsModuleName, reportPath, tsDefaultLib, generateDescriptors, tsConfig) + return CliOptions(sources, outDir, basePackageName, jsModuleName, reportPath, tsDefaultLib, generateDescriptors, tsConfig, noHeader, version) } fun main(vararg args: String) { - if (args.isEmpty()) { + if (args.size <= 1) { printUsage("dukat") return } @@ -308,6 +327,8 @@ fun main(vararg args: String) { val isIdlTranslation = options.sources.all { it.endsWith(IDL_DECLARATION_EXTENSION) || it.endsWith(WEBIDL_DECLARATION_EXTENSION) } + val headerText = if (options.noHeader) null else getHeaderText(options.version) + when { isDTsTranslation -> { translateBinaryBundle( @@ -315,7 +336,8 @@ fun main(vararg args: String) { options.outDir, JsRuntimeByteArrayTranslator(TypescriptLowerer(moduleResolver, options.basePackageName)), options.reportPath, - options.generateDescriptors + options.generateDescriptors, + headerText ) } @@ -325,7 +347,8 @@ fun main(vararg args: String) { options.outDir, JsRuntimeByteArrayTranslator(JavaScriptLowerer(moduleResolver)), options.reportPath, - options.generateDescriptors + options.generateDescriptors, + headerText ) } @@ -334,7 +357,8 @@ fun main(vararg args: String) { options.sources, options.outDir, IdlInputTranslator(DirectoryReferencesResolver()), - options.reportPath + options.reportPath, + headerText ) } @@ -344,7 +368,8 @@ fun main(vararg args: String) { options.outDir, moduleResolver, options.basePackageName, - options.reportPath + options.reportPath, + headerText ) } diff --git a/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliBodyTranslator.kt b/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliBodyTranslator.kt index e3290a8a1..447c8f533 100644 --- a/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliBodyTranslator.kt +++ b/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliBodyTranslator.kt @@ -31,6 +31,6 @@ class CliBodyTranslator : CliTranslator() { ConstNameResolver(moduleName) } - translateWithBodyBinaryBundle(binData, dirName, moduleNameResolver, null, reportPath) + translateWithBodyBinaryBundle(binData, dirName, moduleNameResolver, null, reportPath, null) } } \ No newline at end of file diff --git a/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliTranslator.kt b/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliTranslator.kt index f5006beb4..5e3607969 100644 --- a/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliTranslator.kt +++ b/compiler/test/src/org/jetbrains/dukat/compiler/tests/CliTranslator.kt @@ -43,7 +43,7 @@ open class CliTranslator(private val translator: ECMAScriptLowerer = TypescriptL ConstNameResolver(moduleName) } - translateBinaryBundle(binData, dirName, JsRuntimeByteArrayTranslator(TypescriptLowerer(moduleNameResolver, null)), reportPath, withDescriptors) + translateBinaryBundle(binData, dirName, JsRuntimeByteArrayTranslator(TypescriptLowerer(moduleNameResolver, null)), reportPath, withDescriptors, null) } } diff --git a/compiler/test/src/org/jetbrains/dukat/compiler/tests/extended/DescriptorTests.kt b/compiler/test/src/org/jetbrains/dukat/compiler/tests/extended/DescriptorTests.kt index 28a20d5d3..83e90aeeb 100644 --- a/compiler/test/src/org/jetbrains/dukat/compiler/tests/extended/DescriptorTests.kt +++ b/compiler/test/src/org/jetbrains/dukat/compiler/tests/extended/DescriptorTests.kt @@ -37,7 +37,7 @@ class DescriptorTests { val targetPath = "./build/test/data/descriptors/$name" File(targetPath).deleteRecursively() - compileUnits(translateModule(sourceSet), "./build/test/data/descriptors/$name", null) + compileUnits(translateModule(sourceSet), "./build/test/data/descriptors/$name", null, null) val flattenedSourceSet = sourceSet.copy(sources = sourceSet.sources.flatMap { sourceFile -> sourceFile.root.flattenDeclarations().map { diff --git a/node-package/bin/dukat-cli.js b/node-package/bin/dukat-cli.js index a6dd1bdf5..d8d025152 100644 --- a/node-package/bin/dukat-cli.js +++ b/node-package/bin/dukat-cli.js @@ -50,7 +50,7 @@ function getStdLib() { function processArgs(args) { var skip_2args = new Set(["-d", "-p", "-m", "-r"]); - var ordinary_args = new Set(["--descriptors"]); + var ordinary_args = new Set(["--descriptors", "--no-header"]); var count = 0; var binaryOutput = null; @@ -121,9 +121,9 @@ function createReadableStream(binary, onData, onEnd) { function cliMode(args) { var packageDir = path.resolve(__dirname, ".."); + var version = require(path.resolve(packageDir, "package.json")).version; if (args[0] == "-v" || args[0] == "version") { - var version = require(path.resolve(packageDir, "package.json")).version; console.log("dukat version " + version); return; } @@ -154,7 +154,8 @@ function cliMode(args) { var commandArgs = [ "-Ddukat.cli.internal.packagedir=" + packageDir, - "-cp", classPath, "org.jetbrains.dukat.cli.CliKt"].concat(args); + "-cp", classPath, "org.jetbrains.dukat.cli.CliKt", + version].concat(args); var dukatProcess = run("java", commandArgs); inputStream.pipe(dukatProcess.stdin); @@ -172,7 +173,8 @@ function cliMode(args) { } else if (is_idl) { var commandArgs = [ "-Ddukat.cli.internal.packagedir=" + packageDir, - "-cp", classPath, "org.jetbrains.dukat.cli.CliKt"].concat(args); + "-cp", classPath, "org.jetbrains.dukat.cli.CliKt", + version].concat(args); return run("java", commandArgs); } From 6fb1a5c591cb86091ac0f95d3a1ffb0ce8978210 Mon Sep 17 00:00:00 2001 From: Alexey Trilis Date: Tue, 11 Aug 2020 13:30:12 +0300 Subject: [PATCH 2/2] Add new flag to usage in readme --- README.md | 2 ++ command-line/src/org/jetbrains/dukat/cli/cli.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 087a899c4..c85f503d2 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ where possible options include: -m String use this value as @file:JsModule annotation value whenever such annotation occurs -d destination directory for files with converted declarations (by default declarations are generated in current directory) -v, -version print version + --no-header don't print note with link to dukat repository at the beginning of each file + ``` # How to setup and build diff --git a/command-line/src/org/jetbrains/dukat/cli/cli.kt b/command-line/src/org/jetbrains/dukat/cli/cli.kt index fb44274ef..f9c740acc 100644 --- a/command-line/src/org/jetbrains/dukat/cli/cli.kt +++ b/command-line/src/org/jetbrains/dukat/cli/cli.kt @@ -169,7 +169,7 @@ where possible options include: -m String use this value as @file:JsModule annotation value whenever such annotation occurs -d destination directory for files with converted declarations (by default declarations are generated in current directory) -v, -version print version - --no-header don't print note with link to dukat repository at the beginning of each file + --no-header don't print note with link to dukat repository at the beginning of each file """.trimIndent() ) }