github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/interactive/metaquery/handler_help.go (about)

     1  package metaquery
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"sort"
     7  	"strings"
     8  
     9  	"github.com/turbot/go-kit/helpers"
    10  	"github.com/turbot/steampipe/pkg/constants"
    11  )
    12  
    13  // .help
    14  func doHelp(_ context.Context, _ *HandlerInput) error {
    15  	var commonCmds = []string{constants.CmdHelp, constants.CmdInspect, constants.CmdExit}
    16  
    17  	commonCmdRows := getMetaQueryHelpRows(commonCmds, false)
    18  	var advanceCmds []string
    19  	for cmd := range metaQueryDefinitions {
    20  		if !helpers.StringSliceContains(commonCmds, cmd) {
    21  			advanceCmds = append(advanceCmds, cmd)
    22  		}
    23  	}
    24  	advanceCmdRows := getMetaQueryHelpRows(advanceCmds, true)
    25  	// print out
    26  	fmt.Printf("Welcome to Steampipe shell.\n\nTo start, simply enter your SQL query at the prompt:\n\n  select * from aws_iam_user\n\nCommon commands:\n\n%s\n\nAdvanced commands:\n\n%s\n\nDocumentation available at %s\n",
    27  		buildTable(commonCmdRows, true),
    28  		buildTable(advanceCmdRows, true),
    29  		constants.Bold("https://steampipe.io/docs"))
    30  	fmt.Println()
    31  	return nil
    32  }
    33  
    34  func getMetaQueryHelpRows(cmds []string, arrange bool) [][]string {
    35  	var rows [][]string
    36  	for _, cmd := range cmds {
    37  		metaQuery := metaQueryDefinitions[cmd]
    38  		var argsStr []string
    39  		if len(metaQuery.args) > 2 {
    40  			rows = append(rows, []string{cmd + " " + "[mode]", metaQuery.description})
    41  		} else {
    42  			for _, v := range metaQuery.args {
    43  				argsStr = append(argsStr, v.value)
    44  			}
    45  			rows = append(rows, []string{cmd + " " + strings.Join(argsStr, "|"), metaQuery.description})
    46  		}
    47  	}
    48  	// sort by metacmds name
    49  	if arrange {
    50  		sort.SliceStable(rows, func(i, j int) bool {
    51  			return rows[i][0] < rows[j][0]
    52  		})
    53  	}
    54  	return rows
    55  }