@@ -132,7 +132,8 @@ export class FortranLintingProvider {
132132 ...args ,
133133 ...this . getIncludeParams ( includePaths ) , // include paths
134134 textDocument . fileName ,
135- `-o ${ fileNameWithoutExtension } .mod` ,
135+ '-o' ,
136+ `${ fileNameWithoutExtension } .mod` ,
136137 ] ;
137138
138139 return argList . map ( arg => arg . trim ( ) ) . filter ( arg => arg !== '' ) ;
@@ -148,6 +149,10 @@ export class FortranLintingProvider {
148149 modFlag = '-module' ;
149150 break ;
150151
152+ case 'nagfor' :
153+ modFlag = '-mdir' ;
154+ break ;
155+
151156 default :
152157 modFlag = '-J' ;
153158 break ;
@@ -379,11 +384,58 @@ export class FortranLintingProvider {
379384 }
380385 return diagnostics ;
381386
387+ case 'nagfor' :
388+ return this . linterParserNagfor ( matches ) ;
389+
382390 default :
383391 break ;
384392 }
385393 }
386394
395+ private linterParserNagfor ( matches : RegExpMatchArray [ ] ) {
396+ const diagnostics : vscode . Diagnostic [ ] = [ ] ;
397+ for ( const m of matches ) {
398+ const g = m . groups ;
399+ const fname : string = g [ 'fname' ] ;
400+ const lineNo : number = parseInt ( g [ 'ln' ] ) ;
401+ const msg_type : string = g [ 'sev1' ] ;
402+ const msg : string = g [ 'msg1' ] ;
403+ // NAGFOR does not have a column number, so get the entire line
404+ const range = vscode . window . activeTextEditor . document . lineAt ( lineNo - 1 ) . range ;
405+
406+ let severity : vscode . DiagnosticSeverity ;
407+ switch ( msg_type . toLowerCase ( ) ) {
408+ case 'panic' :
409+ case 'fatal' :
410+ case 'error' :
411+ severity = vscode . DiagnosticSeverity . Error ;
412+ break ;
413+
414+ case 'extension' :
415+ case 'questionable' :
416+ case 'deleted feature used' :
417+ case 'warning' :
418+ severity = vscode . DiagnosticSeverity . Warning ;
419+ break ;
420+
421+ case 'remark' :
422+ case 'note' :
423+ case 'info' :
424+ severity = vscode . DiagnosticSeverity . Information ;
425+ break ;
426+
427+ default :
428+ severity = vscode . DiagnosticSeverity . Error ;
429+ console . log ( 'Unknown severity: ' + msg_type ) ;
430+ break ;
431+ }
432+
433+ const d = new vscode . Diagnostic ( range , msg , severity ) ;
434+ diagnostics . push ( d ) ;
435+ }
436+ return diagnostics ;
437+ }
438+
387439 /**
388440 * Different compilers, display errors in different ways, hence we need
389441 * different regular expressions to interpret their output.
@@ -427,6 +479,9 @@ export class FortranLintingProvider {
427479 // see https://regex101.com/r/GZ0Lzz/2
428480 return / ^ (?< fname > (?: \w : \\ ) ? .* ) \( (?< ln > \d + ) \) : \s * (?: # (?: (?< sev2 > \w * ) : \s * (?< msg2 > .* $ ) ) | (?< sev1 > \w * ) \s * (?< msg1 > .* $ ) (?: \s * .* \s * ) (?< cn > - * \^ ) ) / gm;
429481
482+ case 'nagfor' :
483+ return / ^ (?< sev1 > R e m a r k | I n f o | N o t e | W a r n i n g | Q u e s t i o n a b l e | E x t e n s i o n | D e l e t e d f e a t u r e u s e d | E r r o r | F a t a l | P a n i c ) ( \( \w + \) ) ? : (?< fname > [ \S ] + ) , l i n e (?< ln > \d + ) : (?< msg1 > .+ ) $ / gm;
484+
430485 default :
431486 vscode . window . showErrorMessage ( 'Unsupported linter, change your linter.compiler option' ) ;
432487 }
@@ -454,6 +509,9 @@ export class FortranLintingProvider {
454509 case 'ifort' :
455510 return [ '-syntax-only' , '-fpp' ] ;
456511
512+ case 'nagfor' :
513+ return [ '-M' , '-quiet' ] ;
514+
457515 default :
458516 break ;
459517 }
0 commit comments