Skip to content

Commit 841deb4

Browse files
committed
Better warning when in Fortran a comment block is not closed
When having e.g. a stray `@code` in the comment we get a warning like: ``` Error in file .../gmsh-4.12.2-source/api/gmsh.f90 line: 15475, state: 29(DocCopyBlock) ``` where the line 15475 is the end of the file. It is a bit hard to find where the problem actually occurs, so a warning like: ``` Error in file .../gmsh-4.12.2-source/api/gmsh.f90 line: 15475, state: 29(DocCopyBlock), starting command: '@code' probable line reference: 6689 ``` is better
1 parent d7c6abe commit 841deb4

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

src/fortranscanner.l

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ struct fortranscannerYY_state
184184
bool docBlockInBody = false;
185185
bool docBlockJavaStyle;
186186
QCString docBlockName;
187+
QCString blockString;
188+
int blockLineNr=-1;
187189
QCString debugStr;
188190
size_t fencedSize = 0;
189191
// Argument *parameter; // element of parameter list
@@ -1436,6 +1438,8 @@ private {
14361438
yyextra->docBlockName.at(1)=')';
14371439
}
14381440
yyextra->fencedSize=0;
1441+
yyextra->blockString=yytext;
1442+
yyextra->blockLineNr=yyextra->lineNr;
14391443
BEGIN(DocCopyBlock);
14401444
}
14411445
<DocBlock>{CMD}"ifile"{B}+"\""[^\n\"]+"\"" {
@@ -1467,31 +1471,41 @@ private {
14671471
yyextra->docBlock += yytext;
14681472
yyextra->docBlockName="<pre>";
14691473
yyextra->fencedSize=0;
1474+
yyextra->blockString=yytext;
1475+
yyextra->blockLineNr=yyextra->lineNr;
14701476
BEGIN(DocCopyBlock);
14711477
}
14721478
<DocBlock>{B}*"<"<CODE>">" {
14731479
yyextra->docBlock += yytext;
14741480
yyextra->docBlockName="<code>";
14751481
yyextra->fencedSize=0;
1482+
yyextra->blockString=yytext;
1483+
yyextra->blockLineNr=yyextra->lineNr;
14761484
BEGIN(DocCopyBlock);
14771485
}
14781486
<DocBlock>{CMD}"startuml"/[^a-z_A-Z0-9\-] { // verbatim command
14791487
yyextra->docBlock += yytext;
14801488
yyextra->docBlockName="uml";
14811489
yyextra->fencedSize=0;
1490+
yyextra->blockString=yytext;
1491+
yyextra->blockLineNr=yyextra->lineNr;
14821492
BEGIN(DocCopyBlock);
14831493
}
14841494
<DocBlock>{CMD}("verbatim"|"iliteral"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"rtfonly"|"docbookonly"|"dot"|"msc"|"code")/[^a-z_A-Z0-9\-] { // verbatim command
14851495
yyextra->docBlock += yytext;
14861496
yyextra->docBlockName=&yytext[1];
14871497
yyextra->fencedSize=0;
1498+
yyextra->blockString=yytext;
1499+
yyextra->blockLineNr=yyextra->lineNr;
14881500
BEGIN(DocCopyBlock);
14891501
}
14901502
<DocBlock>"~~~"[~]* {
14911503
QCString pat = yytext;
14921504
yyextra->docBlock += pat;
14931505
yyextra->docBlockName="~~~";
14941506
yyextra->fencedSize=pat.length();
1507+
yyextra->blockString=yytext;
1508+
yyextra->blockLineNr=yyextra->lineNr;
14951509
BEGIN(DocCopyBlock);
14961510
}
14971511
<DocBlock>"```"[`]*/(".")?[a-zA-Z0-9#_-]+ |
@@ -1501,6 +1515,8 @@ private {
15011515
yyextra->docBlock += pat;
15021516
yyextra->docBlockName="```";
15031517
yyextra->fencedSize=pat.length();
1518+
yyextra->blockString=yytext;
1519+
yyextra->blockLineNr=yyextra->lineNr;
15041520
BEGIN(DocCopyBlock);
15051521
}
15061522
<DocBlock>[^@*`~\/\\\n]+ { // any character that isn't special
@@ -1528,6 +1544,8 @@ private {
15281544
if (yyextra->docBlockName=="<pre>")
15291545
{
15301546
yyextra->docBlockName="";
1547+
yyextra->blockString.clear();
1548+
yyextra->blockLineNr=-1;
15311549
BEGIN(DocBlock);
15321550
}
15331551
}
@@ -1536,6 +1554,8 @@ private {
15361554
if (yyextra->docBlockName=="<code>")
15371555
{
15381556
yyextra->docBlockName="";
1557+
yyextra->blockString.clear();
1558+
yyextra->blockLineNr=-1;
15391559
BEGIN(DocBlock);
15401560
}
15411561
}
@@ -1544,6 +1564,8 @@ private {
15441564
if (yyextra->docBlockName==&yytext[1])
15451565
{
15461566
yyextra->docBlockName="";
1567+
yyextra->blockString.clear();
1568+
yyextra->blockLineNr=-1;
15471569
BEGIN(DocBlock);
15481570
}
15491571
}
@@ -1552,6 +1574,8 @@ private {
15521574
if (&yytext[4]==yyextra->docBlockName)
15531575
{
15541576
yyextra->docBlockName="";
1577+
yyextra->blockString.clear();
1578+
yyextra->blockLineNr=-1;
15551579
BEGIN(DocBlock);
15561580
}
15571581
}
@@ -1573,6 +1597,8 @@ private {
15731597
yyextra->docBlock += pat;
15741598
if (yyextra->docBlockName == "~~~" && yyextra->fencedSize==pat.length())
15751599
{
1600+
yyextra->blockString.clear();
1601+
yyextra->blockLineNr=-1;
15761602
BEGIN(DocBlock);
15771603
}
15781604
}
@@ -1581,6 +1607,8 @@ private {
15811607
yyextra->docBlock += pat;
15821608
if (yyextra->docBlockName == "```" && yyextra->fencedSize==pat.length())
15831609
{
1610+
yyextra->blockString.clear();
1611+
yyextra->blockLineNr=-1;
15841612
BEGIN(DocBlock);
15851613
}
15861614
}
@@ -3343,7 +3371,16 @@ static void scanner_abort(yyscan_t yyscanner)
33433371
{
33443372
struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
33453373
fprintf(stderr,"********************************************************************\n");
3346-
fprintf(stderr,"Error in file %s line: %d, state: %d(%s)\n",qPrint(yyextra->fileName),yyextra->lineNr,YY_START,stateToString(YY_START));
3374+
if (yyextra->blockLineNr == -1)
3375+
{
3376+
fprintf(stderr,"Error in file %s line: %d, state: %d(%s)\n",
3377+
qPrint(yyextra->fileName),yyextra->lineNr,YY_START,stateToString(YY_START));
3378+
}
3379+
else
3380+
{
3381+
fprintf(stderr,"Error in file %s line: %d, state: %d(%s), starting command: '%s' probable line reference: %d\n",
3382+
qPrint(yyextra->fileName),yyextra->lineNr,YY_START,stateToString(YY_START),qPrint(yyextra->blockString),yyextra->blockLineNr);
3383+
}
33473384
fprintf(stderr,"********************************************************************\n");
33483385

33493386
bool start=FALSE;

0 commit comments

Comments
 (0)