func parsePluginConfigurationItem()

in internal/satellite/tools/generate_plugin_doc.go [270:324]


func parsePluginConfigurationItem(field *ast.Field, pType reflect.Type) (*pluginConfigurationItem, *pluginChildrenFinder) {
	if field.Tag == nil {
		return nil, nil
	}

	var fieldName = ""
	if field.Names != nil {
		for _, n := range field.Names {
			fieldName += n.Name
		}
	} else {
		expr, ok := field.Type.(*ast.SelectorExpr)
		if !ok {
			return nil, nil
		}
		fieldName = expr.Sel.Name
	}

	pluginField, find := pType.FieldByName(fieldName)
	if !find {
		return nil, nil
	}
	mapStructureValue := pluginField.Tag.Get("mapstructure")
	var confName string
	var childrenFinder *pluginChildrenFinder
	if index := strings.Index(mapStructureValue, ","); index != -1 {
		if strings.Contains(mapStructureValue[index+1:], "squash") {
			if pluginField.Type.Kind() == reflect.Struct {
				return nil, &pluginChildrenFinder{childType: pluginField.Type, squash: true}
			}
			log.Logger.Warnf("Could not identity plugin field: %v", pluginField)
			return nil, nil
		}
		confName = mapStructureValue[:index]
	} else if mapStructureValue != "" {
		confName = mapStructureValue
	} else {
		confName = fieldName
	}

	var dataType = pluginField.Type.String()
	switch pluginField.Type.Kind() {
	case reflect.Struct:
	case reflect.Ptr:
		if pluginField.Type.Elem().PkgPath() != "" {
			childrenFinder = &pluginChildrenFinder{childType: pluginField.Type.Elem()}
		}
	}

	return &pluginConfigurationItem{
		name:        confName,
		dataType:    dataType,
		description: buildPluginDescription(field),
	}, childrenFinder
}