@ -587,15 +587,19 @@ const svelte_visitors = (comments, state) => ({
last ? . type === 'Text' &&
/\s$/ . test ( last . data ) ;
/** @type { AST.SvelteNode[][]} */
/** @type { { nodes: AST.SvelteNode[]; leading_whitespace: boolean } []} */
const items = [ ] ;
/** @type {AST.SvelteNode[]} */
let sequence = [ ] ;
let leading _whitespace = false ;
const flush = ( ) => {
items . push ( sequence ) ;
sequence = [ ] ;
if ( sequence . length > 0 ) {
items . push ( { nodes : sequence , leading _whitespace } ) ;
sequence = [ ] ;
leading _whitespace = false ;
}
} ;
for ( let i = 0 ; i < node . nodes . length ; i += 1 ) {
@ -624,6 +628,7 @@ const svelte_visitors = (comments, state) => ({
if ( child _node . data . startsWith ( ' ' ) && prev && prev . type !== 'ExpressionTag' ) {
flush ( ) ;
leading _whitespace = true ;
child _node . data = child _node . data . trimStart ( ) ;
}
@ -662,20 +667,18 @@ const svelte_visitors = (comments, state) => ({
let multiline = false ;
let width = 0 ;
const child _contexts = items
. filter ( ( x ) => x . length > 0 )
. map ( ( sequence ) => {
const child _context = context . new ( ) ;
const child _contexts = items . map ( ( { nodes , leading _whitespace } ) => {
const child _context = context . new ( ) ;
for ( const node of sequence ) {
child _context . visit ( node ) ;
multiline || = child _context . multiline ;
}
for ( const node of nodes ) {
child _context . visit ( node ) ;
multiline || = child _context . multiline ;
}
width += child _context . measure ( ) ;
width += child _context . measure ( ) + ( leading _whitespace ? 1 : 0 ) ;
return child _context ;
} ) ;
return { context : child _context , leading _whitespace } ;
} ) ;
multiline || = width > LINE _BREAK _THRESHOLD ;
// Normally context.newline() also makes context.multiline true, but the below loop only
@ -687,14 +690,16 @@ const svelte_visitors = (comments, state) => ({
const prev = child _contexts [ i ] ;
const next = child _contexts [ i + 1 ] ;
context . append ( prev );
context . append ( prev .context );
if ( next ) {
if ( prev . multiline || n ext. multiline ) {
if ( prev . context. multiline || n ext. cont ext. multiline ) {
context . margin ( ) ;
context . newline ( ) ;
} else if ( multiline ) {
context . newline ( ) ;
} else if ( next . leading _whitespace ) {
context . write ( ' ' ) ;
}
}
}