8000 wip proper indentation · scala-js/scala-js@92c4317 · GitHub
[go: up one dir, main page]

Skip to content

Commit 92c4317

Browse files
committed
wip proper indentation
TODO: How to test this? (w/o RT overhead?)
1 parent fee872e commit 92c4317

File tree

4 files changed

+37
-31
lines changed

4 files changed

+37
-31
lines changed

linker/jvm/src/main/scala/org/scalajs/linker/backend/closure/ClosureAstTransformer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ private[closure] class ClosureAstTransformer(featureSet: FeatureSet,
6060

6161
def empty: Chunk = ClosureAstTransformer.emptyChunk
6262

63-
def transform(trees: List[Tree]): Chunk =
63+
def transform(trees: List[Tree], indent: Int): Chunk =
6464
new Chunk(transformBlockStats(trees)(NoPosition))
6565

6666
private def transformStat(tree: Tree)(implicit parentPos: Position): Node =

linker/shared/src/main/scala/org/scalajs/linker/backend/BasicLinkerBackend.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@ private object BasicLinkerBackend {
245245
private object PostTransformerWithoutSourceMap extends Emitter.PostTransformer[PrintedTree] {
246246
def empty: PrintedTree = Printers.emptyPrintedTree
247247

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

252252
trees.map(printer.printTopLevelTree(_))
253253

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

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

266266
trees.map(printer.printTopLevelTree(_))
267267
smFragmentBuilder.complete()

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/Emitter.scala

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,13 @@ final class Emitter[E >: Null <: js.Transformed.Value](
153153
}
154154
}
155155

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

161-
private def postTransform(tree: js.Tree): E = postTransform(tree :: Nil)
161+
private def postTransform(tree: js.Tree, indent: Int): E =
162+
postTransform(tree :: Nil, indent)
162163

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

223224
val moduleImports = extractWithGlobals {
224225
moduleCache.getOrComputeImports(module.externalDependencies, module.internalDependencies) {
225-
genModuleImports(module).map(postTransform(_))
226+
genModuleImports(module).map(postTransform(_, 0))
226227
}
227228
}
228229

@@ -232,7 +233,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
232233
*/
233234
moduleCache.getOrComputeTopLevelExports(module.topLevelExports) {
234235
classEmitter.genTopLevelExports(module.topLevelExports)(
235-
moduleContext, moduleCache).map(postTransform(_))
236+
moduleContext, moduleCache).map(postTransform(_, 0))
236237
}
237238
}
238239

@@ -242,7 +243,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
242243
WithGlobals.list(initializers.map { initializer =>
243244
classEmitter.genModuleInitializer(initializer)(
244245
moduleContext, moduleCache)
245-
}).map(postTransform(_))
246+
}).map(postTransform(_, 0))
246247
}
247248
}
248249

@@ -414,7 +415,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
414415
if (kind.isJSClass) {
415416
val fieldDefs = classTreeCache.privateJSFields.getOrElseUpdate {
416417
classEmitter.genCreatePrivateJSFieldDefsOfJSClass(className)(
417-
moduleContext, classCache).map(postTransform(_))
418+
moduleContext, classCache).map(postTransform(_, 0))
418419
}
419420
main += extractWithGlobals(fieldDefs)
420421
}
@@ -434,7 +435,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
434435
classCache.getStaticLikeMethodCache(namespace, methodDef.methodName)
435436

436437
val (tree, changed) = methodCache.getOrElseUpdate(methodDef.version,
437-
classEmitter.genStaticLikeMethod(className, methodDef)(moduleContext, methodCache).map(postTransform(_)))
438+
classEmitter.genStaticLikeMethod(className, methodDef)(moduleContext, methodCache).map(postTransform(_, 0)))
438439

439440
overallChanged ||= changed
440441

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

481+
val memberIndent = {
482+
(if (isJSClass) 1 else 0) + // accessor function
483+
(if (useESClass) 1 else 0) // nesting from class
484+
}
485+
480486
val hasJSSuperClass = linkedClass.jsSuperClass.isDefined
481487

482488
val storeJSSuperClass = linkedClass.jsSuperClass.map { jsSuperClass =>
483489
extractWithGlobals(classTreeCache.storeJSSuperClass.getOrElseUpdate(
484-
classEmitter.genStoreJSSuperClass(jsSuperClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
490+
classEmitter.genStoreJSSuperClass(jsSuperClass)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 1))))
485491
}
486492

487493
// JS constructor
@@ -508,7 +514,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
508514
hasJSSuperClass, // invalidated by class version
509515
useESClass, // invalidated by class version
510516
jsConstructorDef // part of ctor version
511-
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_)))
517+
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_, memberIndent)))
512518
} else {
513519
val ctorVersion = linkedInlineableInit.fold {
514520
Version.combine(linkedClass.version)
@@ -522,7 +528,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
522528
linkedClass.superClass, // invalidated by class version
523529
useESClass, // invalidated by class version,
524530
linkedInlineableInit // part of ctor version
525-
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_)))
531+
)(moduleContext, ctorCache, linkedClass.pos).map(postTransform(_, memberIndent)))
526532
}
527533

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

585591
overallChanged ||= changed
586592

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

604610
overallChanged ||= changed
605611

@@ -641,7 +647,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
641647
allMembers
642648
} else {
643649
statsNestedPostTransforms += 1
644-
postTransform(clazz) :: Nil
650+
postTransform(clazz, 0) :: Nil
645651
}
646652
}
647653
})
@@ -670,7 +676,7 @@ final class Emitter[E >: Null <: js.Transformed.Value](
670676

671677
if (classEmitter.needInstanceTests(linkedClass)(classCache)) {
672678
main += extractWithGlobals(classTreeCache.instanceTests.getOrElseUpdate(
673-
classEmitter.genInstanceTests(className, kind)(moduleContext, classCache, linkedClass.pos).map(postTransform(_))))
679+
classEmitter.genInstanceTests(className, kind)(moduleContext, classCache, linkedClass.pos).map(postTransform(_, 0))))
674680
}
675681

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

687693
if (linkedClass.hasInstances && kind.isClass && linkedClass.hasRuntimeTypeInfo) {
688694
main += classTreeCache.setTypeData.getOrElseUpdate(
689-
postTransform(classEmitter.genSetTypeData(className)(moduleContext, classCache, linkedClass.pos)))
695+
postTransform(classEmitter.genSetTypeData(className)(moduleContext, classCache, linkedClass.pos), 0))
690696
}
691697
}
692698

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

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

707713
// Static initialization
708714

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

10341040
def build(moduleContext: ModuleContext): WithGlobals[CoreJSLib.Lib[E]] = {
10351041
if (_lib == null || _lastModuleContext != moduleContext) {
1036-
_lib = CoreJSLib.build(sjsGen, postTransform, moduleContext, this)
1042+
_lib = CoreJSLib.build(sjsGen, postTransform(_, 0), moduleContext, this)
10371043
_lastModuleContext = moduleContext
10381044
}
10391045
_lib
@@ -1123,7 +1129,7 @@ object Emitter {
11231129

11241130
trait PostTransformer[E] {
11251131
def empty: E
1126-
def transform(trees: List[js.Tree]): E
1132+
def transform(trees: List[js.Tree], indent: Int): E
11271133
}
11281134

11291135
private final class DesugaredClassCache[E >: Null] {

linker/shared/src/main/scala/org/scalajs/linker/backend/javascript/Printers.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ import Trees._
3131
object Printers {
3232
private val ReusableIndentArray = Array.fill(128)(' '.toByte)
3333

34-
class JSTreePrinter(protected val out: ByteArrayWriter) {
34+
class JSTreePrinter(protected val out: ByteArrayWriter, initIndent: Int = 0) {
3535
private final val IndentStep = 2
3636

37-
private 2851 var indentMargin = 0
37+
private var indentMargin = initIndent * IndentStep
3838
private var indentArray = ReusableIndentArray
3939

4040
private def indent(): Unit = indentMargin += IndentStep
@@ -747,7 +747,6 @@ object Printers {
747747
}
748748

749749
protected def print(printedTree: PrintedTree): Unit =
750-
// TODO: Indent this?
751750
out.write(printedTree.jsCode)
752751

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

764763
class JSTreePrinterWithSourceMap(_out: ByteArrayWriter,
765-
sourceMap: SourceMapWriter.Builder) extends JSTreePrinter(_out) {
764+
sourceMap: SourceMapWriter.Builder, initIndent: Int)
765+
extends JSTreePrinter(_out, initIndent) {
766766

767767
private var column = 0
768768

0 commit comments

Comments
 (0)
0