Return a TemplateRoute from route path methods - #171
Merged
Merged
Conversation
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
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
DELETE routes currently generate the unsupported Datastar action @delete instead of @del.
Review effort: Balanced
Findings: 1
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
TemplateRoutevalues. - 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.
crhntr
force-pushed
the
feat/template-route
branch
from
October 1, 2026 08:33
552d50c to
c68f552
Compare
crhntr
marked this pull request as draft
October 1, 2026 08:33
crhntr
marked this pull request as ready for review
October 1, 2026 08:34
3 of 4 tasks
crhntr
marked this pull request as draft
October 1, 2026 08:34
crhntr
marked this pull request as ready for review
October 1, 2026 18:40
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Route path methods return a
TemplateRouteinstead of astring. It prints as the path, so{{.Path.Example 123}}still renders/example/123, including inside anhref.Method() stringreturns 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 withMarshalText.--output-template-route-type(defaultTemplateRoute) names the type, like--output-template-route-paths-typenames 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
stringneeds.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 ./...andstaticcheck ./internal/...reference_template_route.txtcompiles the generated code, renders{{.Path.GetItem 7}}into anhref, and checksString(),Method()andfmt.Sprint--output-template-route-typeflag, including its unexported default and identifier validationreference_multiple_generated_routes.txtgenerates two files with different route types into one package🤖 Generated with Claude Code