| 
 | 1 | +package clidisplay  | 
 | 2 | + | 
 | 3 | +import (  | 
 | 4 | +	"fmt"  | 
 | 5 | +	"io"  | 
 | 6 | +	"strings"  | 
 | 7 | + | 
 | 8 | +	"github.com/coder/preview/types"  | 
 | 9 | +	"github.com/hashicorp/hcl/v2"  | 
 | 10 | +	"github.com/jedib0t/go-pretty/v6/table"  | 
 | 11 | +)  | 
 | 12 | + | 
 | 13 | +func WorkspaceTags(writer io.Writer, tags types.TagBlocks) hcl.Diagnostics {  | 
 | 14 | +	var diags hcl.Diagnostics  | 
 | 15 | + | 
 | 16 | +	tableWriter := table.NewWriter()  | 
 | 17 | +	tableWriter.SetTitle("Provisioner Tags")  | 
 | 18 | +	tableWriter.SetStyle(table.StyleLight)  | 
 | 19 | +	tableWriter.Style().Options.SeparateColumns = false  | 
 | 20 | +	row := table.Row{"Key", "Value", "Refs"}  | 
 | 21 | +	tableWriter.AppendHeader(row)  | 
 | 22 | +	for _, tb := range tags {  | 
 | 23 | +		for _, tag := range tb.Tags {  | 
 | 24 | +			if tag.IsKnown() {  | 
 | 25 | +				k, v := tag.AsStrings()  | 
 | 26 | +				tableWriter.AppendRow(table.Row{k, v, ""})  | 
 | 27 | +				continue  | 
 | 28 | +				//diags = diags.Extend(tDiags)  | 
 | 29 | +				//if !diags.HasErrors() {  | 
 | 30 | +				//	tableWriter.AppendRow(table.Row{k, v, ""})  | 
 | 31 | +				//	continue  | 
 | 32 | +				//}  | 
 | 33 | +			}  | 
 | 34 | + | 
 | 35 | +			k := tag.SafeKeyString()  | 
 | 36 | +			refs := tag.References()  | 
 | 37 | +			tableWriter.AppendRow(table.Row{k, "??", strings.Join(refs, "\n")})  | 
 | 38 | + | 
 | 39 | +			//refs := tb.AllReferences()  | 
 | 40 | +			//refsStr := make([]string, 0, len(refs))  | 
 | 41 | +			//for _, ref := range refs {  | 
 | 42 | +			//	refsStr = append(refsStr, ref.String())  | 
 | 43 | +			//}  | 
 | 44 | +			//tableWriter.AppendRow(table.Row{unknown, "???", strings.Join(refsStr, "\n")})  | 
 | 45 | +		}  | 
 | 46 | +	}  | 
 | 47 | +	_, _ = fmt.Fprintln(writer, tableWriter.Render())  | 
 | 48 | +	return diags  | 
 | 49 | +}  | 
 | 50 | + | 
 | 51 | +func Parameters(writer io.Writer, params []types.Parameter) {  | 
 | 52 | +	tableWriter := table.NewWriter()  | 
 | 53 | +	//tableWriter.SetTitle("Parameters")  | 
 | 54 | +	tableWriter.SetStyle(table.StyleLight)  | 
 | 55 | +	tableWriter.Style().Options.SeparateColumns = false  | 
 | 56 | +	row := table.Row{"Parameter"}  | 
 | 57 | +	tableWriter.AppendHeader(row)  | 
 | 58 | +	for _, p := range params {  | 
 | 59 | +		strVal := ""  | 
 | 60 | +		value := p.Value.Value  | 
 | 61 | + | 
 | 62 | +		if value.IsNull() {  | 
 | 63 | +			strVal = "null"  | 
 | 64 | +		} else if !p.Value.Value.IsKnown() {  | 
 | 65 | +			strVal = "unknown"  | 
 | 66 | +		} else {  | 
 | 67 | +			strVal = value.AsString()  | 
 | 68 | +		}  | 
 | 69 | + | 
 | 70 | +		tableWriter.AppendRow(table.Row{  | 
 | 71 | +			fmt.Sprintf("%s: %s\n%s", p.Name, p.Description, formatOptions(strVal, p.Options)),  | 
 | 72 | +		})  | 
 | 73 | +		tableWriter.AppendSeparator()  | 
 | 74 | +	}  | 
 | 75 | +	_, _ = fmt.Fprintln(writer, tableWriter.Render())  | 
 | 76 | +}  | 
 | 77 | + | 
 | 78 | +func formatOptions(selected string, options []*types.RichParameterOption) string {  | 
 | 79 | +	var str strings.Builder  | 
 | 80 | +	sep := ""  | 
 | 81 | +	found := false  | 
 | 82 | +	for _, opt := range options {  | 
 | 83 | +		str.WriteString(sep)  | 
 | 84 | +		prefix := "[ ]"  | 
 | 85 | +		if opt.Value == selected {  | 
 | 86 | +			prefix = "[X]"  | 
 | 87 | +			found = true  | 
 | 88 | +		}  | 
 | 89 | +		str.WriteString(fmt.Sprintf("%s %s (%s)", prefix, opt.Name, opt.Value))  | 
 | 90 | +		if opt.Description != "" {  | 
 | 91 | +			str.WriteString(fmt.Sprintf(": %s", maxLength(opt.Description, 20)))  | 
 | 92 | +		}  | 
 | 93 | +		sep = "\n"  | 
 | 94 | +	}  | 
 | 95 | +	if !found {  | 
 | 96 | +		str.WriteString(sep)  | 
 | 97 | +		str.WriteString(fmt.Sprintf("= %s", selected))  | 
 | 98 | +	}  | 
 | 99 | +	return str.String()  | 
 | 100 | +}  | 
 | 101 | + | 
 | 102 | +func maxLength(s string, max int) string {  | 
 | 103 | +	if len(s) > max {  | 
 | 104 | +		return s[:max] + "..."  | 
 | 105 | +	}  | 
 | 106 | +	return s  | 
 | 107 | +}  | 
0 commit comments