2 个不稳定版本

0.2.0 2022年9月29日
0.1.0 2022年9月6日

#163 in 值格式化

MIT 许可证

44KB
1K SLoC

Rust 1K SLoC // 0.0% comments QML 197 SLoC // 0.1% comments Python 5 SLoC

QML 格式化器

该仓库是一个简单的项目,实现了基本的 qml 格式化器,该格式化器用于我内部的项目中。

它是默认 QML 格式化器的替代品,有时会破坏我们的代码,因此我们想要创建自己的应用程序来仅使用所需规则来格式化文件。

我不期望在运行时添加任何配置选项。

目前格式化器可以

  • 从文件开始和结束处删除空行
  • 将多个空行连接成一行
  • 在末尾添加空行
  • 在 ? 前后添加空格
  • 格式化 if/else/for 单行语句
  • 处理 ', " 和 ` 内部的字符串
  • 格式化其他类内部的类

用法

格式化器在提供的文件夹内递归地检查 qml 文件

qml_formatter folder_with_files_to_check folder_with_files_to_check2 -efolder_with_excluded_files -efolder_with_excluded_files2

例如。

qml_formatter /home/a /home/b -e/home/a/not_to_check -e/home/a/completelly

将列出 /home/a/home/b 文件夹内所有不在 /home/a/not_to_check/home/a/completelly 内的文件。

默认情况下,应用程序以交互模式运行,需要确认格式化,但还有一个额外的参数 NO_QUESTION,它可以在不提问的情况下格式化文件,例如。

qml_formatter /home/a NO_QUESTION

转换示例

之前



import QtQuick
import "../../commons/elements"
import "../preparationScreen" as ExamCommons


Text {
    id     : root
    property var able: is_able? no_able: very_able
    signal pressed()
    image       :       "qrc://image.svg"
    layer.effect: ElevationEffect 
    
    {
        elevation: elevation
    }

}


之后

import QtQuick
import "../../commons/elements"
import "../preparationScreen" as ExamCommons

Text {
    id: root
    property var able: is_able ? no_able : very_able
    signal pressed()
    image: "qrc://image.svg"
    layer.effect: ElevationEffect {
        elevation: elevation
    }
}

待办事项

  • 支持 JavaScript/HTML/C++ 注释
  • switch/case
  • 更好的多行支持

局限性

没有 {} 的多行 for/if/else

for(abcd)
    if(abcd)
        DBCC()

将被格式化为

for(abcd)
    if(abcd)
    DBCC()

作为解决方案,始终使用完全支持的括号

for(abcd) {
    if(abcd) {
        DBCC()
    }
}

它适用于简单的单行语句

for(ABCD)
BCDF()

将成为

for(ABCD)
    BCDF()

依赖项

~0.1–7MB
~42K SLoC