@@ -181,6 +181,8 @@ define(function (require, exports, module) {
181181 */
182182 function setGotoEnabled ( gotoEnabled ) {
183183 CommandManager . get ( Commands . NAVIGATE_GOTO_FIRST_PROBLEM ) . setEnabled ( gotoEnabled ) ;
184+ CommandManager . get ( Commands . NAVIGATE_GOTO_NEXT_PROBLEM ) . setEnabled ( gotoEnabled ) ;
185+ CommandManager . get ( Commands . NAVIGATE_GOTO_PREV_PROBLEM ) . setEnabled ( gotoEnabled ) ;
184186 _gotoEnabled = gotoEnabled ;
185187 }
186188
@@ -1076,10 +1078,78 @@ define(function (require, exports, module) {
10761078 }
10771079 }
10781080
1081+ function handleGotoNextProblem ( ) {
1082+ if ( _gotoEnabled ) {
1083+ const editor = EditorManager . getCurrentFullEditor ( ) ;
1084+ if ( ! editor ) {
1085+ return ;
1086+ }
1087+ const currentCursor = editor . getCursorPos ( ) ;
1088+ const nextMarks = editor . getMarksAfter ( currentCursor , CODE_MARK_TYPE_INSPECTOR ) ;
1089+ if ( ! nextMarks . length || ! nextMarks [ 0 ] . find ( ) ) {
1090+ return ;
1091+ }
1092+
1093+ let nextMark = null ;
1094+ for ( let i = 0 ; i < nextMarks . length ; i ++ ) {
1095+ const markRange = nextMarks [ i ] . find ( ) ;
1096+ if ( markRange && ( markRange . from . line > currentCursor . line ||
1097+ ( markRange . from . line === currentCursor . line && markRange . from . ch > currentCursor . ch ) ) ) {
1098+ nextMark = nextMarks [ i ] ;
1099+ break ;
1100+ }
1101+ }
1102+
1103+ if ( ! nextMark ) {
1104+ return ;
1105+ }
1106+ const nextMarkRange = nextMark . find ( ) ;
1107+ if ( nextMarkRange ) {
1108+ editor . setCursorPos ( nextMarkRange . from . line , nextMarkRange . from . ch ) ;
1109+ }
1110+ }
1111+ }
1112+
1113+ function handleGotoPrevProblem ( ) {
1114+ if ( _gotoEnabled ) {
1115+ const editor = EditorManager . getCurrentFullEditor ( ) ;
1116+ if ( ! editor ) {
1117+ return ;
1118+ }
1119+ const currentCursor = editor . getCursorPos ( ) ;
1120+ const prevMarks = editor . getMarksBefore ( currentCursor , CODE_MARK_TYPE_INSPECTOR ) ;
1121+
1122+ if ( ! prevMarks . length ) {
1123+ return ;
1124+ }
1125+
1126+ let prevMark = null ;
1127+ for ( let i = prevMarks . length - 1 ; i >= 0 ; i -- ) {
1128+ const markRange = prevMarks [ i ] . find ( ) ;
1129+ if ( markRange && ( markRange . to . line < currentCursor . line ||
1130+ ( markRange . to . line === currentCursor . line && markRange . to . ch < currentCursor . ch ) ) ) {
1131+ prevMark = prevMarks [ i ] ;
1132+ break ;
1133+ }
1134+ }
1135+
1136+ if ( ! prevMark ) {
1137+ return ;
1138+ }
1139+
1140+ const prevMarkRange = prevMark . find ( ) ;
1141+ if ( prevMarkRange ) {
1142+ editor . setCursorPos ( prevMarkRange . from . line , prevMarkRange . from . ch ) ;
1143+ }
1144+ }
1145+ }
1146+
10791147 // Register command handlers
10801148 CommandManager . register ( Strings . CMD_VIEW_TOGGLE_INSPECTION , Commands . VIEW_TOGGLE_INSPECTION , toggleEnabled ) ;
10811149 CommandManager . register ( Strings . CMD_VIEW_TOGGLE_PROBLEMS , Commands . VIEW_TOGGLE_PROBLEMS , toggleProblems ) ;
10821150 CommandManager . register ( Strings . CMD_GOTO_FIRST_PROBLEM , Commands . NAVIGATE_GOTO_FIRST_PROBLEM , handleGotoFirstProblem ) ;
1151+ CommandManager . register ( Strings . CMD_GOTO_NEXT_PROBLEM , Commands . NAVIGATE_GOTO_NEXT_PROBLEM , handleGotoNextProblem ) ;
1152+ CommandManager . register ( Strings . CMD_GOTO_PREV_PROBLEM , Commands . NAVIGATE_GOTO_PREV_PROBLEM , handleGotoPrevProblem ) ;
10831153
10841154 // Register preferences
10851155 prefs . definePreference ( PREF_ENABLED , "boolean" , brackets . config [ "linting.enabled_by_default" ] , {
0 commit comments