@@ -119,6 +119,8 @@ define(function (require, exports, module) {
119119 */
120120 var $problemsPanel ;
121121
122+ let $fixAllBtn ;
123+
122124 /**
123125 * @private the panelView
124126 * @type {Panel }
@@ -350,6 +352,7 @@ define(function (require, exports, module) {
350352 * @param fileName
351353 */
352354 function updatePanelTitleAndStatusBar ( numProblems , providersReportingProblems , aborted , fileName ) {
355+ $fixAllBtn . addClass ( "forced-hidden" ) ;
353356 var message , tooltip ;
354357
355358 if ( providersReportingProblems . length === 1 ) {
@@ -358,14 +361,20 @@ define(function (require, exports, module) {
358361 $problemsPanelTable . find ( "tr" ) . removeClass ( "forced-hidden" ) ;
359362
360363 if ( numProblems === 1 && ! aborted ) {
361- message = StringUtils . format ( Strings . SINGLE_ERROR , providersReportingProblems [ 0 ] . name , fileName ) ;
364+ message = documentFixes . size ?
365+ StringUtils . format ( Strings . SINGLE_ERROR_FIXABLE , providersReportingProblems [ 0 ] . name ,
366+ documentFixes . size , fileName ) :
367+ StringUtils . format ( Strings . SINGLE_ERROR , providersReportingProblems [ 0 ] . name , fileName ) ;
362368 } else {
363369 if ( aborted ) {
364370 numProblems += "+" ;
365371 }
366372
367- message = StringUtils . format ( Strings . MULTIPLE_ERRORS , providersReportingProblems [ 0 ] . name , numProblems ,
368- fileName ) ;
373+ message = documentFixes . size ?
374+ StringUtils . format ( Strings . MULTIPLE_ERRORS_FIXABLE , numProblems ,
375+ providersReportingProblems [ 0 ] . name , documentFixes . size , fileName ) :
376+ StringUtils . format ( Strings . MULTIPLE_ERRORS , numProblems ,
377+ providersReportingProblems [ 0 ] . name , fileName ) ;
369378 }
370379 } else if ( providersReportingProblems . length > 1 ) {
371380 $problemsPanelTable . find ( ".inspector-section" ) . show ( ) ;
@@ -374,7 +383,10 @@ define(function (require, exports, module) {
374383 numProblems += "+" ;
375384 }
376385
377- message = StringUtils . format ( Strings . ERRORS_PANEL_TITLE_MULTIPLE , numProblems , fileName ) ;
386+ message = documentFixes . size ?
387+ StringUtils . format ( Strings . ERRORS_PANEL_TITLE_MULTIPLE_FIXABLE , numProblems ,
388+ documentFixes . size , fileName ) :
389+ StringUtils . format ( Strings . ERRORS_PANEL_TITLE_MULTIPLE , numProblems , fileName ) ;
378390 } else {
379391 return ;
380392 }
@@ -386,6 +398,7 @@ define(function (require, exports, module) {
386398 tooltip = StringUtils . format ( Strings . STATUSBAR_CODE_INSPECTION_TOOLTIP_WITH_FIX ,
387399 documentFixes . size , message ) ;
388400 iconType = "inspection-repair" ;
401+ $fixAllBtn . removeClass ( "forced-hidden" ) ;
389402 }
390403
391404 StatusBar . updateIndicator ( INDICATOR_ID , true , iconType , tooltip ) ;
@@ -1006,14 +1019,40 @@ define(function (require, exports, module) {
10061019 MainViewManager . focusActivePane ( ) ;
10071020 run ( ) ;
10081021 }
1009-
1022+
1023+ function _fixAllProblems ( ) {
1024+ const editor = EditorManager . getCurrentFullEditor ( ) ;
1025+ if ( ! editor || editor . document . lastChangeTimestamp !== lastDocumentScanTimeStamp ) {
1026+ Dialogs . showErrorDialog ( Strings . CANNOT_FIX_TITLE , Strings . CANNOT_FIX_MESSAGE ) ;
1027+ return ;
1028+ }
1029+ if ( ! documentFixes . size ) {
1030+ return ;
1031+ }
1032+ const replacements = [ ] ;
1033+ for ( let fixDetails of documentFixes . values ( ) ) {
1034+ replacements . push ( {
1035+ from : editor . posFromIndex ( fixDetails . rangeOffset . start ) ,
1036+ to : editor . posFromIndex ( fixDetails . rangeOffset . end ) ,
1037+ text : fixDetails . replaceText
1038+ } ) ;
1039+ }
1040+ editor . replaceMultipleRanges ( replacements , EDIT_ORIGIN_LINT_FIX ) ;
1041+ const finalCursor = replacements [ replacements . length - 1 ] . from ;
1042+ editor . setCursorPos ( finalCursor . line , finalCursor . ch ) ;
1043+ MainViewManager . focusActivePane ( ) ;
1044+ run ( ) ;
1045+ }
1046+
10101047 // Initialize items dependent on HTML DOM
10111048 AppInit . htmlReady ( function ( ) {
10121049 Editor . registerGutter ( CODE_INSPECTION_GUTTER , CODE_INSPECTION_GUTTER_PRIORITY ) ;
10131050 // Create bottom panel to list error details
10141051 var panelHtml = Mustache . render ( PanelTemplate , Strings ) ;
10151052 problemsPanel = WorkspaceManager . createBottomPanel ( "errors" , $ ( panelHtml ) , 100 ) ;
10161053 $problemsPanel = $ ( "#problems-panel" ) ;
1054+ $fixAllBtn = $problemsPanel . find ( ".problems-fix-all-btn" ) ;
1055+ $fixAllBtn . click ( _fixAllProblems ) ;
10171056
10181057 function checkSelectionInsideElement ( range , element ) {
10191058 if ( ! range || range . endOffset === range . startOffset ) {
0 commit comments