1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00

style: go fmt ./...

also delete mkrw.go, we can maintain this file by hand.
This commit is contained in:
wdvxdr 2022-04-14 21:53:00 +08:00
parent eaf34288de
commit 18a091145a
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6
5 changed files with 40 additions and 175 deletions

View File

@ -3,15 +3,11 @@ package cqcode
import "strings" import "strings"
/*EscapeText 将字符串raw中部分字符转义 // EscapeText 将字符串raw中部分字符转义
//
& -> & // - & -> &
// - [ -> [
[ -> [ // - ] -> ]
] -> ]
*/
func EscapeText(s string) string { func EscapeText(s string) string {
count := strings.Count(s, "&") count := strings.Count(s, "&")
count += strings.Count(s, "[") count += strings.Count(s, "[")
@ -47,31 +43,22 @@ func EscapeText(s string) string {
return b.String() return b.String()
} }
/*EscapeValue 将字符串value中部分字符转义 // EscapeValue 将字符串value中部分字符转义
//
, -> , // - , -> ,
// - & -> &
& -> & // - [ -> [
// - ] -> ]
[ -> [
] -> ]
*/
func EscapeValue(value string) string { func EscapeValue(value string) string {
ret := EscapeText(value) ret := EscapeText(value)
return strings.ReplaceAll(ret, ",", ",") return strings.ReplaceAll(ret, ",", ",")
} }
/*UnescapeText 将字符串content中部分字符反转义 // UnescapeText 将字符串content中部分字符反转义
//
& -> & // - & -> &
// - [ -> [
[ -> [ // - ] -> ]
] -> ]
*/
func UnescapeText(content string) string { func UnescapeText(content string) string {
ret := content ret := content
ret = strings.ReplaceAll(ret, "[", "[") ret = strings.ReplaceAll(ret, "[", "[")
@ -80,17 +67,12 @@ func UnescapeText(content string) string {
return ret return ret
} }
/*UnescapeValue 将字符串content中部分字符反转义 // UnescapeValue 将字符串content中部分字符反转义
//
, -> , // - , -> ,
// - & -> &
& -> & // - [ -> [
// - ] -> ]
[ -> [
] -> ]
*/
func UnescapeValue(content string) string { func UnescapeValue(content string) string {
ret := strings.ReplaceAll(content, ",", ",") ret := strings.ReplaceAll(content, ",", ",")
return UnescapeText(ret) return UnescapeText(ret)

View File

@ -1,129 +0,0 @@
//go:build ignore
package main
import (
"bytes"
"fmt"
"go/ast"
"go/format"
"go/parser"
"go/token"
"os"
)
var output bytes.Buffer
func fprintf(format string, args ...interface{}) {
_, _ = fmt.Fprintf(&output, format, args...)
}
func main() {
f, _ := parser.ParseFile(token.NewFileSet(), "./../database.go", nil, 0)
fprintf("// Code generated by mkrw.go; DO NOT EDIT.\n\n")
fprintf("package leveldb\n\n")
fprintf("import \"github.com/Mrs4s/go-cqhttp/db\"\n\n")
ast.Inspect(f, func(node ast.Node) bool {
switch node := node.(type) {
case *ast.FuncDecl:
return false
case *ast.TypeSpec:
if !node.Name.IsExported() {
return false
}
x, ok := node.Type.(*ast.StructType)
if !ok {
return false
}
if x.Fields != nil && x.Fields.List != nil {
mkWrite(node)
mkRead(node)
}
}
return true
})
out, err := format.Source(output.Bytes())
if err != nil {
fmt.Println(string(output.Bytes()))
panic(err)
}
os.WriteFile("database_gen.go", out, 0o644)
}
func typeName(typ ast.Expr) string {
switch typ := typ.(type) {
case *ast.Ident:
return typ.Name
case *ast.ArrayType:
if typ.Len != nil {
panic("unexpected array type")
}
return "[]" + typeName(typ.Elt)
case *ast.SelectorExpr:
return typeName(typ.X) + "." + typ.Sel.Name
}
panic("unexpected type")
}
func mkWrite(node *ast.TypeSpec) {
typename := node.Name.String()
structType := node.Type.(*ast.StructType)
fprintf("func (w *writer) write%s(x *db.%s) {\n", typename, typename)
fprintf("if x == nil {\n")
fprintf("w.nil()\n")
fprintf("return\n")
fprintf("}\n")
fprintf("w.coder(coderStruct)\n")
for _, field := range structType.Fields.List {
switch typ := field.Type.(type) {
case *ast.Ident:
for _, name := range field.Names {
fprintf("w.%s(x.%s)\n", typ.Name, name.Name)
}
case *ast.ArrayType:
if typeName(typ) != "[]global.MSG" {
panic("unexpected array type")
}
for _, name := range field.Names {
fprintf("w.arrayMsg(x.%s)\n", name.Name)
}
case *ast.StarExpr:
for _, name := range field.Names {
fprintf("w.write%s(x.%s)\n", typeName(typ.X), name.Name)
}
}
}
fprintf("}\n\n")
}
func mkRead(node *ast.TypeSpec) {
typename := node.Name.String()
structType := node.Type.(*ast.StructType)
fprintf(`func (r *reader) read%s() *db.%s {
coder := r.coder()
if coder == coderNil {
return nil
}`+"\n", typename, typename)
fprintf("x := &db.%s{}\n", typename)
for _, field := range structType.Fields.List {
switch typ := field.Type.(type) {
case *ast.Ident:
for _, name := range field.Names {
fprintf("x.%s = r.%s()\n", name.Name, typ.Name)
}
case *ast.ArrayType:
if typeName(typ) != "[]global.MSG" {
panic("unexpected array type")
}
for _, name := range field.Names {
fprintf("x.%s = r.arrayMsg()\n", name.Name)
}
case *ast.StarExpr:
for _, name := range field.Names {
fprintf("x.%s = r.read%s()\n", name.Name, typeName(typ.X))
}
}
}
fprintf("return x\n")
fprintf("}\n\n")
}

View File

@ -1,5 +1,3 @@
// Code generated by mkrw.go; DO NOT EDIT.
package leveldb package leveldb
import "github.com/Mrs4s/go-cqhttp/db" import "github.com/Mrs4s/go-cqhttp/db"

View File

@ -23,12 +23,25 @@ func (w *intWriter) uvarint(x uint64) {
} }
// writer implements the index write. // writer implements the index write.
//
// data format(use uvarint to encode integers): // data format(use uvarint to encode integers):
// | version | string data length | index data length | string data | index data | //
// - version
// - string data length
// - index data length
// - string data
// - index data
//
// for string data part, each string is encoded as: // for string data part, each string is encoded as:
// | string length | string | //
// for index data part, each value is encoded as: // - string length
// | coder | value | // - string
//
// for index data part, each object value is encoded as:
//
// - coder
// - value
//
// * coder is the identifier of value's type. // * coder is the identifier of value's type.
// * specially for string, it's value is the offset in string data part. // * specially for string, it's value is the offset in string data part.
type writer struct { type writer struct {

View File

@ -14,6 +14,7 @@ import (
) )
// defaultConfig 默认配置文件 // defaultConfig 默认配置文件
//
//go:embed default_config.yml //go:embed default_config.yml
var defaultConfig string var defaultConfig string