Skip to content

Commit c1af66c

Browse files
authored
completion: support completing config variables (#10864)
1 parent 75c5d17 commit c1af66c

File tree

4 files changed

+202
-145
lines changed

4 files changed

+202
-145
lines changed

dvc/cli/completion.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
local _dvc_remotes=($(dvc remote list | cut -d' ' -f1))
2828
compgen -W "${_dvc_remotes[*]}" -- $1
2929
}
30+
31+
_dvc_compgen_config_vars() {
32+
compgen -W "${_dvc_config_vars[*]}" -- $1
33+
}
3034
"""
3135

3236
ZSH_PREAMBLE = """
@@ -64,6 +68,10 @@
6468
_dvc_compadd_remotes() {
6569
_describe 'remotes' "($(dvc remote list | cut -d' ' -f1))"
6670
}
71+
72+
_dvc_compadd_config_vars() {
73+
_describe 'config_vars' _dvc_config_vars
74+
}
6775
"""
6876

6977
PREAMBLE = {
@@ -81,3 +89,21 @@
8189
}
8290
EXPERIMENT = {"bash": "_dvc_compgen_exps", "zsh": "_dvc_compadd_exps"}
8391
REMOTE = {"bash": "_dvc_compgen_remotes", "zsh": "_dvc_compadd_remotes"}
92+
CONFIG_VARS = {"bash": "_dvc_compgen_config_vars", "zsh": "_dvc_compadd_config_vars"}
93+
94+
95+
def get_preamble() -> dict[str, str]:
96+
from dvc.config_schema import config_vars_for_completion
97+
98+
ret: dict[str, str] = {}
99+
config_vars = list(config_vars_for_completion())
100+
101+
nl = "\n\t".expandtabs(4)
102+
config_vars_arr = f"""
103+
_dvc_config_vars=(
104+
{nl.join(config_vars)}
105+
)
106+
"""
107+
for shell, preamble in PREAMBLE.items():
108+
ret[shell] = config_vars_arr + preamble
109+
return ret

dvc/commands/completion.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dvc.cli import formatter
22
from dvc.cli.command import CmdBaseNoRepo
3-
from dvc.cli.completion import PREAMBLE
3+
from dvc.cli.completion import get_preamble
44
from dvc.cli.utils import append_doc_link
55
from dvc.log import logger
66
from dvc.ui import ui
@@ -17,7 +17,7 @@ def run(self):
1717

1818
shell = self.args.shell
1919
parser = self.args.parser
20-
script = shtab.complete(parser, shell=shell, preamble=PREAMBLE)
20+
script = shtab.complete(parser, shell=shell, preamble=get_preamble())
2121
ui.write(script, force=True)
2222
return 0
2323

dvc/commands/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from funcy import set_in
55

6-
from dvc.cli import formatter
6+
from dvc.cli import completion, formatter
77
from dvc.cli.command import CmdBaseNoRepo
88
from dvc.cli.utils import append_doc_link
99
from dvc.log import logger
@@ -224,7 +224,7 @@ def add_parser(subparsers, parent_parser):
224224
nargs="?",
225225
type=_name_type,
226226
help="Option name (section.option or remote.name.option).",
227-
)
227+
).complete = completion.CONFIG_VARS
228228
config_parser.add_argument("value", nargs="?", help="Option value.")
229229
config_parser.add_argument(
230230
"-l",

0 commit comments

Comments
 (0)