7474}
7575"""
7676
77+ FISH_PREAMBLE = """
78+ function __fish_complete_dvc_files
79+ __fish_complete_path | string match -re '\\ *?.dvc|Dvcfile|dvc\\ .yaml'
80+ end
81+
82+ function __fish_complete_dvc_stages
83+ for line in (dvc stage list -q)
84+ set -l parts (string split -m1 ' ' -- $line)
85+ set -l name $parts[1]
86+ set -l desc (string trim $parts[2])
87+ echo -e "$name $desc"
88+ end
89+ end
90+
91+ function __fish_complete_dvc_stages_and_files
92+ __fish_complete_dvc_stages
93+ __fish_complete_dvc_files
94+ end
95+
96+ function __fish_complete_dvc_experiments
97+ dvc exp list -q --all-commits --names-only
98+ end
99+
100+ function __fish_complete_dvc_remotes
101+ dvc remote list | cut -d' ' -f1
102+ end
103+ """
104+
77105PREAMBLE = {
78106 "bash" : BASH_PREAMBLE ,
79107 "zsh" : ZSH_PREAMBLE ,
108+ "fish" : FISH_PREAMBLE ,
80109}
81110
82111FILE = shtab .FILE
83112DIR = shtab .DIRECTORY
84- DVC_FILE = {"bash" : "_dvc_compgen_DVCFiles" , "zsh" : "_dvc_compadd_DVCFiles" }
85- STAGE = {"bash" : "_dvc_compgen_stages" , "zsh" : "_dvc_compadd_stages" }
113+ DVC_FILE = {
114+ "bash" : "_dvc_compgen_DVCFiles" ,
115+ "zsh" : "_dvc_compadd_DVCFiles" ,
116+ "fish" : "__fish_complete_dvc_files" ,
117+ }
118+ STAGE = {
119+ "bash" : "_dvc_compgen_stages" ,
120+ "zsh" : "_dvc_compadd_stages" ,
121+ "fish" : "__fish_complete_dvc_stages" ,
122+ }
86123DVCFILES_AND_STAGE = {
87124 "bash" : "_dvc_compgen_stages_and_files" ,
88125 "zsh" : "_dvc_compadd_stages_and_files" ,
126+ "fish" : "__fish_complete_dvc_stages_and_files" ,
127+ }
128+ EXPERIMENT = {
129+ "bash" : "_dvc_compgen_exps" ,
130+ "zsh" : "_dvc_compadd_exps" ,
131+ "fish" : "__fish_complete_dvc_experiments" ,
132+ }
133+ REMOTE = {
134+ "bash" : "_dvc_compgen_remotes" ,
135+ "zsh" : "_dvc_compadd_remotes" ,
136+ "fish" : "__fish_complete_dvc_remotes" ,
137+ }
138+ CONFIG_VARS = {
139+ "bash" : "_dvc_compgen_config_vars" ,
140+ "zsh" : "_dvc_compadd_config_vars" ,
141+ "fish" : "__fish_complete_dvc_config_vars" ,
89142}
90- EXPERIMENT = {"bash" : "_dvc_compgen_exps" , "zsh" : "_dvc_compadd_exps" }
91- REMOTE = {"bash" : "_dvc_compgen_remotes" , "zsh" : "_dvc_compadd_remotes" }
92- CONFIG_VARS = {"bash" : "_dvc_compgen_config_vars" , "zsh" : "_dvc_compadd_config_vars" }
93143
94144
95145def get_preamble () -> dict [str , str ]:
@@ -103,7 +153,26 @@ def get_preamble() -> dict[str, str]:
103153_dvc_config_vars=(
104154 { nl .join (config_vars )}
105155)
156+ """
157+ indent = "\t \t " .expandtabs (4 ) # 8 spaces
158+ lines = (
159+ "\n " .join (
160+ f"{ indent } { c } \\ "
161+ for c in config_vars [:- 1 ] # all but last
162+ )
163+ + "\n "
164+ + f"{ indent } { config_vars [- 1 ]} "
165+ ) # last line without backslash
166+ config_vars_arr_fish = f"""
167+ function __fish_complete_dvc_config_vars
168+ set -l _dvc_config_vars \\
169+ { lines }
170+ printf %s\\ n $_dvc_config_vars
171+ end
106172"""
107173 for shell , preamble in PREAMBLE .items ():
108- ret [shell ] = config_vars_arr + preamble
174+ if shell != "fish" :
175+ ret [shell ] = config_vars_arr + preamble
176+ else :
177+ ret [shell ] = config_vars_arr_fish + preamble
109178 return ret
0 commit comments