@@ -132,7 +132,8 @@ export class FortranLintingProvider {
132
132
...args ,
133
133
...this . getIncludeParams ( includePaths ) , // include paths
134
134
textDocument . fileName ,
135
- `-o ${ fileNameWithoutExtension } .mod` ,
135
+ '-o' ,
136
+ `${ fileNameWithoutExtension } .mod` ,
136
137
] ;
137
138
138
139
return argList . map ( arg => arg . trim ( ) ) . filter ( arg => arg !== '' ) ;
@@ -148,6 +149,10 @@ export class FortranLintingProvider {
148
149
modFlag = '-module' ;
149
150
break ;
150
151
152
+ case 'nagfor' :
153
+ modFlag = '-mdir' ;
154
+ break ;
155
+
151
156
default :
152
157
modFlag = '-J' ;
153
158
break ;
@@ -379,11 +384,58 @@ export class FortranLintingProvider {
379
384
}
380
385
return diagnostics ;
381
386
387
+ case 'nagfor' :
388
+ return this . linterParserNagfor ( matches ) ;
389
+
382
390
default :
383
391
break ;
384
392
}
385
393
}
386
394
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
+
387
439
/**
388
440
* Different compilers, display errors in different ways, hence we need
389
441
* different regular expressions to interpret their output.
@@ -427,6 +479,9 @@ export class FortranLintingProvider {
427
479
// see https://regex101.com/r/GZ0Lzz/2
428
480
return / ^ (?< fname > (?: \w : \\ ) ? .* ) \( (?< ln > \d + ) \) : \s * (?: # (?: (?< sev2 > \w * ) : \s * (?< msg2 > .* $ ) ) | (?< sev1 > \w * ) \s * (?< msg1 > .* $ ) (?: \s * .* \s * ) (?< cn > - * \^ ) ) / gm;
429
481
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
+
430
485
default :
431
486
vscode . window . showErrorMessage ( 'Unsupported linter, change your linter.compiler option' ) ;
432
487
}
@@ -454,6 +509,9 @@ export class FortranLintingProvider {
454
509
case 'ifort' :
455
510
return [ '-syntax-only' , '-fpp' ] ;
456
511
512
+ case 'nagfor' :
513
+ return [ '-M' , '-quiet' ] ;
514
+
457
515
default :
458
516
break ;
459
517
}
0 commit comments