现代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有没有办法在堆栈后保留元素。pop()?   多线程Java:Thread。currentThread()。getName()返回“还没有线程”   java For循环只返回最后一个值   java初始化和比较整数   Java将自定义光标热点设置为图像的中心(.png)   java如何在assertThat中使用带有类型推断的hamcrest nullValue   java Quarkus REST客户端避免空字段的JSON序列化   java使用JFileChooser将语音从文本保存到语音文件   java Android Studio找不到JAR'org。日食jgit4。5.3.201708160445r。罐子   java如何在ElasticSearch中使用带通配符的术语?   java可能的空指针异常安卓   在JavaSwing中使用AwesomeFont中的自定义字体和unicode字符向JButton添加图标?   部署过程中的java持久化单元名称问题WildFly   JavaSpring数据:我无法在数据库中保存关系模型   字符串如何计算文件中单词的长度?JAVA   java Eclipse调试器中变量项旁边的id=xxx是什么   httpclient Java httppost文件打印后上载速度   JAXB对象不实现可序列化的结果是什么?   java Spring JPA数据:自定义通用存储库和服务:未满足PendencyException   java如何从解析类中检索所有值?