mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
ffe056bacb
This is part of a general effort to move all of Terraform's non-library package surface under internal in order to reinforce that these are for internal use within Terraform only. If you were previously importing packages under this prefix into an external codebase, you could pin to an earlier release tag as an interim solution until you've make a plan to achieve the same functionality some other way.
68 lines
2.1 KiB
Go
68 lines
2.1 KiB
Go
package command
|
|
|
|
import (
|
|
"github.com/posener/complete"
|
|
)
|
|
|
|
// This file contains some re-usable predictors for auto-complete. The
|
|
// command-specific autocomplete configurations live within each command's
|
|
// own source file, as AutocompleteArgs and AutocompleteFlags methods on each
|
|
// Command implementation.
|
|
|
|
// For completing the value of boolean flags like -foo false
|
|
var completePredictBoolean = complete.PredictSet("true", "false")
|
|
|
|
// We don't currently have a real predictor for module sources, but
|
|
// we'll probably add one later.
|
|
var completePredictModuleSource = complete.PredictAnything
|
|
|
|
type completePredictSequence []complete.Predictor
|
|
|
|
func (s completePredictSequence) Predict(a complete.Args) []string {
|
|
// Only one level of command is stripped off the prefix of a.Completed
|
|
// here, so nested subcommands like "workspace new" will need to provide
|
|
// dummy entries (e.g. complete.PredictNothing) as placeholders for
|
|
// all but the first subcommand. For example, "workspace new" needs
|
|
// one placeholder for the argument "new".
|
|
idx := len(a.Completed)
|
|
if idx >= len(s) {
|
|
return nil
|
|
}
|
|
|
|
return s[idx].Predict(a)
|
|
}
|
|
|
|
func (m *Meta) completePredictWorkspaceName() complete.Predictor {
|
|
return complete.PredictFunc(func(a complete.Args) []string {
|
|
// There are lot of things that can fail in here, so if we encounter
|
|
// any error then we'll just return nothing and not support autocomplete
|
|
// until whatever error is fixed. (The user can't actually see the error
|
|
// here, but other commands should produce a user-visible error before
|
|
// too long.)
|
|
|
|
// We assume here that we want to autocomplete for the current working
|
|
// directory, since we don't have enough context to know where to
|
|
// find any config path argument, and it might be _after_ the argument
|
|
// we're trying to complete here anyway.
|
|
configPath, err := ModulePath(nil)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
backendConfig, diags := m.loadBackendConfig(configPath)
|
|
if diags.HasErrors() {
|
|
return nil
|
|
}
|
|
|
|
b, diags := m.Backend(&BackendOpts{
|
|
Config: backendConfig,
|
|
})
|
|
if diags.HasErrors() {
|
|
return nil
|
|
}
|
|
|
|
names, _ := b.Workspaces()
|
|
return names
|
|
})
|
|
}
|