code: func (a *ActionDefinition) initImplicitParams() {
  	for _, ro := range a.Routes {
  		for _, wc := range ro.Params() {
  			found := false
  			search := func(params *AttributeDefinition) {
  				if params == nil {
  					return
  				}
  				att, ok := params.Type.ToObject()[wc]
  				if ok {
  					if a.Params == nil {
  						a.Params = &AttributeDefinition{Type: Object{}}
  					}
  					a.Params.Type.ToObject()[wc] = att
  					found = true
  				}
  			}
  			search(a.Params)
  			parent := a.Parent
  			for !found && parent != nil {
  				bp := parent.Params
  				parent = parent.Parent()
  				search(bp)
  			}
  			if found {
  				continue
  			}
  			search(Design.Params)
  			if found {
  				continue
  			}
  			if a.Params == nil {
  				a.Params = &AttributeDefinition{Type: Object{}}
  			}
  			a.Params.Type.ToObject()[wc] = &AttributeDefinition{Type: String}
  		}
  	}
  }
docs: // initImplicitParams creates params for path segments that don't have one.