Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions src/content/docs/tab/api/core.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const buildCmd = t.command('dev build', 'Build project');
Adds a global option to the root command.

**Parameters:**
- `name` (string): The option name (e.g., '--config')
- `name` (string): The option name (e.g., 'config' for '--config')
- `description` (string): Option description
- `handler` (OptionHandler, optional): Function that provides completion suggestions
- `alias` (string, optional): Short flag alias (e.g., 'c' for '--config')
Expand All @@ -52,7 +52,7 @@ Adds a global option to the root command.

**Example:**
```ts
t.option('--config', 'Use specified config file', function(complete) {
t.option('config', 'Use specified config file', function(complete) {
complete('vite.config.ts', 'Vite config file');
complete('vite.config.js', 'Vite config file');
}, 'c');
Expand Down Expand Up @@ -120,7 +120,7 @@ const cmd = t.command('dev', 'Start development server');
Adds an option to this command.

**Parameters:**
- `name` (string): The option name (e.g., '--port')
- `name` (string): The option name (e.g., 'p' for '--port')
- `description` (string): Option description
- `handler` (OptionHandler, optional): Function that provides completion suggestions
- `alias` (string, optional): Short flag alias (e.g., 'p' for '--port')
Expand All @@ -129,7 +129,7 @@ Adds an option to this command.

**Example:**
```ts
cmd.option('--port', 'Port number', function(complete) {
cmd.option('port', 'Port number', function(complete) {
complete('3000', 'Development port');
complete('8080', 'Production port');
}, 'p');
Expand Down Expand Up @@ -279,12 +279,12 @@ import { RootCommand } from '@bomb.sh/tab';
const t = new RootCommand();

// Add global options
t.option('--config', 'Use specified config file', function(complete) {
t.option('config', 'Use specified config file', function(complete) {
complete('vite.config.ts', 'Vite config file');
complete('vite.config.js', 'Vite config file');
}, 'c');

t.option('--mode', 'Set env mode', function(complete) {
t.option('mode', 'Set env mode', function(complete) {
complete('development', 'Development mode');
complete('production', 'Production mode');
}, 'm');
Expand All @@ -297,17 +297,17 @@ t.argument('project', function(complete) {

// Add commands with completions
const devCmd = t.command('dev', 'Start development server');
devCmd.option('--port', 'Port number', function(complete) {
devCmd.option('port', 'Port number', function(complete) {
complete('3000', 'Development port');
complete('8080', 'Production port');
}, 'p');

devCmd.option('--host', 'Hostname', function(complete) {
devCmd.option('host', 'Hostname', function(complete) {
complete('localhost', 'Localhost');
complete('0.0.0.0', 'All interfaces');
}, 'H');

devCmd.option('--verbose', 'Enable verbose logging', 'v');
devCmd.option('verbose', 'Enable verbose logging', 'v');

// Add nested commands
t.command('dev build', 'Build project');
Expand Down Expand Up @@ -356,7 +356,7 @@ if (process.argv[2] === 'complete') {
Make your completions responsive to what the user is typing:

```ts
devCmd.option('--port', 'Port number', function(complete) {
devCmd.option('port', 'Port number', function(complete) {
// Check if user is typing a specific port
if (this.toComplete?.startsWith('30')) {
complete('3000', 'Development port');
Expand All @@ -374,7 +374,7 @@ devCmd.option('--port', 'Port number', function(complete) {
Load completions from external sources:

```ts
devCmd.option('--config', 'Config file', async function(complete) {
devCmd.option('config', 'Config file', async function(complete) {
try {
const files = await fs.readdir('.');
const configFiles = files.filter(f => f.includes('config'));
Expand All @@ -391,8 +391,8 @@ devCmd.option('--config', 'Config file', async function(complete) {
For boolean flags, you don't need a handler:

```ts
devCmd.option('--verbose', 'Enable verbose logging', 'v');
devCmd.option('--quiet', 'Suppress output');
devCmd.option('verbose', 'Enable verbose logging', 'v');
devCmd.option('quiet', 'Suppress output');
```

## Next Steps
Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/tab/basics/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,19 @@ import { RootCommand } from '@bomb.sh/tab';
const t = new RootCommand();

// Add global options
t.option('--config', 'Use specified config file', function(complete) {
t.option('config', 'Use specified config file', function(complete) {
complete('vite.config.ts', 'Vite config file');
complete('vite.config.js', 'Vite config file');
}, 'c');

// Add commands with completions
const devCmd = t.command('dev', 'Start development server');
devCmd.option('--port', 'Port number', function(complete) {
devCmd.option('port', 'Port number', function(complete) {
complete('3000', 'Development port');
complete('8080', 'Production port');
}, 'p');

devCmd.option('--host', 'Hostname', function(complete) {
devCmd.option('host', 'Hostname', function(complete) {
complete('localhost', 'Localhost');
complete('0.0.0.0', 'All interfaces');
}, 'H');
Expand Down Expand Up @@ -108,7 +108,7 @@ const devCmd = t.command('dev', 'Start development server');
Add options to commands with completion handlers:

```ts
devCmd.option('--port', 'Port number', function(complete) {
devCmd.option('port', 'Port number', function(complete) {
complete('3000', 'Development port');
complete('8080', 'Production port');
}, 'p'); // Short flag alias
Expand Down
46 changes: 19 additions & 27 deletions src/content/docs/tab/guides/adapters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,27 @@ import tab from '@bomb.sh/tab/cac';

const cli = cac('my-cli');

cli.command('dev', 'Start dev server').option('--port <port>', 'Specify port');
cli.command('build', 'Build for production').option('--mode <mode>', 'Build mode');
cli.command('dev', 'Start dev server').option('port <port>', 'Specify port');
cli.command('build', 'Build for production').option('mode <mode>', 'Build mode');

const completion = tab(cli);
const completion = await tab(cli);

// Get the dev command completion handler
const devCommandCompletion = completion.commands.get('dev');

// Get and configure the port option completion handler
const portOptionCompletion = devCommandCompletion.options.get('--port');
portOptionCompletion.handler = async () => {
return [
{ value: '3000', description: 'Development port' },
{ value: '8080', description: 'Production port' },
];
const portOptionCompletion = devCommandCompletion.options.get('port');
portOptionCompletion.handler = (complete) => {
complete('3000', 'Development port');
complete('8080', 'Production port');
};

// Configure build mode completions
const buildCommandCompletion = completion.commands.get('build');
const modeOptionCompletion = buildCommandCompletion.options.get('--mode');
modeOptionCompletion.handler = async () => {
return [
{ value: 'development', description: 'Development build' },
{ value: 'production', description: 'Production build' },
];
const modeOptionCompletion = buildCommandCompletion.options.get('mode');
modeOptionCompletion.handler = (complete) => {
complete('development', 'Development build');
complete('production', 'Production build');
};

cli.parse();
Expand Down Expand Up @@ -100,13 +96,11 @@ const completion = await tab(main);
// Configure completions
const devCommandCompletion = completion.commands.get('dev');
if (devCommandCompletion) {
const portOptionCompletion = devCommandCompletion.options.get('--port');
const portOptionCompletion = devCommandCompletion.options.get('port');
if (portOptionCompletion) {
portOptionCompletion.handler = async () => {
return [
{ value: '3000', description: 'Development port' },
{ value: '8080', description: 'Production port' },
];
portOptionCompletion.handler = (complete) => {
complete('3000', 'Development port');
complete('8080', 'Production port');
};
}
}
Expand Down Expand Up @@ -154,13 +148,11 @@ const completion = tab(program);
// Configure completions
const devCommandCompletion = completion.commands.get('dev');
if (devCommandCompletion) {
const portOptionCompletion = devCommandCompletion.options.get('--port');
const portOptionCompletion = devCommandCompletion.options.get('port');
if (portOptionCompletion) {
portOptionCompletion.handler = async () => {
return [
{ value: '3000', description: 'Development port' },
{ value: '8080', description: 'Production port' },
];
portOptionCompletion.handler = (complete) => {
complete('3000', 'Development port');
complete('8080', 'Production port');
};
}
}
Expand Down
Loading