in src/buildstream/_frontend/cli.py [0:0]
def complete_target(args, incomplete):
"""
:param args: full list of args typed before the incomplete arg
:param incomplete: the incomplete text to autocomplete
:return: all the possible user-specified completions for the param
"""
from .. import utils
project_conf = "project.conf"
# First resolve the directory, in case there is an
# active --directory/-C option
#
base_directory = "."
idx = -1
try:
idx = args.index("-C")
except ValueError:
try:
idx = args.index("--directory")
except ValueError:
pass
if idx >= 0 and len(args) > idx + 1:
base_directory = args[idx + 1]
else:
# Check if this directory or any of its parent directories
# contain a project config file
base_directory, _ = utils._search_upward_for_files(base_directory, [project_conf])
if base_directory is None:
# No project_conf was found in base_directory or its parents, no need
# to try loading any project conf and avoid os.path NoneType TypeError.
return []
else:
project_file = os.path.join(base_directory, project_conf)
try:
project = _yaml.load(project_file, shortname=project_conf)
except LoadError:
# If there is no project conf in context, just dont
# even bother trying to complete anything.
return []
# The project is not required to have an element-path
element_directory = project.get_str("element-path", default="")
# If a project was loaded, use its element-path to
# adjust our completion's base directory
if element_directory:
base_directory = os.path.join(base_directory, element_directory)
complete_list = []
for p in complete_path("File", incomplete, base_directory=base_directory):
if p.endswith(".bst ") or p.endswith("/"):
complete_list.append(p)
return complete_list