Skip to content

feat: Add --category flag to docs search command#603

Open
lukegalbraithrussell wants to merge 1 commit into
mainfrom
add-docs-search-category
Open

feat: Add --category flag to docs search command#603
lukegalbraithrussell wants to merge 1 commit into
mainfrom
add-docs-search-category

Conversation

@lukegalbraithrussell

@lukegalbraithrussell lukegalbraithrussell commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

What

Adds a --category flag to slack docs search so results can be filtered by category:

slack docs search "chat.postMessage" --category=reference

The docs site search modal lets you filter by category (Guides, Reference, Changelog, the SDK/library docs, etc.), and the /api/v1/search endpoint the CLI calls now supports a category param (see slackapi/docs#634). This brings the CLI to parity with both.

Categories

The 9 valid categories match the docs search endpoint / site modal:

guides, reference, changelog, python, javascript, java, slack_cli, slack_github_action, deno_slack_sdk

Changes

  • internal/api/docs.go — thread category through DocsSearch, the DocsClient interface, and buildDocsSearchURL (appends &category= only when set). Added DocsSearchCategories as the single source of truth for valid values.
  • internal/api/api_mock.go — updated mock signature.
  • cmd/docs/search.go — added the --category flag, validated against DocsSearchCategories (same pattern as --output), passed to the API for text/json output. For browser output, appends &filter=<category> to the search page URL so the opened page matches.
  • Tests updated/added at both the API and command layers.

An empty --category (the default) preserves the current search-everything behavior, so this is backward-compatible.

Note

The generated command reference (docs/reference/commands/slack_docs_search.md) is intentionally not included — slack docgen runs at release time, not per-PR.

🤖 Generated with Claude Code

Add a --category flag to `slack docs search` so results can be filtered
by category, matching the filters offered by the docs site search modal:
guides, reference, changelog, python, javascript, java, slack_cli,
slack_github_action, deno_slack_sdk.

- internal/api: thread category through DocsSearch, the DocsClient
  interface, the URL builder (appends &category= when set), and the
  mock. Add DocsSearchCategories as the shared source of valid values.
- cmd/docs: add the --category flag, validate it against
  DocsSearchCategories (like --output), and pass it to the API for text
  and json output. For browser output, append &filter= to the search
  page URL for parity with the site.

An empty category preserves the existing search-everything behavior.

Docs reference regeneration (slack docgen) happens at release, not here.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@lukegalbraithrussell lukegalbraithrussell requested a review from a team as a code owner June 24, 2026 18:38
@codecov

codecov Bot commented Jun 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.67%. Comparing base (f0d20ad) to head (b335541).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #603      +/-   ##
==========================================
+ Coverage   71.64%   71.67%   +0.03%     
==========================================
  Files         226      226              
  Lines       19176    19191      +15     
==========================================
+ Hits        13739    13756      +17     
- Misses       4222     4223       +1     
+ Partials     1215     1212       -3     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@zimeg zimeg added enhancement M-T: A feature request for new functionality changelog Use on updates to be included in the release notes semver:minor Use on pull requests to describe the release version increment labels Jul 7, 2026
@zimeg zimeg added this to the Next Release milestone Jul 7, 2026

@zimeg zimeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lukegalbraithrussell Immense thanks for patient review of a feature we sought 🔍 ✨

I'm leaving approval with LGTM and good testing but am curious to loosen the checks of valid and invalid categories. We can revisit that whenever but are wanting to avoid needing ongoing updates to keep these flag values current 🏁

Most comments are rambles around that point so I apologize for self references of scattered ideas.

Comment thread internal/api/docs.go
Comment on lines +33 to +46
// DocsSearchCategories lists the categories the docs search endpoint accepts,
// mirroring the filters offered by the docs site search modal. An empty
// category searches across all content.
var DocsSearchCategories = []string{
"guides",
"reference",
"changelog",
"python",
"javascript",
"java",
"slack_cli",
"slack_github_action",
"deno_slack_sdk",
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🪓 thought: I'd favor removing checks for categories from the CLI to leave as API validation instead. Either zero results returned or an error of some kind?

🌲 ramble: I'm suggesting this to avoid incompatible CLI versions with iterations of search - adding a new category to docs would require releasing and updating to unlock that which is somewhat inconvenient...

Comment thread cmd/docs/search.go
Comment on lines +100 to +106
if cfg.category != "" && !slices.Contains(api.DocsSearchCategories, cfg.category) {
return slackerror.New(slackerror.ErrInvalidFlag).WithMessage(
"Invalid category: %s", cfg.category,
).WithRemediation(
"Use one of: %s", strings.Join(api.DocsSearchCategories, ", "),
)
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗣️ note: Related to less validation within the CLI - if checking categories remains meaningful I'd favor either a warning output for unexpected values or an option to use --force as a workaround.

Comment thread cmd/docs/search.go
Comment on lines 60 to 63
Long: strings.Join([]string{
"Search the Slack developer docs and return results in text, JSON, or browser",
"format.",
}, "\n"),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📚 suggestion: Including a list of available categories here might be useful in running commands?

Comment thread cmd/docs/search.go
Emoji: "books",
Text: "Docs Search",
Secondary: []string{
fmt.Sprintf("Displaying first %d of %d results for \"%s\"", len(searchResponse.Results), searchResponse.TotalResults, query),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fmt.Sprintf("Displaying first %d of %d results for \"%s\" in %s", len(searchResponse.Results), searchResponse.TotalResults, query, category),

🔭 thought: Also related to invalid categories, I wonder if including the search category here might be useful? And or in the section with zero results too?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog Use on updates to be included in the release notes enhancement M-T: A feature request for new functionality semver:minor Use on pull requests to describe the release version increment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants