提交 a61c9d83 编写于 作者: chai2010's avatar chai2010

修复并完善 fmt 命令

上级 db9d81ad
......@@ -8,7 +8,7 @@ import (
"wa-lang.org/wa/api"
)
func _ExampleFormatCode() {
func ExampleFormatCode() {
s, err := api.FormatCode("hello.wa", "func add(a:i32, b:i32)=>i32 {return a+b}")
if err != nil {
panic(err)
......
......@@ -14,12 +14,25 @@ import (
func Fmt(path string) error {
if path == "" {
path, _ = os.Getwd()
path = "."
}
var waFileList []string
if strings.HasSuffix(path, "...") {
waFileList = getDirWaFileList(strings.TrimSuffix(path, "..."))
switch {
case strings.HasSuffix(path, ".wa"):
waFileList = append(waFileList, path)
case strings.HasSuffix(path, ".wz"):
waFileList = append(waFileList, path)
case strings.HasSuffix(path, "..."):
waFileList = getDirWaFileList(
strings.TrimSuffix(path, "..."),
true, ".wa", ".wz", // 包含子目录
)
default:
// 不包含子目录
waFileList = getDirWaFileList(
path, false, ".wa", ".wz",
)
}
var changedFileList []string
......@@ -51,8 +64,28 @@ func fmtFile(path string) (changed bool, err error) {
return true, nil
}
func getDirWaFileList(dir string) []string {
func getDirWaFileList(dir string, walkSubDir bool, extList ...string) []string {
var waFileList []string
if !walkSubDir {
files, err := os.ReadDir(".")
if err != nil {
return nil
}
for _, file := range files {
if file.IsDir() {
continue
}
for _, ext := range extList {
if strings.HasSuffix(file.Name(), ext) {
waFileList = append(waFileList, filepath.Join(dir, file.Name()))
}
}
}
sort.Strings(waFileList)
return waFileList
}
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
......@@ -60,8 +93,11 @@ func getDirWaFileList(dir string) []string {
if info.IsDir() {
return nil
}
if strings.HasSuffix(path, ".wa") {
waFileList = append(waFileList, path)
for _, ext := range extList {
if strings.HasSuffix(path, ext) {
waFileList = append(waFileList, path)
return nil
}
}
return nil
})
......
......@@ -27,6 +27,7 @@ import (
"wa-lang.org/wa/internal/parser"
"wa-lang.org/wa/internal/printer"
"wa-lang.org/wa/internal/token"
"wa-lang.org/wa/internal/wamime"
)
var config = printer.Config{Mode: printer.UseSpaces | printer.TabIndent, Tabwidth: 8}
......@@ -65,11 +66,15 @@ func File(vfs fs.FS, filename string, src interface{}) (text []byte, changed boo
if err != nil {
return nil, false, err
}
golden, err := SourceFile(text)
if !bytes.Equal(text, golden) {
return text, false, nil
// TODO: 支持中文格式化
if wamime.GetCodeMime(filename, text) == "wa" {
golden, err := SourceFile(text)
if bytes.Equal(text, golden) {
return text, false, nil
}
return golden, true, err
}
return golden, true, nil
return text, false, nil
}
// Node formats node in canonical gofmt style and writes the result to dst.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册