diff --git a/operation.go b/operation.go index dfc529c1f..af3f530f6 100644 --- a/operation.go +++ b/operation.go @@ -9,6 +9,7 @@ import ( "net/http" "os" "regexp" + "sort" "strconv" "strings" @@ -208,7 +209,13 @@ func (operation *Operation) ParseParamComment(commentLine string, astFile *ast.F } return false } - for name, prop := range schema.Properties { + orderedNames := make([]string, 0, len(schema.Properties)) + for k, _ := range schema.Properties { + orderedNames = append(orderedNames, k) + } + sort.Strings(orderedNames) + for _, name := range orderedNames { + prop := schema.Properties[name] if len(prop.Type) == 0 { continue } diff --git a/parser_test.go b/parser_test.go index 1bf371bee..717e5aef8 100644 --- a/parser_test.go +++ b/parser_test.go @@ -3056,6 +3056,42 @@ func Fun() { } ` + expected := `{ + "info": { + "contact": {}, + "license": {} + }, + "paths": { + "/test": { + "get": { + "parameters": [ + { + "type": "integer", + "name": "age", + "in": "query" + }, + { + "type": "string", + "name": "name", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "name": "teachers", + "in": "query" + } + ], + "responses": { + "200": {} + } + } + } + } +}` + f, err := goparser.ParseFile(token.NewFileSet(), "", src, goparser.ParseComments) assert.NoError(t, err) @@ -3064,7 +3100,8 @@ func Fun() { err = p.ParseRouterAPIInfo("", f) assert.NoError(t, err) - assert.Equal(t, 3, len(p.swagger.Paths.Paths["/test"].Get.Parameters)) + b, _ := json.MarshalIndent(p.swagger, "", " ") + assert.Equal(t, expected, string(b)) } func TestParseRenamedStructDefinition(t *testing.T) {