@@ -52,11 +52,11 @@ class MessageWidget {
5252
5353 const domNode = document . createElement ( 'div' ) ;
5454 domNode . className = 'descriptioncontainer' ;
55- domNode . setAttribute ( 'aria-live' , 'assertive' ) ;
56- domNode . setAttribute ( 'role' , 'alert' ) ;
5755
5856 this . _messageBlock = document . createElement ( 'div' ) ;
5957 dom . addClass ( this . _messageBlock , 'message' ) ;
58+ this . _messageBlock . setAttribute ( 'aria-live' , 'assertive' ) ;
59+ this . _messageBlock . setAttribute ( 'role' , 'alert' ) ;
6060 domNode . appendChild ( this . _messageBlock ) ;
6161
6262 this . _relatedBlock = document . createElement ( 'div' ) ;
@@ -88,7 +88,8 @@ class MessageWidget {
8888 dispose ( this . _disposables ) ;
8989 }
9090
91- update ( { source, message, relatedInformation, code } : IMarker ) : void {
91+ update ( marker : IMarker ) : void {
92+ const { source, message, relatedInformation, code } = marker ;
9293 let sourceAndCodeLength = ( source ?. length || 0 ) + '()' . length ;
9394 if ( code ) {
9495 if ( typeof code === 'string' ) {
@@ -106,6 +107,7 @@ class MessageWidget {
106107 }
107108
108109 dom . clearNode ( this . _messageBlock ) ;
110+ this . _messageBlock . setAttribute ( 'aria-label' , this . getAriaLabel ( marker ) ) ;
109111 this . _editor . applyFontInfo ( this . _messageBlock ) ;
110112 let lastLineElement = this . _messageBlock ;
111113 for ( const line of lines ) {
@@ -192,6 +194,32 @@ class MessageWidget {
192194 getHeightInLines ( ) : number {
193195 return Math . min ( 17 , this . _lines ) ;
194196 }
197+
198+ private getAriaLabel ( marker : IMarker ) : string {
199+ let severityLabel = '' ;
200+ switch ( marker . severity ) {
201+ case MarkerSeverity . Error :
202+ severityLabel = nls . localize ( 'Error' , "Error" ) ;
203+ break ;
204+ case MarkerSeverity . Warning :
205+ severityLabel = nls . localize ( 'Warning' , "Warning" ) ;
206+ break ;
207+ case MarkerSeverity . Info :
208+ severityLabel = nls . localize ( 'Info' , "Info" ) ;
209+ break ;
210+ case MarkerSeverity . Hint :
211+ severityLabel = nls . localize ( 'Hint' , "Hint" ) ;
212+ break ;
213+ }
214+
215+ let ariaLabel = nls . localize ( 'marker aria' , "{0} at {1}. " , severityLabel , marker . startLineNumber + ':' + marker . startColumn ) ;
216+ const model = this . _editor . getModel ( ) ;
217+ if ( model && ( marker . startLineNumber <= model . getLineCount ( ) ) && ( marker . startLineNumber >= 1 ) ) {
218+ const lineContent = model . getLineContent ( marker . startLineNumber ) ;
219+ ariaLabel = `${ lineContent } , ${ ariaLabel } ` ;
220+ }
221+ return ariaLabel ;
222+ }
195223}
196224
197225export class MarkerNavigationWidget extends PeekViewWidget {
0 commit comments