fprettify icon indicating copy to clipboard operation
fprettify copied to clipboard

`--enable-replacements` breaks multi-line Fortran statements

Open dbroemmel opened this issue 2 years ago • 1 comments
trafficstars

If a Fortran line is continued across multiple lines and contains a relation that is going to be replaced, linebreaks are not correct and the output is wrong (only tested in one direction, don't see why the other should be ok). Take as example:

     if (my_rank==0) write(*,*)  '# particles: ', npartr,'# electrons: ', ner, &
         'Box_x: ',xlr,&
          'Vplas: ',Vplas

and process via fprettify --enable-replacements, then linebreaks will be off by 2 characters. This will produce

     if (my_rank .eq. 0) write (*, *) '# particles: ', npartr, '# electrons: ', ner &
        , 'Box_x: ', xl &
        r, 'Vplas: ', Vplas

instead of

     if (my_rank .eq. 0) write (*, *) '# particles: ', npartr, '# electrons: ', ner, &
        'Box_x: ', xlr, &
        'Vplas: ', Vplas

This can break code.

I believe the error occurs because https://github.com/pseewald/fprettify/blob/c177742851f95c6ce6078027719f0edff5db5ad2/fprettify/init.py#L1557

is called on the original lines, while the following https://github.com/pseewald/fprettify/blob/c177742851f95c6ce6078027719f0edff5db5ad2/fprettify/init.py#L1561-L1562

adds (or subtracts) characters. So linebreak_pos would need to be updated (or populated later on). But I don't speak enough Python to see how to fix this right now.

dbroemmel avatar Jul 04 '23 13:07 dbroemmel

It does not seem to break in the other direction, i.e. replacing towards c-relations, e.g. '.gt.' to '>'.

dbroemmel avatar Jul 04 '23 14:07 dbroemmel