Skip to content

Commit

Permalink
wip proper indentation
Browse files Browse the repository at this point in the history
TODO: How to test this? (w/o RT overhead?)
  • Loading branch information
gzm0 committed Dec 25, 2023
1 parent fee872e commit 92c4317
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ private[closure] class ClosureAstTransformer(featureSet: FeatureSet,

def empty: Chunk = ClosureAstTransformer.emptyChunk

def transform(trees: List[Tree]): Chunk =
def transform(trees: List[Tree], indent: Int): Chunk =
new Chunk(transformBlockStats(trees)(NoPosition))

private def transformStat(tree: Tree)(implicit parentPos: Position): Node =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,9 @@ private object BasicLinkerBackend {
private object PostTransformerWithoutSourceMap extends Emitter.PostTransformer[PrintedTree] {
def empty: PrintedTree = Printers.emptyPrintedTree

def transform(trees: List[js.Tree]): PrintedTree = {
def transform(trees: List[js.Tree], indent: Int): PrintedTree = {
val jsCodeWriter = new ByteArrayWriter()
val printer = new Printers.JSTreePrinter(jsCodeWriter)
val printer = new Printers.JSTreePrinter(jsCodeWriter, indent)

trees.map(printer.printTopLevelTree(_))

Expand All @@ -258,10 +258,10 @@ private object BasicLinkerBackend {
private object PostTransformerWithSourceMap extends Emitter.PostTransformer[PrintedTree] {
def empty: PrintedTree = Printers.emptyPrintedTree

def transform(trees: List[js.Tree]): PrintedTree = {
def transform(trees: List[js.Tree], indent: Int): PrintedTree = {
val jsCodeWriter = new ByteArrayWriter()
val smFragmentBuilder = new SourceMapWriter.FragmentBuilder()
val printer = new Printers.JSTreePrinterWithSourceMap(jsCodeWriter, smFragmentBuilder)
val printer = new Printers.JSTreePrinterWithSourceMap(jsCodeWriter, smFragmentBuilder, indent)

trees.map(printer.printTopLevelTree(_))
smFragmentBuilder.complete()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,13 @@ final class Emitter[E >: Null <: js.Transformed.Value](
}
}

private def postTransform(trees: List[js.Tree]): E = {
private def postTransform(trees: List[js.Tree], indent: Int): E = {
statsPostTransforms += 1
postTransformer.transform(trees)
postTransformer.transform(trees, indent)
}

private def postTransform(tree: js.Tree): E = postTransform(tree :: Nil)
private def postTransform(tree: js.Tree, indent: Int): E =
postTransform(tree :: Nil, indent)

/** Emits all JavaScript code avoiding clashes with global refs.
*
Expand Down Expand Up @@ -222,7 +223,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](

val moduleImports = extractWithGlobals {
moduleCache.getOrComputeImports(module.externalDependencies, module.internalDependencies) {
genModuleImports(module).map(postTransform(_))
genModuleImports(module).map(postTransform(_, 0))
}
}

Expand All @@ -232,7 +233,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
*/
moduleCache.getOrComputeTopLevelExports(module.topLevelExports) {
classEmitter.genTopLevelExports(module.topLevelExports)(
moduleContext, moduleCache).map(postTransform(_))
moduleContext, moduleCache).map(postTransform(_, 0))
}
}

Expand All @@ -242,7 +243,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
WithGlobals.list(initializers.map { initializer =>
classEmitter.genModuleInitializer(initializer)(
moduleContext, moduleCache)
}).map(postTransform(_))
}).map(postTransform(_, 0))
}
}

Expand Down Expand Up @@ -414,7 +415,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
if (kind.isJSClass) {
val fieldDefs = classTreeCache.privateJSFields.getOrElseUpdate {
classEmitter.genCreatePrivateJSFieldDefsOfJSClass(className)(
moduleContext, classCache).map(postTransform(_))
moduleContext, classCache).map(postTransform(_, 0))
}
main += extractWithGlobals(fieldDefs)
}
Expand All @@ -434,7 +435,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
classCache.getStaticLikeMethodCache(namespace, methodDef.methodName)

val (tree, changed) = methodCache.getOrElseUpdate(methodDef.version,
classEmitter.genStaticLikeMethod(className, methodDef)(moduleContext, methodCache).map(postTransform(_)))
classEmitter.genStaticLikeMethod(className, methodDef)(moduleContext, methodCache).map(postTransform(_, 0)))

overallChanged ||= changed

Expand Down Expand Up @@ -477,11 +478,16 @@ final class Emitter[E >: Null <: js.Transformed.Value](
(isJSClass || linkedClass.ancestors.contains(ThrowableClass))
}

val memberIndent = {
(if (isJSClass) 1 else 0) + // accessor function
(if (useESClass) 1 else 0) // nesting from class
}

val hasJSSuperClass = linkedClass.jsSuperClass.isDefined

val storeJSSuperClass = linkedClass.jsSuperClass.map { jsSuperClass =>
extractWithGlobals(classTreeCache.storeJSSuperClass.getOrElseUpdate(
classEmitter.genStoreJSSuperClass(jsSuperClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
classEmitter.genStoreJSSuperClass(jsSuperClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 1))))
}

// JS constructor
Expand All @@ -508,7 +514,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
hasJSSuperClass, // invalidated by class version
useESClass, // invalidated by class version
jsConstructorDef // part of ctor version
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_)))
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_, memberIndent)))
} else {
val ctorVersion = linkedInlineableInit.fold {
Version.combine(linkedClass.version)
Expand All @@ -522,7 +528,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
linkedClass.superClass, // invalidated by class version
useESClass, // invalidated by class version,
linkedInlineableInit // part of ctor version
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_)))
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_, memberIndent)))
}

overallChanged ||= changed
Expand Down Expand Up @@ -580,7 +586,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
isJSClass, // invalidated by isJSClassVersion
useESClass, // invalidated by isJSClassVersion
method, // invalidated by method.version
)(moduleContext, methodCache).map(postTransform(_)))
)(moduleContext, methodCache).map(postTransform(_, memberIndent)))

overallChanged ||= changed

Expand All @@ -599,7 +605,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
isJSClass, // invalidated by isJSClassVersion
useESClass, // invalidated by isJSClassVersion
member // invalidated by version
)(moduleContext, memberCache).map(postTransform(_)))
)(moduleContext, memberCache).map(postTransform(_, memberIndent)))

overallChanged ||= changed

Expand Down Expand Up @@ -641,7 +647,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
allMembers
} else {
statsNestedPostTransforms += 1
postTransform(clazz) :: Nil
postTransform(clazz, 0) :: Nil
}
}
})
Expand Down Expand Up @@ -670,7 +676,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](

if (classEmitter.needInstanceTests(linkedClass)(classCache)) {
main += extractWithGlobals(classTreeCache.instanceTests.getOrElseUpdate(
classEmitter.genInstanceTests(className, kind)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
classEmitter.genInstanceTests(className, kind)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 0))))
}

if (linkedClass.hasRuntimeTypeInfo) {
Expand All @@ -681,18 +687,18 @@ final class Emitter[E >: Null <: js.Transformed.Value](
linkedClass.superClass, // invalidated by class version
linkedClass.ancestors, // invalidated by overall class cache (identity)
linkedClass.jsNativeLoadSpec // invalidated by class version
)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 0))))
}

if (linkedClass.hasInstances && kind.isClass && linkedClass.hasRuntimeTypeInfo) {
main += classTreeCache.setTypeData.getOrElseUpdate(
postTransform(classEmitter.genSetTypeData(className)(moduleContext, classCache, linkedClass.pos)))
postTransform(classEmitter.genSetTypeData(className)(moduleContext, classCache, linkedClass.pos), 0))
}
}

if (linkedClass.kind.hasModuleAccessor && linkedClass.hasInstances) {
main += extractWithGlobals(classTreeCache.moduleAccessor.getOrElseUpdate(
classEmitter.genModuleAccessor(className, isJSClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
classEmitter.genModuleAccessor(className, isJSClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 0))))
}

// Static fields
Expand All @@ -701,14 +707,14 @@ final class Emitter[E >: Null <: js.Transformed.Value](
postTransformer.empty
} else {
extractWithGlobals(classTreeCache.staticFields.getOrElseUpdate(
classEmitter.genCreateStaticFieldsOfScalaClass(className)(moduleContext, classCache).map(postTransform(_))))
classEmitter.genCreateStaticFieldsOfScalaClass(className)(moduleContext, classCache).map(postTransform(_, 0))))
}

// Static initialization

val staticInitialization = if (classEmitter.needStaticInitialization(linkedClass)) {
classTreeCache.staticInitialization.getOrElseUpdate(
postTransform(classEmitter.genStaticInitialization(className)(moduleContext, classCache, linkedClass.pos)))
postTransform(classEmitter.genStaticInitialization(className)(moduleContext, classCache, linkedClass.pos), 0))
} else {
postTransformer.empty
}
Expand Down Expand Up @@ -1033,7 +1039,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](

def build(moduleContext: ModuleContext): WithGlobals[CoreJSLib.Lib[E]] = {
if (_lib == null || _lastModuleContext != moduleContext) {
_lib = CoreJSLib.build(sjsGen, postTransform, moduleContext, this)
_lib = CoreJSLib.build(sjsGen, postTransform(_, 0), moduleContext, this)
_lastModuleContext = moduleContext
}
_lib
Expand Down Expand Up @@ -1123,7 +1129,7 @@ object Emitter {

trait PostTransformer[E] {
def empty: E
def transform(trees: List[js.Tree]): E
def transform(trees: List[js.Tree], indent: Int): E
}

private final class DesugaredClassCache[E >: Null] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ import Trees._
object Printers {
private val ReusableIndentArray = Array.fill(128)(' '.toByte)

class JSTreePrinter(protected val out: ByteArrayWriter) {
class JSTreePrinter(protected val out: ByteArrayWriter, initIndent: Int = 0) {
private final val IndentStep = 2

private var indentMargin = 0
private var indentMargin = initIndent * IndentStep
private var indentArray = ReusableIndentArray

private def indent(): Unit = indentMargin += IndentStep
Expand Down Expand Up @@ -747,7 +747,6 @@ object Printers {
}

protected def print(printedTree: PrintedTree): Unit =
// TODO: Indent this?
out.write(printedTree.jsCode)

protected def print(exportName: ExportName): Unit =
Expand All @@ -762,7 +761,8 @@ object Printers {
}

class JSTreePrinterWithSourceMap(_out: ByteArrayWriter,
sourceMap: SourceMapWriter.Builder) extends JSTreePrinter(_out) {
sourceMap: SourceMapWriter.Builder, initIndent: Int)
extends JSTreePrinter(_out, initIndent) {

private var column = 0

Expand Down

0 comments on commit 92c4317

Please sign in to comment.