github.com/daixiang0/gci@v0.13.0/pkg/section/parser.go (about)

     1  package section
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  func Parse(data []string) (SectionList, error) {
    10  	if len(data) == 0 {
    11  		return nil, nil
    12  	}
    13  
    14  	var list SectionList
    15  	var errString string
    16  	for _, d := range data {
    17  		s := strings.ToLower(d)
    18  		if len(s) == 0 {
    19  			return nil, nil
    20  		}
    21  
    22  		if s == "default" {
    23  			list = append(list, Default{})
    24  		} else if s == "standard" {
    25  			list = append(list, Standard{})
    26  		} else if s == "newline" {
    27  			list = append(list, NewLine{})
    28  		} else if strings.HasPrefix(s, "prefix(") && len(d) > 8 {
    29  			list = append(list, Custom{d[7 : len(d)-1]})
    30  		} else if strings.HasPrefix(s, "commentline(") && len(d) > 13 {
    31  			list = append(list, Custom{d[12 : len(d)-1]})
    32  		} else if s == "dot" {
    33  			list = append(list, Dot{})
    34  		} else if s == "blank" {
    35  			list = append(list, Blank{})
    36  		} else if s == "alias" {
    37  			list = append(list, Alias{})
    38  		} else if s == "localmodule" {
    39  			// pointer because we need to mutate the section at configuration time
    40  			list = append(list, &LocalModule{})
    41  		} else {
    42  			errString += fmt.Sprintf(" %s", s)
    43  		}
    44  	}
    45  	if errString != "" {
    46  		return nil, errors.New(fmt.Sprintf("invalid params:%s", errString))
    47  	}
    48  	return list, nil
    49  }