Skip to content

Commit 4a9ea11

Browse files
authored
Add autocomplete for CLI (#497)
* Add autocomplete for CLI * Docs update * Improve autocomplete for category * Skip ID for first autocomplete; fix 'init' cmd name
1 parent 2cd7911 commit 4a9ea11

29 files changed

Lines changed: 275 additions & 14 deletions

File tree

bin/agent/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const text = require('lib/text');
33
const genericDefaults = require('bin/generic/defaults');
44
const genericResource = require('bin/generic');
55
const genericAction = require('bin/generic/action');
6+
const complete = require('lib/complete');
67

78
const schema = {
89
name: {
@@ -17,6 +18,7 @@ const schema = {
1718
required: true,
1819
onCreate: true,
1920
destBody: 'service',
21+
complete: complete.completeService('agent'),
2022
},
2123
credentials: {
2224
virtual: true,

bin/config/autocomplete/index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
'use strict';
2+
3+
const Cli = require('lib/cli');
4+
5+
const category = Cli.createCategory('autocomplete', {
6+
description: 'Manage autocomplete for CLI',
7+
priority: 25,
8+
});
9+
10+
category.addChild(require('./init'));
11+
category.addChild(require('./remove'));
12+
13+
module.exports = category;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Get default virtual machine type for a new one
2+
3+
```
4+
{{command_name}}
5+
```
6+
7+
# Introduces changes
8+
9+
If you use Bash, it will create a file at ```~/.h1/completion.sh``` and append a loader code to ```~/.bash_profile``` file.
10+
If you use Zsh, it appends a loader code to ```~/.zshrc``` file.
11+
If you use Fish, it appends a loader code to ```~/.config/fish/config.fish``` file.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
3+
const Cli = require('lib/cli');
4+
const complete = require('lib/complete');
5+
6+
module.exports = Cli.createCommand('init', {
7+
dirname: __dirname,
8+
description: 'Update shell configuration to support autocomplete',
9+
plugins: [
10+
require('bin/_plugins/outputFormat'),
11+
],
12+
handler: args => {
13+
complete.autocomplete(Cli.root(args)).setupShellInitFile();
14+
return 'autocomplete set';
15+
},
16+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Update shell configuration to disable autocomplete
2+
3+
```
4+
{{command_name}}
5+
```
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
3+
const Cli = require('lib/cli');
4+
const complete = require('lib/complete');
5+
6+
module.exports = Cli.createCommand('remove', {
7+
dirname: __dirname,
8+
description: 'Update shell configuration to remove autocomplete',
9+
plugins: [
10+
require('bin/_plugins/outputFormat'),
11+
],
12+
handler: () => {
13+
complete.cleanupShellInitFile();
14+
return 'autocomplete removed';
15+
},
16+
});

bin/config/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ category.addChild(require('./show'));
1111
category.addChild(require('./set'));
1212
category.addChild(require('./get'));
1313
category.addChild(require('./unset'));
14+
category.addChild(require('./autocomplete'));
1415

1516
module.exports = category;

bin/container/create/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const Cli = require('lib/cli');
44
const registry = require('../registry');
5+
const complete = require('lib/complete');
56

67
const options = {
78
name: {
@@ -15,9 +16,10 @@ const options = {
1516
required: true,
1617
},
1718
type: {
18-
description: 'Container type',
19+
description: 'Container type name or ID',
1920
type: 'string',
2021
required: true,
22+
complete: complete.completeService('container'),
2123
},
2224
expose: {
2325
description: 'Mapping port to expose to the world as external:internal',

bin/database/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
const genericDefaults = require('bin/generic/defaults');
33
const genericResource = require('bin/generic');
4+
const complete = require('lib/complete');
45

56
const schema = {
67
name: {
@@ -10,11 +11,12 @@ const schema = {
1011
onCreate: true,
1112
},
1213
type: {
13-
description: 'Database type',
14+
description: 'Database type name or ID',
1415
type: 'string',
1516
required: true,
1617
onCreate: true,
1718
destBody: 'service',
19+
complete: complete.completeService('database'),
1820
},
1921
credentials: {
2022
virtual: true,

bin/disk/create/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const path = require('path');
77
const fs = require('fs');
88

99
const Cli = require('lib/cli');
10+
const complete = require('lib/complete');
1011

1112
const options = {
1213
name: {
@@ -17,6 +18,7 @@ const options = {
1718
type: {
1819
description: 'Disk type ID or name. Required if no source disk is specified',
1920
type: 'string',
21+
complete: complete.completeService('disk'),
2022
},
2123
size: {
2224
description: 'Disk size in GiB. Required if no source file and no disk is specified',

0 commit comments

Comments
 (0)