@@ -302,11 +302,24 @@ object AutoImports:
302
302
}.headOption
303
303
case _ => None
304
304
305
- def skipUsingDirectivesOffset =
305
+ def firstMemberDefinitionStart (tree : Tree )(using Context ): Option [Int ] =
306
+ tree match
307
+ case PackageDef (_, stats) =>
308
+ stats.flatMap {
309
+ case s : PackageDef => firstMemberDefinitionStart(s)
310
+ case stat if stat.span.exists => Some (stat.span.start)
311
+ case _ => None
312
+ }.headOption
313
+ case _ => None
314
+
315
+
316
+ def skipUsingDirectivesOffset (
317
+ firstObjectPos : Int = firstMemberDefinitionStart(tree).getOrElse(0 )
318
+ ): Int =
319
+ val firstObjectLine = pos.source.offsetToLine(firstObjectPos)
306
320
comments
307
321
.takeWhile(comment =>
308
- ! comment.isDocComment && comment.span.end < firstObjectBody(tree)
309
- .fold(0 )(_.span.start)
322
+ ! comment.isDocComment && pos.source.offsetToLine(comment.span.end) + 1 < firstObjectLine
310
323
)
311
324
.lastOption
312
325
.fold(0 )(_.span.end + 1 )
@@ -318,7 +331,7 @@ object AutoImports:
318
331
val (lineNumber, padTop) = lastImportStatement match
319
332
case Some (stm) => (stm.endPos.line + 1 , false )
320
333
case None if pkg.pid.symbol.isEmptyPackage =>
321
- (pos.source.offsetToLine(skipUsingDirectivesOffset), false )
334
+ (pos.source.offsetToLine(skipUsingDirectivesOffset() ), false )
322
335
case None =>
323
336
val pos = pkg.pid.endPos
324
337
val line =
@@ -330,7 +343,7 @@ object AutoImports:
330
343
new AutoImportPosition (offset, text, padTop)
331
344
}
332
345
333
- def forScript (isAmmonite : Boolean ): Option [AutoImportPosition ] =
346
+ def forScript (path : String ): Option [AutoImportPosition ] =
334
347
firstObjectBody(tree).map { tmpl =>
335
348
val lastImportStatement =
336
349
tmpl.body.takeWhile(_.isInstanceOf [Import ]).lastOption
@@ -340,10 +353,11 @@ object AutoImports:
340
353
offset
341
354
case None =>
342
355
val scriptOffset =
343
- if isAmmonite then
344
- ScriptFirstImportPosition .ammoniteScStartOffset(text, comments)
345
- else
346
- ScriptFirstImportPosition .scalaCliScStartOffset(text, comments)
356
+ if path.isAmmoniteGeneratedFile
357
+ then ScriptFirstImportPosition .ammoniteScStartOffset(text, comments)
358
+ else if path.isScalaCLIGeneratedFile
359
+ then ScriptFirstImportPosition .scalaCliScStartOffset(text, comments)
360
+ else Some (skipUsingDirectivesOffset(tmpl.span.start))
347
361
348
362
scriptOffset.getOrElse {
349
363
val tmplPoint = tmpl.self.srcPos.span.point
@@ -359,14 +373,16 @@ object AutoImports:
359
373
360
374
def fileStart =
361
375
AutoImportPosition (
362
- skipUsingDirectivesOffset,
376
+ skipUsingDirectivesOffset() ,
363
377
0 ,
364
378
padTop = false
365
379
)
366
380
367
381
val scriptPos =
368
- if path.isAmmoniteGeneratedFile then forScript(isAmmonite = true )
369
- else if path.isScalaCLIGeneratedFile then forScript(isAmmonite = false )
382
+ if path.isAmmoniteGeneratedFile ||
383
+ path.isScalaCLIGeneratedFile ||
384
+ path.isWorksheet
385
+ then forScript(path)
370
386
else None
371
387
372
388
scriptPos
0 commit comments