fortran-lang / fprettify

auto-formatter for modern fortran source code
https://pypi.python.org/pypi/fprettify
Other
363 stars 70 forks source link

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

Open dbroemmel opened 1 year ago

dbroemmel commented 1 year ago

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 commented 1 year ago

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