MCPcopy Create free account
hub / github.com/OverloadBlitz/cloudcent-cli / SuggestAttrs

Function SuggestAttrs

internal/semantic/semantic.go:335–444  ·  view source on GitHub ↗

SuggestAttrs returns attribute key or key=value suggestions.

(
	query string,
	productIDs []string,
	productAttrs map[string][]string,
	attributeValues map[string]map[string][]string,
	selectedTags []string,
)

Source from the content-addressed store, hash-verified

333
334// SuggestAttrs returns attribute key or key=value suggestions.
335func SuggestAttrs(
336 query string,
337 productIDs []string,
338 productAttrs map[string][]string,
339 attributeValues map[string]map[string][]string,
340 selectedTags []string,
341) []SuggestionItem {
342 q := strings.ToLower(query)
343
344 if strings.Contains(q, "=") {
345 // Phase 2: value selection
346 parts := strings.SplitN(q, "=", 2)
347 keyFilter := parts[0]
348 valFilter := parts[1]
349
350 valSet := map[string]struct{}{}
351 for _, pid := range productIDs {
352 if attrs, ok := attributeValues[pid]; ok {
353 for attrName, vals := range attrs {
354 if strings.ToLower(attrName) == keyFilter {
355 for _, v := range vals {
356 valSet[v] = struct{}{}
357 }
358 }
359 }
360 }
361 }
362
363 values := make([]string, 0, len(valSet))
364 for v := range valSet {
365 values = append(values, v)
366 }
367
368 allNumeric := len(values) > 0
369 for _, v := range values {
370 if _, err := strconv.ParseFloat(v, 64); err != nil {
371 allNumeric = false
372 break
373 }
374 }
375 if allNumeric {
376 sort.Slice(values, func(i, j int) bool {
377 a, _ := strconv.ParseFloat(values[i], 64)
378 b, _ := strconv.ParseFloat(values[j], 64)
379 return a < b
380 })
381 } else {
382 sort.Slice(values, func(i, j int) bool {
383 return strings.ToLower(values[i]) < strings.ToLower(values[j])
384 })
385 }
386
387 var items []SuggestionItem
388 for _, val := range values {
389 if valFilter != "" && !strings.Contains(strings.ToLower(val), valFilter) {
390 continue
391 }
392 tagVal := keyFilter + "=" + val

Callers 1

UpdateSuggestionsMethod · 0.92

Calls

no outgoing calls

Tested by

no test coverage detected