func()

in src/go/cmd/token_makers.go [239:352]


func (f Func) MakeTokens() []ReviewToken {
	tks := []ReviewToken{}
	// prefix with "func" if f isn't embedded in an interface
	if !f.embedded {
		tks = append(tks, ReviewToken{
			HasSuffixSpace: true,
			Kind:           TokenKindKeyword,
			Value:          "func",
		})
	}
	if f.ReceiverType != "" {
		tks = append(tks, ReviewToken{
			Kind:  TokenKindText,
			Value: "(",
		})
		tks = append(tks, parseAndMakeTypeTokens(f.ReceiverType)...)
		tks = append(tks, ReviewToken{
			HasSuffixSpace: true,
			Kind:           TokenKindPunctuation,
			Value:          ")",
		})
	}
	tks = append(tks, ReviewToken{
		Kind:  TokenKindTypeName,
		Value: f.name,
	})
	if len(f.typeParamNames) > 0 {
		tks = append(tks, ReviewToken{
			Kind:  TokenKindPunctuation,
			Value: "[",
		})
		for i, p := range f.typeParamNames {
			if i > 0 {
				tks = append(tks, ReviewToken{
					HasSuffixSpace: true,
					Kind:           TokenKindPunctuation,
					Value:          ",",
				})
			}
			tks = append(tks, ReviewToken{
				HasSuffixSpace: true,
				Kind:           TokenKindMemberName,
				Value:          p,
			})
			tks = append(tks, parseAndMakeTypeTokens(f.typeParamConstraints[i])...)
		}
		tks = append(tks, ReviewToken{
			Kind:  TokenKindPunctuation,
			Value: "]",
		})
	}
	paren := "("
	if len(f.paramNames) == 0 {
		paren += ")"
	}
	tks = append(tks, ReviewToken{
		Kind:  TokenKindPunctuation,
		Value: paren,
	})
	for i, p := range f.paramNames {
		if p != "" {
			tks = append(tks, ReviewToken{
				HasSuffixSpace: true,
				Kind:           TokenKindMemberName,
				Value:          p,
			})
			tks = append(tks, parseAndMakeTypeTokens(f.paramTypes[i])...)
		} else {
			// parameter names are optional
			tks = append(tks, parseAndMakeTypeTokens(f.paramTypes[i])...)
		}
		if i < len(f.paramNames)-1 {
			tks = append(tks, ReviewToken{
				HasSuffixSpace: true,
				Kind:           TokenKindPunctuation,
				Value:          ",",
			})
		}
	}
	if len(f.paramNames) > 0 {
		tks = append(tks, ReviewToken{
			Kind:  TokenKindPunctuation,
			Value: ")",
		})
	}
	if len(f.Returns) > 0 {
		if len(f.Returns) > 1 {
			tks = append(tks, ReviewToken{
				HasPrefixSpace: true,
				Kind:           TokenKindPunctuation,
				Value:          "(",
			})
		} else {
			tks[len(tks)-1].HasSuffixSpace = true
		}
		for i, t := range f.Returns {
			tks = append(tks, parseAndMakeTypeTokens(t)...)
			if i < len(f.Returns)-1 {
				tks = append(tks, ReviewToken{
					HasSuffixSpace: true,
					Kind:           TokenKindPunctuation,
					Value:          ",",
				})
			}
		}
		if len(f.Returns) > 1 {
			tks = append(tks, ReviewToken{
				Kind:  TokenKindPunctuation,
				Value: ")",
			})
		}
	}
	return tks
}