现代fortran源代码的自动格式化程序

fprettif的Python项目详细描述


fprettify

Build StatusCoverage StatusLicense: GPL v3PyPI version

fprettify是现代fortran代码的自动格式化程序,它采用python编写的严格的空白格式。

功能

  • 自动缩进。
  • 行连续体与前面的开头分隔符([(/对齐,或者与赋值运算符==>对齐。如果以上都不存在,则应用默认的挂起缩进。
  • 运算符和分隔符周围的空白量一致。
  • 删除无关空白和连续空白行。
  • 测试编辑器集成。
  • 默认情况下,fprettify只会导致空白更改,从而保留修订历史记录。
  • fprettify可以处理cpp和fypp预处理器指令。

限制

  • 仅适用于现代Fortran(Fortran 90以上)。
  • 功能丢失?请创建问题。

要求

  • python 2.7或python 3.x
  • ConfigArgParse:可选,启用配置文件的使用

示例

比较examples/*before.f90(原始Fortran文件)和examples/*after.f90(重新格式化的Fortran文件)以了解fprettify的作用。快速演示:

program demointeger::endif,if,elseifinteger,DIMENSION(2)::functionendif=3;if=2if(endif==2)thenendif=5elseif=if+4*(endif+&2**10)elseif(endif==3)thenfunction(if)=endif/elseifprint*,endifendifend program

____ fprettify

program demointeger::endif,if,elseifinteger,DIMENSION(2)::functionendif=3;if=2if(endif==2)thenendif=5elseif=if+4*(endif+&2**10)elseif(endif==3)then      function(if)=endif/elseifprint*,endifendifend program

安装

最新版本可以使用pip安装:

pip install --upgrade fprettify

从源代码安装需要python setuptools:

./setup.py install

对于本地安装,请使用--user选项。

命令行工具

自动格式化文件1、文件2…按

fprettify file1, file2, ...

默认缩进为3。如果您喜欢其他东西,请使用--indent n参数。

为了递归地将fprettify应用于整个fortran项目而不是单个文件,请使用-r选项。

有关更多选项,请阅读

fprettify -h

编辑器集成

对于编辑器集成,请使用

fprettify --silent

例如,对于vim,使用fprettify和gq,方法是在.vimrc中输入以下命令:

autocmd Filetype fortran setlocalformatprg=fprettify\ --silent

停用和手动格式化(实验功能)

对于所选行,可以停用fprettify:以!&开头的内联注释后面的一行不是自动格式化的,在两个注释行!&<!&>之间括起的连续行也不是自动格式化的。这对于首选手动对齐而不是自动格式化的情况非常有用。此外,当非标准Fortran语法(例如预处理器指令的高级用法)阻止正确的格式设置时,必须停用。例如,请考虑以下fprettify格式的代码片段:

A=[-1,10,0,&0,1000,0,&0,-1,1]

要手动对齐列,需要通过以下方式停用fprettify

A=[-1,10,0,&!&0,1000,0,&!&0,-1,1]!&

或者,等效于

!&<A=[-1,10,0,&0,1000,0,&0,-1,1]!&>

贡献/测试

测试机制允许您使用您选择的任何Fortran项目轻松测试fprettify。只需将整个项目克隆或复制到fortran_tests/before并运行python setup.py test。目录fortran_tests/after包含测试输出(重新格式化的fortran文件)。如果测试失败,请提交问题!

Code Climate

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring freemarker多模板加载程序路径   在java插件中从控制台获取输入   java在包中创建继承类   网页抓取Java Jsoup网页抓取   java在线程内创建一个对象,而true条件具有相同的引用   java如何根据空格数拆分字符串   java新的安卓 studio更新中的配置文件“app”是什么?   java在将ArrayList写入/读取到文件时出现奇怪的问题   java Reg替换文本块第一次出现+最后一次出现   java当我单击任何RecyclerView列表项时,如何在MainActivity的EditText中显示特定的单击项?   JAVA XML删除节点仅删除第一个外观   java如何在数组中查找特定值   java SVG/矢量图形对象布尔运算(并集、交集、减法)   java在Android中创建线程需要多长时间   尝试从JBOSS联系Oracle LDAP服务器时发生java连接重置异常   java基于参数获取特定的实现实例   使用java就地修改文件内容   java MonetaryException:未加载MonetaryAmountsSingletonSpi   java接受用户的不同输入并使其触发完全相同的代码段的最短方法是什么   Spring 3.2.8应用程序中未找到java HTTP 404错误