Skip to content

Commit 8b962d2

Browse files
committed
starlark/types: Resource.HCL enconding directly from starlark.Value
1 parent bac0f66 commit 8b962d2

File tree

11 files changed

+243
-64
lines changed

11 files changed

+243
-64
lines changed

cmd/run.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"io/ioutil"
66
"os"
77

8-
"github.com/hashicorp/hcl2/hclwrite"
8+
"github.com/hashicorp/hcl/v2/hclwrite"
99
"github.com/jessevdk/go-flags"
1010
"go.starlark.net/starlark"
1111
)

go.mod

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@ require (
77
github.com/containers/image/v5 v5.2.1
88
github.com/docker/distribution v2.7.1+incompatible // indirect
99
github.com/docker/go-metrics v0.0.1 // indirect
10-
github.com/go-git/go-git/v5 v5.0.0
1110
github.com/gobs/args v0.0.0-20180315064131-86002b4df18c
1211
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // indirect
1312
github.com/hashicorp/go-hclog v0.11.0
1413
github.com/hashicorp/go-plugin v1.0.1-0.20190610192547-a1bc61569a26
15-
github.com/hashicorp/hcl2 v0.0.0-20190618163856-0b64543c968c
14+
github.com/hashicorp/hcl/v2 v2.3.0
15+
github.com/hashicorp/hcl2 v0.0.0-00010101000000-000000000000
1616
github.com/hashicorp/terraform v0.12.23
1717
github.com/jessevdk/go-flags v1.4.0
1818
github.com/kr/text v0.2.0 // indirect
1919
github.com/mitchellh/cli v1.0.0
2020
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
2121
github.com/oklog/ulid/v2 v2.0.2
2222
github.com/qri-io/starlib v0.4.2-0.20200326221746-d3997998591b
23-
github.com/rogpeppe/go-internal v1.5.2
2423
github.com/sergi/go-diff v1.1.0 // indirect
2524
github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 // indirect
2625
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c // indirect

go.sum

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki
6060
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
6161
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
6262
github.com/agl/ed25519 v0.0.0-20150830182803-278e1ec8e8a6/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
63-
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
6463
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
6564
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
6665
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190329064014-6e358769c32a h1:APorzFpCcv6wtD5vmRWYqNm4N55kbepL7c7kTq9XI6A=
@@ -70,7 +69,6 @@ github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190103054945-8205d1f41e70/go.mod h1
7069
github.com/aliyun/aliyun-tablestore-go-sdk v4.1.2+incompatible h1:ABQ7FF+IxSFHDMOTtjCfmMDMHiCq6EsAoCV/9sFinaM=
7170
github.com/aliyun/aliyun-tablestore-go-sdk v4.1.2+incompatible/go.mod h1:LDQHRZylxvcg8H7wBIDfvO5g/cy4/sz1iucBlc2l3Jw=
7271
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
73-
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
7472
github.com/antchfx/xpath v0.0.0-20190129040759-c8489ed3251e h1:ptBAamGVd6CfRsUtyHD+goy2JGhv1QC32v3gqM8mYAM=
7573
github.com/antchfx/xpath v0.0.0-20190129040759-c8489ed3251e/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
7674
github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0 h1:JaCC8jz0zdMLk2m+qCCVLLLM/PL93p84w4pK3aJWj60=
@@ -90,7 +88,6 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
9088
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
9189
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
9290
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
93-
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
9491
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
9592
github.com/aws/aws-sdk-go v1.25.3 h1:uM16hIw9BotjZKMZlX05SN2EFtaWfi/NonPKIARiBLQ=
9693
github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
@@ -183,27 +180,14 @@ github.com/dylanmei/iso8601 v0.1.0 h1:812NGQDBcqquTfH5Yeo7lwR0nzx/cKdsmf3qMjPURU
183180
github.com/dylanmei/iso8601 v0.1.0/go.mod h1:w9KhXSgIyROl1DefbMYIE7UVSIvELTbMrCfx+QkYnoQ=
184181
github.com/dylanmei/winrmtest v0.0.0-20190225150635-99b7fe2fddf1 h1:r1oACdS2XYiAWcfF8BJXkoU8l1J71KehGR+d99yWEDA=
185182
github.com/dylanmei/winrmtest v0.0.0-20190225150635-99b7fe2fddf1/go.mod h1:lcy9/2gH1jn/VCLouHA6tOEwLoNVd4GW6zhuKLmHC2Y=
186-
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
187-
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
188183
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
189184
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
190185
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
191-
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
192186
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
193187
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
194188
github.com/ghodss/yaml v0.0.0-20161207003320-04f313413ffd/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
195189
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
196190
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
197-
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
198-
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
199-
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
200-
github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM=
201-
github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
202-
github.com/go-git/go-git v1.0.0 h1:YcN9iDGDoXuIw0vHls6rINwV416HYa0EB2X+RBsyYp4=
203-
github.com/go-git/go-git v4.7.0+incompatible h1:+W9rgGY4DOKKdX2x6HxSR7HNeTxqiKrOvKnuittYVdA=
204-
github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw=
205-
github.com/go-git/go-git/v5 v5.0.0 h1:k5RWPm4iJwYtfWoxIJy4wJX9ON7ihPeZZYC1fLYDnpg=
206-
github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA=
207191
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
208192
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
209193
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -329,6 +313,7 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+
329313
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
330314
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
331315
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
316+
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
332317
github.com/hashicorp/hcl/v2 v2.0.0/go.mod h1:oVVDG71tEinNGYCxinCYadcmKU9bglqW9pV3txagJ90=
333318
github.com/hashicorp/hcl/v2 v2.3.0 h1:iRly8YaMwTBAKhn1Ybk7VSdzbnopghktCD031P8ggUE=
334319
github.com/hashicorp/hcl/v2 v2.3.0/go.mod h1:d+FwDBbOLvpAM3Z6J7gPj/VoAGkNe/gm352ZhjJ/Zv8=
@@ -349,8 +334,6 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS
349334
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
350335
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
351336
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
352-
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
353-
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
354337
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
355338
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
356339
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
@@ -371,8 +354,6 @@ github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVY
371354
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
372355
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
373356
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
374-
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY=
375-
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
376357
github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M=
377358
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
378359
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
@@ -538,8 +519,6 @@ github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa
538519
github.com/qri-io/starlib v0.4.2-0.20200326221746-d3997998591b h1:n460ZPlc7+1evliXpUzGhIVr080j5c+2zsXuThfEGGM=
539520
github.com/qri-io/starlib v0.4.2-0.20200326221746-d3997998591b/go.mod h1:7DPO4domFU579Ga6E61sB9VFNaniPVwJP5C4bBCu3wA=
540521
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
541-
github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w=
542-
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
543522
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
544523
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
545524
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
@@ -780,15 +759,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
780759
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
781760
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
782761
gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
783-
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
784762
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
785763
gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk=
786764
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
787765
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
788766
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
789767
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
790-
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
791-
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
792768
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
793769
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
794770
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=

starlark/types/attribute.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ func (c *Attribute) Attr(name string) (starlark.Value, error) {
125125
return NewAttributeWithPath(c.r, c.t.AttributeType(name), name, path), nil
126126
}
127127

128+
func (c *Attribute) String() string {
129+
return c.sString.GoString()
130+
}
131+
128132
// AttrNames honors the starlark.HasAttrs interface.
129133
func (c *Attribute) AttrNames() []string {
130134
return []string{"__resource__", "__type__"}

starlark/types/hcl.go

Lines changed: 184 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ package types
22

33
import (
44
"fmt"
5+
"math/big"
6+
"regexp"
57
"sort"
8+
"unicode"
9+
"unicode/utf8"
610

7-
"github.com/hashicorp/hcl2/hcl"
8-
"github.com/hashicorp/hcl2/hcl/hclsyntax"
9-
"github.com/hashicorp/hcl2/hclwrite"
11+
"github.com/hashicorp/hcl/v2"
12+
"github.com/hashicorp/hcl/v2/hclsyntax"
13+
"github.com/hashicorp/hcl/v2/hclwrite"
1014
"github.com/zclconf/go-cty/cty"
1115
"go.starlark.net/starlark"
1216
)
@@ -151,15 +155,8 @@ func (r *Resource) doToHCLAttributes(body *hclwrite.Body) {
151155
return nil
152156
}
153157

154-
if c, ok := v.v.(*Attribute); ok {
155-
body.SetAttributeTraversal(v.Name, hcl.Traversal{
156-
hcl.TraverseRoot{Name: c.String()},
157-
})
158-
159-
return nil
160-
}
161-
162-
body.SetAttributeValue(v.Name, v.Cty())
158+
tokens := appendTokensForValue(v.v, nil)
159+
body.SetAttributeRaw(v.Name, tokens)
163160
return nil
164161
})
165162

@@ -230,3 +227,178 @@ func (r *Resource) doToHCLProvisioner(body *hclwrite.Body) {
230227
p.ToHCL(body)
231228
}
232229
}
230+
231+
var containsInterpolation = regexp.MustCompile(`(?mU)\$\{.*\}`)
232+
233+
func appendTokensForValue(val starlark.Value, toks hclwrite.Tokens) hclwrite.Tokens {
234+
switch v := val.(type) {
235+
case starlark.NoneType:
236+
toks = append(toks, &hclwrite.Token{
237+
Type: hclsyntax.TokenIdent,
238+
Bytes: []byte(`null`),
239+
})
240+
case starlark.Bool:
241+
var src []byte
242+
if v {
243+
src = []byte(`true`)
244+
} else {
245+
src = []byte(`false`)
246+
}
247+
toks = append(toks, &hclwrite.Token{
248+
Type: hclsyntax.TokenIdent,
249+
Bytes: src,
250+
})
251+
case starlark.Float:
252+
bf := big.NewFloat(float64(v))
253+
srcStr := bf.Text('f', -1)
254+
toks = append(toks, &hclwrite.Token{
255+
Type: hclsyntax.TokenNumberLit,
256+
Bytes: []byte(srcStr),
257+
})
258+
case starlark.Int:
259+
bf := v.BigInt()
260+
srcStr := bf.Text('2')
261+
toks = append(toks, &hclwrite.Token{
262+
Type: hclsyntax.TokenNumberLit,
263+
Bytes: []byte(srcStr),
264+
})
265+
case starlark.String:
266+
src := []byte(v.GoString())
267+
if !containsInterpolation.Match(src) {
268+
src = escapeQuotedStringLit(v.GoString())
269+
}
270+
271+
toks = append(toks, &hclwrite.Token{
272+
Type: hclsyntax.TokenOQuote,
273+
Bytes: []byte{'"'},
274+
})
275+
if len(src) > 0 {
276+
toks = append(toks, &hclwrite.Token{
277+
Type: hclsyntax.TokenQuotedLit,
278+
Bytes: []byte(src),
279+
})
280+
}
281+
toks = append(toks, &hclwrite.Token{
282+
Type: hclsyntax.TokenCQuote,
283+
Bytes: []byte{'"'},
284+
})
285+
case *starlark.List:
286+
toks = append(toks, &hclwrite.Token{
287+
Type: hclsyntax.TokenOBrack,
288+
Bytes: []byte{'['},
289+
})
290+
291+
for i := 0; i < v.Len(); i++ {
292+
if i > 0 {
293+
toks = append(toks, &hclwrite.Token{
294+
Type: hclsyntax.TokenComma,
295+
Bytes: []byte{','},
296+
})
297+
}
298+
299+
toks = appendTokensForValue(v.Index(i), toks)
300+
}
301+
302+
toks = append(toks, &hclwrite.Token{
303+
Type: hclsyntax.TokenCBrack,
304+
Bytes: []byte{']'},
305+
})
306+
307+
case *starlark.Dict:
308+
toks = append(toks, &hclwrite.Token{
309+
Type: hclsyntax.TokenOBrace,
310+
Bytes: []byte{'{'},
311+
})
312+
313+
i := 0
314+
for _, eKey := range v.Keys() {
315+
if i > 0 {
316+
toks = append(toks, &hclwrite.Token{
317+
Type: hclsyntax.TokenComma,
318+
Bytes: []byte{','},
319+
})
320+
}
321+
322+
eVal, _, _ := v.Get(eKey)
323+
if hclsyntax.ValidIdentifier(eKey.(starlark.String).GoString()) {
324+
toks = append(toks, &hclwrite.Token{
325+
Type: hclsyntax.TokenIdent,
326+
Bytes: []byte(eKey.(starlark.String).GoString()),
327+
})
328+
} else {
329+
toks = appendTokensForValue(eKey, toks)
330+
}
331+
toks = append(toks, &hclwrite.Token{
332+
Type: hclsyntax.TokenEqual,
333+
Bytes: []byte{'='},
334+
})
335+
toks = appendTokensForValue(eVal, toks)
336+
i++
337+
}
338+
339+
toks = append(toks, &hclwrite.Token{
340+
Type: hclsyntax.TokenCBrace,
341+
Bytes: []byte{'}'},
342+
})
343+
case *Attribute:
344+
toks = append(toks, &hclwrite.Token{
345+
Type: hclsyntax.TokenIdent,
346+
Bytes: []byte(v.sString.String()),
347+
})
348+
default:
349+
panic(fmt.Sprintf("cannot produce tokens for %#v", val))
350+
}
351+
352+
return toks
353+
}
354+
355+
func escapeQuotedStringLit(s string) []byte {
356+
if len(s) == 0 {
357+
return nil
358+
}
359+
buf := make([]byte, 0, len(s))
360+
for i, r := range s {
361+
switch r {
362+
case '\n':
363+
buf = append(buf, '\\', 'n')
364+
case '\r':
365+
buf = append(buf, '\\', 'r')
366+
case '\t':
367+
buf = append(buf, '\\', 't')
368+
case '"':
369+
buf = append(buf, '\\', '"')
370+
case '\\':
371+
buf = append(buf, '\\', '\\')
372+
case '$', '%':
373+
buf = appendRune(buf, r)
374+
remain := s[i+1:]
375+
if len(remain) > 0 && remain[0] == '{' {
376+
// Double up our template introducer symbol to escape it.
377+
buf = appendRune(buf, r)
378+
}
379+
default:
380+
if !unicode.IsPrint(r) {
381+
var fmted string
382+
if r < 65536 {
383+
fmted = fmt.Sprintf("\\u%04x", r)
384+
} else {
385+
fmted = fmt.Sprintf("\\U%08x", r)
386+
}
387+
buf = append(buf, fmted...)
388+
} else {
389+
buf = appendRune(buf, r)
390+
}
391+
}
392+
}
393+
return buf
394+
}
395+
396+
func appendRune(b []byte, r rune) []byte {
397+
l := utf8.RuneLen(r)
398+
for i := 0; i < l; i++ {
399+
b = append(b, 0) // make room at the end of our buffer
400+
}
401+
ch := b[len(b)-l:]
402+
utf8.EncodeRune(ch, r)
403+
return b
404+
}

0 commit comments

Comments
 (0)