@@ -20,7 +20,7 @@ import { ResourceMap } from '../../../../base/common/map.js';
20
20
import { clamp } from '../../../../base/common/numbers.js' ;
21
21
import { autorun } from '../../../../base/common/observable.js' ;
22
22
import { isMacintosh } from '../../../../base/common/platform.js' ;
23
- import { truncateMiddle } from '../../../../base/common/strings.js' ;
23
+ import { count , truncateMiddle } from '../../../../base/common/strings.js' ;
24
24
import { ThemeIcon } from '../../../../base/common/themables.js' ;
25
25
import { Constants } from '../../../../base/common/uint.js' ;
26
26
import { URI } from '../../../../base/common/uri.js' ;
@@ -360,7 +360,7 @@ export class TestingDecorations extends Disposable implements IEditorContributio
360
360
/**
361
361
* Results invalidated by editor changes.
362
362
*/
363
- private static invalidatedTests = new WeakSet < TestResultItem | ITestMessage > ( ) ;
363
+ public static invalidatedTests = new WeakSet < TestResultItem | ITestMessage > ( ) ;
364
364
365
365
/**
366
366
* Gets the decorations associated with the given code editor.
@@ -455,20 +455,18 @@ export class TestingDecorations extends Disposable implements IEditorContributio
455
455
}
456
456
457
457
let changed = false ;
458
- for ( const decos of [ this . errorContentWidgets , this . loggedMessageDecorations ] ) {
459
- for ( const [ message , deco ] of decos ) {
460
- // invalidate decorations if either the line they're on was changed,
461
- // or if the range of the test was changed. The range of the test is
462
- // not always present, so check bo.
463
- const invalidate = evts . some ( e => e . changes . some ( c =>
464
- c . range . startLineNumber <= deco . line && c . range . endLineNumber >= deco . line
465
- || ( deco . resultItem ?. item . range && deco . resultItem . item . range . startLineNumber <= c . range . startLineNumber && deco . resultItem . item . range . endLineNumber >= c . range . endLineNumber )
466
- ) ) ;
467
-
468
- if ( invalidate ) {
469
- changed = true ;
470
- TestingDecorations . invalidatedTests . add ( deco . resultItem || message ) ;
471
- }
458
+ for ( const [ message , deco ] of this . loggedMessageDecorations ) {
459
+ // invalidate decorations if either the line they're on was changed,
460
+ // or if the range of the test was changed. The range of the test is
461
+ // not always present, so check bo.
462
+ const invalidate = evts . some ( e => e . changes . some ( c =>
463
+ c . range . startLineNumber <= deco . line && c . range . endLineNumber >= deco . line
464
+ || ( deco . resultItem ?. item . range && deco . resultItem . item . range . startLineNumber <= c . range . startLineNumber && deco . resultItem . item . range . endLineNumber >= c . range . endLineNumber )
465
+ ) ) ;
466
+
467
+ if ( invalidate ) {
468
+ changed = true ;
469
+ TestingDecorations . invalidatedTests . add ( deco . resultItem || message ) ;
472
470
}
473
471
}
474
472
@@ -1354,7 +1352,7 @@ class TestErrorContentWidget extends Disposable implements IContentWidget {
1354
1352
1355
1353
constructor (
1356
1354
private readonly editor : ICodeEditor ,
1357
- private readonly position : Position ,
1355
+ private position : Position ,
1358
1356
public readonly message : ITestErrorMessage ,
1359
1357
public readonly resultItem : TestResultItem ,
1360
1358
uri : URI ,
@@ -1411,6 +1409,27 @@ class TestErrorContentWidget extends Disposable implements IContentWidget {
1411
1409
1412
1410
this . node . arrow . appendChild ( svg ) ;
1413
1411
1412
+ this . _register ( editor . onDidChangeModelContent ( e => {
1413
+ for ( const c of e . changes ) {
1414
+ if ( c . range . startLineNumber > this . line ) {
1415
+ continue ;
1416
+ }
1417
+ if (
1418
+ c . range . startLineNumber <= this . line && c . range . endLineNumber >= this . line
1419
+ || ( resultItem . item . range && resultItem . item . range . startLineNumber <= c . range . startLineNumber && resultItem . item . range . endLineNumber >= c . range . endLineNumber )
1420
+ ) {
1421
+ TestingDecorations . invalidatedTests . add ( this . resultItem ) ;
1422
+ this . dispose ( ) ; // todo
1423
+ }
1424
+
1425
+ const adjust = count ( c . text , '\n' ) - ( c . range . endLineNumber - c . range . startLineNumber ) ;
1426
+ if ( adjust !== 0 ) {
1427
+ this . position = this . position . delta ( adjust ) ;
1428
+ this . editor . layoutContentWidget ( this ) ;
1429
+ }
1430
+ }
1431
+ } ) ) ;
1432
+
1414
1433
editor . addContentWidget ( this ) ;
1415
1434
this . _register ( toDisposable ( ( ) => editor . removeContentWidget ( this ) ) ) ;
1416
1435
}
0 commit comments