copy qmlfmt over from cwtch.im/ui/cmd/qmlfmt
This commit is contained in:
commit
fbfe9d6edf
|
@ -0,0 +1,3 @@
|
||||||
|
# qmlfmt
|
||||||
|
|
||||||
|
`qmlfmt` in place edits the qml files specified on the command line applying fixed 4 space indent rules to them. This simple tool is aimed at projects working with QML but not using QT Creator so not benefiting from it's auto formating.
|
|
@ -0,0 +1,91 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
indent = " "
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if len(os.Args) < 2 {
|
||||||
|
log.Fatal("Required argument(s): filename(s)")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, filename := range os.Args[1:] {
|
||||||
|
processFile(filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func processFile(filename string) {
|
||||||
|
file, err := os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Could not read file %v: %v\n", filename, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
var lines []string
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
lines = append(lines, scanner.Text())
|
||||||
|
}
|
||||||
|
|
||||||
|
file.Close()
|
||||||
|
|
||||||
|
file, err = os.Create(filename)
|
||||||
|
defer file.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Could not write to file %v: %v\n", filename, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
indentCount := 0
|
||||||
|
inMultiLineComment := false
|
||||||
|
|
||||||
|
for ln, line := range lines {
|
||||||
|
|
||||||
|
singleCommentPos := strings.Index(line, "//")
|
||||||
|
multiLineCommentStartPos := strings.Index(line, "/*")
|
||||||
|
multiLineCommentEndPos := strings.Index(line, "*/")
|
||||||
|
|
||||||
|
openPos := strings.Index(line, "{")
|
||||||
|
closePos := strings.Index(line, "}")
|
||||||
|
|
||||||
|
if !inMultiLineComment && closePos > -1 && (openPos == -1 || openPos > closePos) && (singleCommentPos == -1 || closePos < singleCommentPos) &&
|
||||||
|
(multiLineCommentStartPos == -1 || closePos < multiLineCommentStartPos) &&
|
||||||
|
(multiLineCommentEndPos == -1 || closePos > multiLineCommentEndPos) {
|
||||||
|
indentCount--
|
||||||
|
}
|
||||||
|
|
||||||
|
trimedLine := strings.Trim(line, " \t")
|
||||||
|
if trimedLine == "" {
|
||||||
|
file.Write([]byte("\n"))
|
||||||
|
} else {
|
||||||
|
if indentCount < 0 {
|
||||||
|
log.Fatalf("indent Count negative in %v at line %v\n", filename, ln)
|
||||||
|
}
|
||||||
|
|
||||||
|
file.Write([]byte(strings.Repeat(indent, indentCount) + trimedLine + "\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !inMultiLineComment && openPos > -1 && (closePos == -1 || openPos > closePos) && (singleCommentPos == -1 || openPos < singleCommentPos) &&
|
||||||
|
(multiLineCommentStartPos == -1 || openPos < multiLineCommentStartPos) &&
|
||||||
|
(multiLineCommentEndPos == -1 || openPos > multiLineCommentEndPos) {
|
||||||
|
indentCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
if multiLineCommentStartPos > -1 {
|
||||||
|
inMultiLineComment = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if multiLineCommentEndPos > -1 {
|
||||||
|
inMultiLineComment = false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue