One Hat Cyber Team
Your IP :
216.73.216.115
Server IP :
194.44.31.54
Server :
Linux zen.imath.kiev.ua 4.18.0-553.77.1.el8_10.x86_64 #1 SMP Fri Oct 3 14:30:23 UTC 2025 x86_64
Server Software :
Apache/2.4.37 (Rocky Linux) OpenSSL/1.1.1k
PHP Version :
5.6.40
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
doc
/
snapd
/
Edit File:
error-kinds.go
package main import ( "fmt" "go/ast" "go/doc" "go/parser" "go/token" "os" "sort" "strconv" "strings" ) const ( errorKindsHdr = `## <h3 id='heading--errors'>Error kinds</h3>` maintErrorKindsHdr = `## <h4 id='heading--maint-errors'>Maintenance error kinds</h4> These are used only inside the ` + "`maintenance` field of responses." ) func fail(err error) { fmt.Fprintf(os.Stderr, "error: %v", err) os.Exit(1) } func main() { fset := token.NewFileSet() pkgs, err := parser.ParseDir(fset, "../client", nil, parser.ParseComments) if err != nil { fail(err) } p := doc.New(pkgs["client"], "github.com/snapcore/snapd/client", 0) var errorKindT *doc.Type for _, t := range p.Types { if t.Name == "ErrorKind" { errorKindT = t break } } if errorKindT == nil { fail(fmt.Errorf("expected ErrorKind type not defined")) } for _, c := range errorKindT.Consts { if strings.HasPrefix(c.Doc, "Error kinds.") { fmt.Println(errorKindsHdr) } else if strings.HasPrefix(c.Doc, "Maintenance error kinds") { fmt.Println() fmt.Println(maintErrorKindsHdr) } else { fmt.Fprintf(os.Stderr, "unexpected error kind group: %v\n", c.Doc) continue } fmt.Println() kinds := make([]string, 0, len(c.Decl.Specs)) docs := make(map[string]string, len(c.Decl.Specs)) for _, spec := range c.Decl.Specs { vs, ok := spec.(*ast.ValueSpec) if !ok { fmt.Printf("%#v\n", spec) continue } kind, err := strconv.Unquote(vs.Values[0].(*ast.BasicLit).Value) if err != nil { // unexpected fail(err) } doc := vs.Doc.Text() name := vs.Names[0] pfx := name.String() + ":" if !strings.HasPrefix(doc, pfx) { fmt.Fprintf(os.Stderr, "expected %s: doc string prefix, got %q\n", name, doc) } else { doc = doc[len(pfx):] } doc = strings.Replace(doc, "\n", " ", -1) doc = strings.Replace(doc, " ", " ", -1) doc = strings.TrimSpace(doc) if !strings.HasSuffix(doc, ".") { fmt.Fprintf(os.Stderr, "expected dot at the end %q for %s\n", doc, name) } if strings.HasPrefix(doc, "deprecated") { // skip continue } if doc == "" { doc = name.String() + "..." } kinds = append(kinds, kind) docs[kind] = doc } sort.Strings(kinds) for _, kind := range kinds { fmt.Printf("* `%s`: %s\n", kind, docs[kind]) } } }
Simpan