Skip to content

Commit 68aafb6

Browse files
committed
Handle numbers with underscores #2039
1 parent d58870b commit 68aafb6

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

pkg/yqlib/lib.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,12 @@ func recursiveNodeEqual(lhs *CandidateNode, rhs *CandidateNode) bool {
135135
return false
136136
}
137137

138-
// yaml numbers can be hex and octal encoded...
138+
// yaml numbers can have underscores, be hex and octal encoded...
139139
func parseInt64(numberString string) (string, int64, error) {
140+
if strings.Contains(numberString, "_") {
141+
numberString = strings.ReplaceAll(numberString, "_", "")
142+
}
143+
140144
if strings.HasPrefix(numberString, "0x") ||
141145
strings.HasPrefix(numberString, "0X") {
142146
num, err := strconv.ParseInt(numberString[2:], 16, 64)

pkg/yqlib/lib_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,17 +106,28 @@ func TestParseSnippet(t *testing.T) {
106106
type parseInt64Scenario struct {
107107
numberString string
108108
expectedParsedNumber int64
109+
expectedFormatString string
109110
}
110111

111112
var parseInt64Scenarios = []parseInt64Scenario{
112113
{
113114
numberString: "34",
114115
expectedParsedNumber: 34,
115116
},
117+
{
118+
numberString: "10_000",
119+
expectedParsedNumber: 10000,
120+
expectedFormatString: "10000",
121+
},
116122
{
117123
numberString: "0x10",
118124
expectedParsedNumber: 16,
119125
},
126+
{
127+
numberString: "0x10_000",
128+
expectedParsedNumber: 65536,
129+
expectedFormatString: "0x10000",
130+
},
120131
{
121132
numberString: "0o10",
122133
expectedParsedNumber: 8,
@@ -132,7 +143,10 @@ func TestParseInt64(t *testing.T) {
132143
t.Error(err)
133144
}
134145
test.AssertResultComplexWithContext(t, tt.expectedParsedNumber, actualNumber, tt.numberString)
146+
if tt.expectedFormatString == "" {
147+
tt.expectedFormatString = tt.numberString
148+
}
135149

136-
test.AssertResultComplexWithContext(t, tt.numberString, fmt.Sprintf(format, actualNumber), fmt.Sprintf("Formatting of: %v", tt.numberString))
150+
test.AssertResultComplexWithContext(t, tt.expectedFormatString, fmt.Sprintf(format, actualNumber), fmt.Sprintf("Formatting of: %v", tt.numberString))
137151
}
138152
}

0 commit comments

Comments
 (0)