swagger-api / swagger-api/swagger-codegen

[GO] Generator creates identifiers starting with a number

Open
#12,421 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Description

When calling the code generation with my yaml, identifiers are created that start with a number. However, the go compiler interprets them wrongly.
Example code:

/*
 * API Documentation
 *
 * Source of truth and network automation platform
 *
 * API version: 2.2.5 (2.2)
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */
package nautobot

type PortTypeChoices string

// List of PortTypeChoices
const (
	8P8C__PortTypeChoices PortTypeChoices = "8p8c"
	8P6C__PortTypeChoices PortTypeChoices = "8p6c"
	8P4C__PortTypeChoices PortTypeChoices = "8p4c"
	8P2C__PortTypeChoices PortTypeChoices = "8p2c"
	6P6C__PortTypeChoices PortTypeChoices = "6p6c"
	6P4C__PortTypeChoices PortTypeChoices = "6p4c"
	6P2C__PortTypeChoices PortTypeChoices = "6p2c"
	4P4C__PortTypeChoices PortTypeChoices = "4p4c"
	4P2C__PortTypeChoices PortTypeChoices = "4p2c"
	GG45_PortTypeChoices PortTypeChoices = "gg45"
	TERA_4P_PortTypeChoices PortTypeChoices = "tera-4p"
	TERA_2P_PortTypeChoices PortTypeChoices = "tera-2p"
	TERA_1P_PortTypeChoices PortTypeChoices = "tera-1p"
	110PUNCH__PortTypeChoices PortTypeChoices = "110-punch"
	BNC_PortTypeChoices PortTypeChoices = "bnc"
	F_PortTypeChoices PortTypeChoices = "f"
	N_PortTypeChoices PortTypeChoices = "n"
	MRJ21_PortTypeChoices PortTypeChoices = "mrj21"
	FC_PortTypeChoices PortTypeChoices = "fc"
	LC_PortTypeChoices PortTypeChoices = "lc"
	LC_PC_PortTypeChoices PortTypeChoices = "lc-pc"
	LC_UPC_PortTypeChoices PortTypeChoices = "lc-upc"
	LC_APC_PortTypeChoices PortTypeChoices = "lc-apc"
	LSH_PortTypeChoices PortTypeChoices = "lsh"
	LSH_PC_PortTypeChoices PortTypeChoices = "lsh-pc"
	LSH_UPC_PortTypeChoices PortTypeChoices = "lsh-upc"
	LSH_APC_PortTypeChoices PortTypeChoices = "lsh-apc"
	LX5_PortTypeChoices PortTypeChoices = "lx5"
	LX5_PC_PortTypeChoices PortTypeChoices = "lx5-pc"
	LX5_UPC_PortTypeChoices PortTypeChoices = "lx5-upc"
	LX5_APC_PortTypeChoices PortTypeChoices = "lx5-apc"
	MPO_PortTypeChoices PortTypeChoices = "mpo"
	MTRJ_PortTypeChoices PortTypeChoices = "mtrj"
	SC_PortTypeChoices PortTypeChoices = "sc"
	SC_PC_PortTypeChoices PortTypeChoices = "sc-pc"
	SC_UPC_PortTypeChoices PortTypeChoices = "sc-upc"
	SC_APC_PortTypeChoices PortTypeChoices = "sc-apc"
	ST_PortTypeChoices PortTypeChoices = "st"
	CS_PortTypeChoices PortTypeChoices = "cs"
	SN_PortTypeChoices PortTypeChoices = "sn"
	SMA_905_PortTypeChoices PortTypeChoices = "sma-905"
	SMA_906_PortTypeChoices PortTypeChoices = "sma-906"
	URM_P2_PortTypeChoices PortTypeChoices = "urm-p2"
	URM_P4_PortTypeChoices PortTypeChoices = "urm-p4"
	URM_P8_PortTypeChoices PortTypeChoices = "urm-p8"
	SPLICE_PortTypeChoices PortTypeChoices = "splice"
	OTHER_PortTypeChoices PortTypeChoices = "other"
)

E.g. the 8P is interpreted as exponent, even though it's the type.
These are the errors I see with this file:

oapi-1      | ./model_port_type_choices.go:15:2: syntax error: unexpected literal 8P8, expected name
oapi-1      | ./model_port_type_choices.go:15:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:16:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:17:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:18:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:19:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:20:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:21:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:22:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:23:3: 'P' exponent requires hexadecimal mantissa
oapi-1      | ./model_port_type_choices.go:28:5: 'P' exponent requires hexadecimal mantissa
Swagger-codegen version

3.0.58

Command line used for generation

java -jar swagger-codegen-cli.jar generate -i swagger.yaml -l go -o /client -DpackageName=nautobot

Steps to reproduce

clone this repo/go to this branch:
https://github.com/TobiPeterG/go-nautobot/tree/switch-swagger-generator
find swagger.yaml in api folder
generate code using swagger

Suggest a fix/enhancement

Identifiers starting with a number could be prefixed.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with api/swagger.yaml in the linked reproduction branch, generate the Go client with the documented Swagger Codegen command, and inspect model_port_type_choices.go. Done means identifiers derived from numeric-leading values are valid Go identifiers and the generated file compiles without the reported syntax errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, java
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.