Skip to content

Commit 1d12927

Browse files
go
1 parent 9c8bb4c commit 1d12927

2 files changed

Lines changed: 49 additions & 21 deletions

File tree

cmd/docs/docs.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/spf13/cobra"
2525
)
2626

27-
var searchFlag string
27+
var searchMode bool
2828

2929
func NewCommand(clients *shared.ClientFactory) *cobra.Command {
3030
cmd := &cobra.Command{
@@ -37,17 +37,25 @@ func NewCommand(clients *shared.ClientFactory) *cobra.Command {
3737
Command: "docs",
3838
},
3939
{
40-
Meaning: "Search Slack developer docs",
41-
Command: "docs --search 'Block Kit'",
40+
Meaning: "Open Slack docs search page",
41+
Command: "docs --search",
42+
},
43+
{
44+
Meaning: "Search Slack docs",
45+
Command: "docs --search \"Block Kit\"",
46+
},
47+
{
48+
Meaning: "Search Slack docs without search flag",
49+
Command: "docs \"Block Kit\"",
4250
},
4351
}),
44-
Args: cobra.NoArgs,
52+
Args: cobra.MaximumNArgs(1), // Allow 0-1 arguments for search query
4553
RunE: func(cmd *cobra.Command, args []string) error {
4654
return runDocsCommand(clients, cmd, args)
4755
},
4856
}
4957

50-
cmd.Flags().StringVar(&searchFlag, "search", "", "search query for Slack docs")
58+
cmd.Flags().BoolVar(&searchMode, "search", false, "open Slack docs search page")
5159

5260
return cmd
5361
}
@@ -59,13 +67,17 @@ func runDocsCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []st
5967
var docsURL string
6068
var sectionText string
6169

62-
if searchFlag != "" {
63-
// Build search URL
64-
searchQuery := url.QueryEscape(searchFlag)
70+
if len(args) > 0 {
71+
// Search query provided as positional argument: slack docs "query"
72+
searchQuery := url.QueryEscape(args[0])
6573
docsURL = fmt.Sprintf("https://docs.slack.dev/search/?q=%s", searchQuery)
6674
sectionText = "Docs Search"
75+
} else if searchMode {
76+
// Search flag provided without query: slack docs --search
77+
docsURL = "https://docs.slack.dev/search/"
78+
sectionText = "Docs Search"
6779
} else {
68-
// Default docs homepage
80+
// Default homepage: slack docs
6981
docsURL = "https://docs.slack.dev"
7082
sectionText = "Docs Open"
7183
}
@@ -80,8 +92,12 @@ func runDocsCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []st
8092

8193
clients.Browser().OpenURL(docsURL)
8294

83-
if searchFlag != "" {
84-
clients.IO.PrintTrace(ctx, slacktrace.DocsSearchSuccess, searchFlag)
95+
if len(args) > 0 || searchMode {
96+
traceValue := ""
97+
if len(args) > 0 {
98+
traceValue = args[0]
99+
}
100+
clients.IO.PrintTrace(ctx, slacktrace.DocsSearchSuccess, traceValue)
85101
} else {
86102
clients.IO.PrintTrace(ctx, slacktrace.DocsSuccess)
87103
}

cmd/docs/docs_test.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func Test_Docs_DocsCommand(t *testing.T) {
4141
},
4242
},
4343
"opens docs with basic search query": {
44-
CmdArgs: []string{"--search", "messaging"},
44+
CmdArgs: []string{"messaging"},
4545
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
4646
expectedURL := "https://docs.slack.dev/search/?q=messaging"
4747
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
@@ -53,7 +53,7 @@ func Test_Docs_DocsCommand(t *testing.T) {
5353
},
5454
},
5555
"handles search query with multiple words": {
56-
CmdArgs: []string{"--search", "socket mode"},
56+
CmdArgs: []string{"socket mode"},
5757
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
5858
expectedURL := "https://docs.slack.dev/search/?q=socket+mode"
5959
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
@@ -65,7 +65,7 @@ func Test_Docs_DocsCommand(t *testing.T) {
6565
},
6666
},
6767
"handles special characters in search query": {
68-
CmdArgs: []string{"--search", "messages & webhooks"},
68+
CmdArgs: []string{"messages & webhooks"},
6969
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
7070
expectedURL := "https://docs.slack.dev/search/?q=messages+%26+webhooks"
7171
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
@@ -77,7 +77,7 @@ func Test_Docs_DocsCommand(t *testing.T) {
7777
},
7878
},
7979
"handles search query with quotes": {
80-
CmdArgs: []string{"--search", "webhook \"send message\""},
80+
CmdArgs: []string{"webhook \"send message\""},
8181
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
8282
expectedURL := "https://docs.slack.dev/search/?q=webhook+%22send+message%22"
8383
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
@@ -88,16 +88,28 @@ func Test_Docs_DocsCommand(t *testing.T) {
8888
"https://docs.slack.dev/search/?q=webhook+%22send+message%22",
8989
},
9090
},
91-
"handles empty search query as homepage": {
92-
CmdArgs: []string{"--search", ""},
91+
"handles empty search query": {
92+
CmdArgs: []string{""},
9393
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
94-
expectedURL := "https://docs.slack.dev"
94+
expectedURL := "https://docs.slack.dev/search/?q="
9595
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
96-
cm.IO.AssertCalled(t, "PrintTrace", mock.Anything, slacktrace.DocsSuccess, mock.Anything)
96+
cm.IO.AssertCalled(t, "PrintTrace", mock.Anything, slacktrace.DocsSearchSuccess, mock.Anything)
9797
},
9898
ExpectedOutputs: []string{
99-
"Docs Open",
100-
"https://docs.slack.dev",
99+
"Docs Search",
100+
"https://docs.slack.dev/search/?q=",
101+
},
102+
},
103+
"handles search flag without argument": {
104+
CmdArgs: []string{"--search"},
105+
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
106+
expectedURL := "https://docs.slack.dev/search/"
107+
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
108+
cm.IO.AssertCalled(t, "PrintTrace", mock.Anything, slacktrace.DocsSearchSuccess, mock.Anything)
109+
},
110+
ExpectedOutputs: []string{
111+
"Docs Search",
112+
"https://docs.slack.dev/search/",
101113
},
102114
},
103115
}, func(cf *shared.ClientFactory) *cobra.Command {

0 commit comments

Comments
 (0)