Skip to content

Return a TemplateRoute from route path methods - #171

Merged
crhntr merged 1 commit into
mainfrom
feat/template-route
Oct 1, 2026
Merged

crhntr merged 1 commit into
mainfrom
feat/template-route

Conversation

@crhntr

@crhntr crhntr commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

Summary

Route path methods return a TemplateRoute instead of a string. It prints as the path, so {{.Path.Example 123}} still renders /example/123, including inside an href. Method() string returns the route's HTTP method, empty when the pattern names none.

A path method returns TemplateRoute, or (TemplateRoute, error) when a path value is marshaled with MarshalText.

--output-template-route-type (default TemplateRoute) names the type, like --output-template-route-paths-type names the paths type. Two files generated into one package need different names for each.

Breaking change

Go code that used a path method as a string needs .String(). Templates are unaffected. This is acceptable for a new pre-v1 minor release.

Seven integration scripts and two examples called path methods as strings and now call .String().

Test plan

  • go test -race -shuffle=on -timeout 20m ./...
  • go vet ./... and staticcheck ./internal/...
  • reference_template_route.txt compiles the generated code, renders {{.Path.GetItem 7}} into an href, and checks String(), Method() and fmt.Sprint
  • Unit and snapshot tests for the generated type, its name, and the --output-template-route-type flag, including its unexported default and identifier validation
  • reference_multiple_generated_routes.txt generates two files with different route types into one package

🤖 Generated with Claude Code

A route path method returned a string. It now returns a TemplateRoute,
or (TemplateRoute, error) when a path value is marshaled with
MarshalText. TemplateRoute prints as the path, so {{.Path.GetItem 7}}
still renders /item/7, including inside an href, and Method() returns
the HTTP method of the route, empty when its pattern names none.

Go code that used a path method as a string needs .String().

The type is named like the other default identifiers: TemplateRoute, or
templateRoute when they are unexported.

Assisted-by: Claude:claude-sonnet-5-5 gofumpt staticcheck
Copilot AI balanced review requested due to automatic review settings October 1, 2026 08:26

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

DELETE routes currently generate the unsupported Datastar action @delete instead of @del.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Adds method-aware TemplateRoute values and fluent HTMX/Datastar builders to generated route helpers.

Changes:

  • Route helpers now return configurable TemplateRoute values.
  • Adds HTMX attribute and Datastar action builders.
  • Updates CLI flags, documentation, examples, and tests.
File Description
internal/​generate/​template_route_path.go Generates route values and metadata.
internal/​generate/​template_route_path_test.go Tests route generation.
internal/​generate/​template_route_htmx.go Generates HTMX builders.
internal/​generate/​template_route_datastar.go Generates Datastar builders.
internal/​generate/​routes.go Adds route-type configuration.
internal/​cli/​generate_command.go Handles the new option.
internal/​cli/​flags.go Registers the new flag.
internal/​cli/​flag_names.go Defines flag names and help.
internal/​cli/​configurations_test.go Tests CLI configurations.
internal/​cli/​generate_args_test.go Tests argument round-tripping.
internal/​cli/​generated_files_test.go Updates default configuration.
internal/​cli/​validate_test.go Tests route-type validation.
docs/​reference/​cli.md Documents flags and builders.
docs/​reference/​call-results.md Documents TemplateRoute.
docs/​examples/​simple/​template_routes.go Regenerates simple routes.
docs/​examples/​simple/​template_routes_test.go Adapts string consumers.
docs/​examples/​htmx-todo/​template_routes.go Regenerates HTMX todo routes.
docs/​examples/​htmx-counter/​template_routes.go Regenerates HTMX counter routes.
docs/​examples/​fixiproject-clock/​template_routes.go Regenerates clock routes.
docs/​examples/​fixiproject-clock/​main_test.go Adapts route string usage.
docs/​examples/​datastar-todo/​template_routes.go Regenerates Datastar todo routes.
docs/​examples/​datastar-search/​template_routes.go Regenerates Datastar search routes.
docs/​examples/​datastar-counter/​template_routes.go Regenerates Datastar counter routes.
cmd/​muxt/​testdata/​reference_template_route.txt Tests route values and rendering.
cmd/​muxt/​testdata/​reference_output_htmx_template_route.txt Tests HTMX builders.
cmd/​muxt/​testdata/​reference_output_datastar_template_route.txt Tests Datastar builders.
cmd/​muxt/​testdata/​reference_path_with_typed_param.txt Adapts typed route values.
cmd/​muxt/​testdata/​reference_path_prefix.txt Adapts prefixed paths.
cmd/​muxt/​testdata/​reference_path_param_escaping.txt Adapts escaping tests.
cmd/​muxt/​testdata/​reference_multiple_generated_routes.txt Configures distinct route types.
cmd/​muxt/​testdata/​reference_cli_middleware_flag_combined.txt Adapts middleware test.
cmd/​muxt/​testdata/​reference_cli_flags.txt Tests custom route type flag.
cmd/​muxt/​testdata/​tutorial_blog_example.txt Adapts tutorial requests.
internal/​generate/​testdata/​generate/​synthesized_method_note.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​status_codes.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​sse.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​sse_messages_without_datastar.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​sse_datastar.txtar Snapshots Datastar generation.
internal/​generate/​testdata/​generate/​route_without_call.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​result_shapes.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​response_argument.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​request_body.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​repeated_arguments.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​redirect.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​receiver_method_sets.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​path_parameter_types.txtar Tests fallible route creation.
internal/​generate/​testdata/​generate/​nested_calls.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​multipart.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​marshal_json.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​last_event_id.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​inferred_methods.txtar Snapshots inferred methods.
internal/​generate/​testdata/​generate/​form_values.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​form_struct.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​flag_without_muxt_version.txtar Updates generated snapshot.
internal/​generate/​testdata/​generate/​flag_unexported_identifiers.txtar Tests unexported route type.
internal/​generate/​testdata/​generate/​flag_multiple_files.txtar Updates multi-file snapshot.
internal/​generate/​testdata/​generate/​flag_logger_path_prefix_middleware.txtar Updates combined-flags snapshot.
internal/​generate/​testdata/​generate/​flag_htmx.txtar Snapshots HTMX generation.
internal/​generate/​testdata/​generate/​flag_custom_names.txtar Tests custom route type.
internal/​generate/​testdata/​generate/​execute_callback.txtar Updates generated snapshot.
Files not reviewed (7)
  • docs/examples/datastar-counter/template_routes.go: Generated file
  • docs/examples/datastar-search/template_routes.go: Generated file
  • docs/examples/datastar-todo/template_routes.go: Generated file
  • docs/examples/fixiproject-clock/template_routes.go: Generated file
  • docs/examples/htmx-counter/template_routes.go: Generated file
  • docs/examples/htmx-todo/template_routes.go: Generated file
  • docs/examples/simple/template_routes.go: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread internal/generate/template_route_datastar.go Outdated
@crhntr
crhntr force-pushed the feat/template-route branch from 552d50c to c68f552 Compare October 1, 2026 08:33
@crhntr crhntr changed the title Return a TemplateRoute from route path methods, with htmx and Datastar attribute builders Return a TemplateRoute from route path methods Oct 1, 2026
@crhntr
crhntr marked this pull request as draft October 1, 2026 08:33
@crhntr
crhntr marked this pull request as ready for review October 1, 2026 08:34
@crhntr
crhntr marked this pull request as draft October 1, 2026 08:34
@crhntr
crhntr marked this pull request as ready for review October 1, 2026 18:40
@crhntr
crhntr merged commit cd3592a into main Oct 1, 2026
2 checks passed
@crhntr
crhntr deleted the feat/template-route branch October 1, 2026 19:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants