Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions cli/module_generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,15 @@ func (c *viamClient) generateModuleAction(cCtx *cli.Context, args generateModule
return nil
}

// returns model name based on chosen resource
func modelName(module *modulegen.ModuleInputs) string {
resourceName := strings.Fields(module.Resource)[0]
if resourceName == "generic" {
resourceName = resourceName + "_" + strings.Fields(module.Resource)[1]
}
return resourceName
}

// Prompt the user for information regarding the module they want to create
// returns the modulegen.ModuleInputs struct that contains the information the user entered.
func promptUser(module *modulegen.ModuleInputs) error {
Expand Down Expand Up @@ -283,7 +292,9 @@ func promptUser(module *modulegen.ModuleInputs) error {
Description("For more details about modular resources, view the documentation at \nhttps://docs.viam.com/registry/"),
huh.NewInput().
Title("Set a module name:").
Description("The module name can contain only alphanumeric characters, dashes, and underscores.").
Description("This can be the name of the piece of hardware, the challenge you are trying to solve,\n"+
"the name of the project, etc.\n"+
"The module name can contain only alphanumeric characters, dashes, and underscores.").
Value(&module.ModuleName).
Placeholder("my-module").
Suggestions([]string{"my-module"}).
Expand Down Expand Up @@ -333,7 +344,12 @@ func promptUser(module *modulegen.ModuleInputs) error {
Title("Set a model name of the resource:").
Description("This is the name of the new resource model that your module will provide.\n"+
"The model name can contain only alphanumeric characters, dashes, and underscores.").
Placeholder("my-model").
PlaceholderFunc(func() string {
Copy link
Member Author

@allisonschiang allisonschiang Jan 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the ticket calls to pre-populate text rather than have the background gray placeholder, but the huh package doesn't have the ValueFunc() implemented yet to dynamically change it

I tried:

  • change the module.ModelName value with a validate() function, but its set when the form is created and doesn't change
  • change the module.ModelName value by setting Value to a func() that returns resource type, but its set when the form is created and sets it to the first resource of arm
  • change the module.ModelName with PlaceholderFunc, but it only changes the Placeholder (can't put an extra function in it to edit ModelName)
  • create an Accessor function where you can create your own get() and set() function, but get() runs at form creation time so set to first resource of 'arm'

Didn't think it was worth it to split the form into two (ask resource name first and then prepopulate on another loaded form), switch packages, or make an open source contribution to huh package

return modelName(module)
}, &module.Resource).
SuggestionsFunc(func() []string {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the only suggestion that makes sense to make is the model name we recommend

return []string{modelName(module)}
}, &module.Resource).
Value(&module.ModelName).
Validate(func(s string) error {
if s == "" {
Expand Down