diff --git a/go.mod b/go.mod index 12483f6bfa8..da974b8e47b 100644 --- a/go.mod +++ b/go.mod @@ -64,7 +64,6 @@ require ( github.com/grafana/grafana-aws-sdk v0.11.0 github.com/grafana/grafana-azure-sdk-go v1.5.1 github.com/grafana/grafana-plugin-sdk-go v0.147.0 - github.com/grafana/thema v0.0.0-20221222001256-d3a8fa941a6b github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/hashicorp/go-hclog v1.2.0 github.com/hashicorp/go-plugin v1.4.3 @@ -78,7 +77,7 @@ require ( github.com/linkedin/goavro/v2 v2.10.0 github.com/m3db/prometheus_remote_client_golang v0.4.4 github.com/magefile/mage v1.14.0 - github.com/mattn/go-isatty v0.0.14 + github.com/mattn/go-isatty v0.0.16 github.com/mattn/go-sqlite3 v1.14.16 github.com/matttproud/golang_protobuf_extensions v1.0.4 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f @@ -127,7 +126,7 @@ require ( gopkg.in/square/go-jose.v2 v2.5.1 gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 - xorm.io/builder v0.3.6 // indirect + xorm.io/builder v0.3.6 xorm.io/core v0.7.3 xorm.io/xorm v0.8.2 ) @@ -253,7 +252,7 @@ require ( github.com/bufbuild/connect-go v1.4.1 github.com/dlmiddlecote/sqlstats v1.0.2 github.com/drone/drone-cli v1.6.1 - github.com/getkin/kin-openapi v0.103.0 + github.com/getkin/kin-openapi v0.107.0 github.com/golang-migrate/migrate/v4 v4.7.0 github.com/google/go-github/v45 v45.2.0 github.com/grafana/codejen v0.0.3 @@ -274,8 +273,9 @@ require ( require ( github.com/dave/dst v0.27.2 - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f + github.com/grafana/thema v0.0.0-20230113164405-e0e8893756cf github.com/parca-dev/parca v0.12.1 + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f k8s.io/apimachinery v0.25.3 ) @@ -309,11 +309,12 @@ require ( github.com/hashicorp/memberlist v0.5.0 // indirect github.com/invopop/yaml v0.1.0 // indirect github.com/kr/text v0.2.0 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-ieproxy v0.0.3 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect @@ -378,13 +379,13 @@ require ( github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/klauspost/compress v1.15.13 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/labstack/echo/v4 v4.9.0 // indirect - github.com/labstack/gommon v0.3.1 // indirect + github.com/labstack/echo/v4 v4.9.1 // indirect + github.com/labstack/gommon v0.4.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/pierrec/lz4/v4 v4.1.15 // indirect - github.com/valyala/fasttemplate v1.2.1 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wk8/go-ordered-map v1.0.0 github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect diff --git a/go.sum b/go.sum index 10e99e1a63a..fd311161d03 100644 --- a/go.sum +++ b/go.sum @@ -874,8 +874,8 @@ github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getkin/kin-openapi v0.94.0/go.mod h1:LWZfzOd7PRy8GJ1dJ6mCU6tNdSfOwRac1BUPam4aw6Q= -github.com/getkin/kin-openapi v0.103.0 h1:F5wAtaQvPWxKCAYZ69LgHAThgu16p4u41VQtbn1U8LA= -github.com/getkin/kin-openapi v0.103.0/go.mod h1:w4lRPHiyOdwGbOkLIyk+P0qCwlu7TXPCHD/64nSXzgE= +github.com/getkin/kin-openapi v0.107.0 h1:bxhL6QArW7BXQj8NjXfIJQy680NsMKd25nwhvpCXchg= +github.com/getkin/kin-openapi v0.107.0/go.mod h1:9Dhr+FasATJZjS4iOLvB0hkaxgYdulrNYm2e9epLWOo= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/getsentry/sentry-go v0.13.0 h1:20dgTiUSfxRB/EhMPtxcL9ZEbM1ZdR+W/7f7NWD+xWo= github.com/getsentry/sentry-go v0.13.0/go.mod h1:EOsfu5ZdvKPfeHYV6pTVQnsjfp30+XA7//UooKNumH0= @@ -1383,10 +1383,6 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grafana/alerting v0.0.0-20230112102204-5545cdf0edc9 h1:rMfagCACaYtBvj6bbJq5zVuNR6ASeKUTUOgr/DM+QrU= -github.com/grafana/alerting v0.0.0-20230112102204-5545cdf0edc9/go.mod h1:w5jcmHYPAfju/QcI69SwFs0+qMcm8jvW6fsqSc2tJtc= -github.com/grafana/alerting v0.0.0-20230113002715-e287d43f4b57 h1:VyzefGsa17SXPzqCvnI8cczbPfuVNUMXiPJNVNy/PdA= -github.com/grafana/alerting v0.0.0-20230113002715-e287d43f4b57/go.mod h1:w5jcmHYPAfju/QcI69SwFs0+qMcm8jvW6fsqSc2tJtc= github.com/grafana/alerting v0.0.0-20230113220341-b9b3de89bca2 h1:XkzN0dBir+oso3XjGOV2HLGSCjyyYHLL5AuUqI/LIXY= github.com/grafana/alerting v0.0.0-20230113220341-b9b3de89bca2/go.mod h1:w5jcmHYPAfju/QcI69SwFs0+qMcm8jvW6fsqSc2tJtc= github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw= @@ -1412,8 +1408,8 @@ github.com/grafana/prometheus-alertmanager v0.25.1-0.20230109182643-002d8ba820f6 github.com/grafana/prometheus-alertmanager v0.25.1-0.20230109182643-002d8ba820f6/go.mod h1:MnBfDPXJqXmmfPwQlCLvVUdqfnvrAw+hSPtDeaaFwj4= github.com/grafana/saml v0.4.9-0.20220727151557-61cd9c9353fc h1:1PY8n+rXuBNr3r1JQhoytWDCpc+pq+BibxV0SZv+Cr4= github.com/grafana/saml v0.4.9-0.20220727151557-61cd9c9353fc/go.mod h1:9Zh6dWPtB3MSzTRt8fIFH60Z351QQ+s7hCU3J/tTlA4= -github.com/grafana/thema v0.0.0-20221222001256-d3a8fa941a6b h1:LBjw2NaMbTdx/etBbyZO0n0L2Lqj5PCDJAGwKk9TCII= -github.com/grafana/thema v0.0.0-20221222001256-d3a8fa941a6b/go.mod h1:8wmENx19kzNI+5De7889AVRJ3T4OnOb5I1bSJLcj1t4= +github.com/grafana/thema v0.0.0-20230113164405-e0e8893756cf h1:jl1iWUlJt5GJWaafOqtaEp46MDFBCni7bmv75VGFkq0= +github.com/grafana/thema v0.0.0-20230113164405-e0e8893756cf/go.mod h1:5j2nf4xmWhKr+1vyGouML8eJ8xERS5Jw/lhjs0eyz78= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6 h1:I9dh1MXGX0wGyxdV/Sl7+ugnki4Dfsy8lv2s5Yf887o= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6/go.mod h1:ZkJLEYLoVyg7amJK/5r779bHyzs2AU8f8VMiP6BM7uY= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -1765,11 +1761,12 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= -github.com/labstack/echo/v4 v4.9.0 h1:wPOF1CE6gvt/kmbMR4dGzWvHMPT+sAEUJOwOTtvITVY= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= +github.com/labstack/echo/v4 v4.9.1 h1:GliPYSpzGKlyOhqIbG8nmHBo3i1saKWFOgh41AN3b+Y= +github.com/labstack/echo/v4 v4.9.1/go.mod h1:Pop5HLc+xoc4qhTZ1ip6C0RtP7Z+4VzRLWZZFKqbbjo= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o= github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/lann/builder v0.0.0-20150808151131-f22ce00fd939/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= @@ -1849,8 +1846,9 @@ github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20191113090002-7c0f6868bffe/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= @@ -1866,8 +1864,9 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -1971,6 +1970,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -2518,8 +2519,9 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae h1:oyiy3uBj1F4O3AaFh7hUGBrJjAssJhKyAbwxtkslxqo= github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae/go.mod h1:PnwzbSst7KD3vpBzzlntZU5gjVa455Uqa5QPiKSYJzQ= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= @@ -3194,6 +3196,7 @@ golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= diff --git a/pkg/codegen/astmanip_test.go b/pkg/codegen/astmanip_test.go index e09e1071b16..bdfd0a4eef2 100644 --- a/pkg/codegen/astmanip_test.go +++ b/pkg/codegen/astmanip_test.go @@ -2,13 +2,13 @@ package codegen import ( "bytes" - "go/format" "go/parser" "go/token" "testing" + "github.com/dave/dst/decorator" + "github.com/dave/dst/dstutil" "github.com/matryer/is" - "golang.org/x/tools/go/ast/astutil" ) func TestPrefixDropper(t *testing.T) { @@ -276,15 +276,15 @@ type Thing struct { } is := is.New(t) fset := token.NewFileSet() - inf, err := parser.ParseFile(fset, "input.go", item.in, parser.ParseComments) + inf, err := decorator.ParseFile(fset, "input.go", item.in, parser.ParseComments) if err != nil { t.Fatal(err) } drop := PrefixDropper("Foo") - astutil.Apply(inf, drop, nil) + dstutil.Apply(inf, drop, nil) buf := new(bytes.Buffer) - err = format.Node(buf, fset, inf) + err = decorator.Fprint(buf, inf) if err != nil { t.Fatal(err) } diff --git a/pkg/codegen/jenny_gotypes.go b/pkg/codegen/jenny_gotypes.go index 7f4ad8ecae6..972dd0eb818 100644 --- a/pkg/codegen/jenny_gotypes.go +++ b/pkg/codegen/jenny_gotypes.go @@ -1,19 +1,15 @@ package codegen import ( - "bytes" - - "github.com/dave/dst/decorator" "github.com/dave/dst/dstutil" "github.com/grafana/codejen" "github.com/grafana/thema/encoding/gocode" - "golang.org/x/tools/go/ast/astutil" ) // GoTypesJenny creates a [OneToOne] that produces Go types for the provided // [thema.Schema]. type GoTypesJenny struct { - ApplyFuncs []astutil.ApplyFunc + ApplyFuncs []dstutil.ApplyFunc } func (j GoTypesJenny) JennyName() string { @@ -25,32 +21,12 @@ func (j GoTypesJenny) Generate(sfg SchemaForGen) (*codejen.File, error) { b, err := gocode.GenerateTypesOpenAPI(sfg.Schema, &gocode.TypeConfigOpenAPI{ // TODO will need to account for sanitizing e.g. dashes here at some point PackageName: sfg.Schema.Lineage().Name(), - ApplyFuncs: append(j.ApplyFuncs, PrefixDropper(sfg.Name)), + ApplyFuncs: append(j.ApplyFuncs, PrefixDropper(sfg.Name), DecoderCompactor()), }) if err != nil { return nil, err } - // TODO switch to dst completely in thema so this can be made an ApplyFuncs element - fb, err := decorator.Parse(b) - if err != nil { - return nil, err - } - dstutil.Apply(fb, DecoderCompactor(), nil) - buf := new(bytes.Buffer) - err = decorator.Fprint(buf, fb) - if err != nil { - return nil, err - } - b, err = postprocessGoFile(genGoFile{ - path: "", - walker: nil, - in: buf.Bytes(), - }) - if err != nil { - return nil, err - } - return codejen.NewFile(sfg.Schema.Lineage().Name()+"_types_gen.go", b, j), nil } diff --git a/pkg/codegen/util_go.go b/pkg/codegen/util_go.go index cdd464e2914..70604f035d5 100644 --- a/pkg/codegen/util_go.go +++ b/pkg/codegen/util_go.go @@ -3,7 +3,6 @@ package codegen import ( "bytes" "fmt" - "go/ast" "go/format" "go/parser" "go/token" @@ -13,14 +12,14 @@ import ( "strings" "github.com/dave/dst" + "github.com/dave/dst/decorator" "github.com/dave/dst/dstutil" - "golang.org/x/tools/go/ast/astutil" "golang.org/x/tools/imports" ) type genGoFile struct { path string - walker astutil.ApplyFunc + walker dstutil.ApplyFunc in []byte } @@ -28,13 +27,13 @@ func postprocessGoFile(cfg genGoFile) ([]byte, error) { fname := filepath.Base(cfg.path) buf := new(bytes.Buffer) fset := token.NewFileSet() - gf, err := parser.ParseFile(fset, fname, string(cfg.in), parser.ParseComments) + gf, err := decorator.ParseFile(fset, fname, string(cfg.in), parser.ParseComments) if err != nil { return nil, fmt.Errorf("error parsing generated file: %w", err) } if cfg.walker != nil { - astutil.Apply(gf, cfg.walker, nil) + dstutil.Apply(gf, cfg.walker, nil) err = format.Node(buf, fset, gf) if err != nil { @@ -77,10 +76,10 @@ type prefixmod struct { rxpsuff *regexp.Regexp } -// PrefixDropper returns an astutil.ApplyFunc that removes the provided prefix +// PrefixDropper returns a dstutil.ApplyFunc that removes the provided prefix // string when it appears as a leading sequence in type names, var names, and // comments in a generated Go file. -func PrefixDropper(prefix string) astutil.ApplyFunc { +func PrefixDropper(prefix string) dstutil.ApplyFunc { return (&prefixmod{ prefix: prefix, rxpsuff: regexp.MustCompile(fmt.Sprintf(`%s([a-zA-Z_]+)`, prefix)), @@ -88,13 +87,13 @@ func PrefixDropper(prefix string) astutil.ApplyFunc { }).applyfunc } -// PrefixReplacer returns an astutil.ApplyFunc that removes the provided prefix +// PrefixReplacer returns a dstutil.ApplyFunc that removes the provided prefix // string when it appears as a leading sequence in type names, var names, and // comments in a generated Go file. // // When an exact match for prefix is found, the provided replace string // is substituted. -func PrefixReplacer(prefix, replace string) astutil.ApplyFunc { +func PrefixReplacer(prefix, replace string) dstutil.ApplyFunc { return (&prefixmod{ prefix: prefix, replace: replace, @@ -103,62 +102,70 @@ func PrefixReplacer(prefix, replace string) astutil.ApplyFunc { }).applyfunc } -func depoint(e ast.Expr) ast.Expr { - if star, is := e.(*ast.StarExpr); is { +func depoint(e dst.Expr) dst.Expr { + if star, is := e.(*dst.StarExpr); is { return star.X } return e } -func (d prefixmod) applyfunc(c *astutil.Cursor) bool { +func (d prefixmod) applyfunc(c *dstutil.Cursor) bool { n := c.Node() switch x := n.(type) { - case *ast.ValueSpec: + case *dst.ValueSpec: d.handleExpr(x.Type) for _, id := range x.Names { d.do(id) } - case *ast.TypeSpec: + case *dst.TypeSpec: // Always do typespecs d.do(x.Name) - case *ast.Field: + case *dst.Field: // Don't rename struct fields. We just want to rename type declarations, and // field value specifications that reference those types. d.handleExpr(x.Type) - - case *ast.CommentGroup: - for _, c := range x.List { - c.Text = d.rxpsuff.ReplaceAllString(c.Text, "$1") - if d.replace != "" { - c.Text = d.rxp.ReplaceAllString(c.Text, d.replace+"$1") + case *dst.File: + for _, decl := range x.Decls { + comments := decl.Decorations().Start.All() + decl.Decorations().Start.Clear() + // For any reason, sometimes it retrieves the comment duplicated 🤷 + commentMap := make(map[string]bool) + for _, c := range comments { + if _, ok := commentMap[c]; !ok { + commentMap[c] = true + decl.Decorations().Start.Append(d.rxpsuff.ReplaceAllString(c, "$1")) + if d.replace != "" { + decl.Decorations().Start.Append(d.rxp.ReplaceAllString(c, d.replace+"$1")) + } + } } } } return true } -func (d prefixmod) handleExpr(e ast.Expr) { +func (d prefixmod) handleExpr(e dst.Expr) { // Deref a StarExpr, if there is one expr := depoint(e) switch x := expr.(type) { - case *ast.Ident: + case *dst.Ident: d.do(x) - case *ast.ArrayType: - if id, is := depoint(x.Elt).(*ast.Ident); is { + case *dst.ArrayType: + if id, is := depoint(x.Elt).(*dst.Ident); is { d.do(id) } - case *ast.MapType: - if id, is := depoint(x.Key).(*ast.Ident); is { + case *dst.MapType: + if id, is := depoint(x.Key).(*dst.Ident); is { d.do(id) } - if id, is := depoint(x.Value).(*ast.Ident); is { + if id, is := depoint(x.Value).(*dst.Ident); is { d.do(id) } } } -func (d prefixmod) do(n *ast.Ident) { +func (d prefixmod) do(n *dst.Ident) { if n.Name != d.prefix { n.Name = strings.TrimPrefix(n.Name, d.prefix) } else if d.replace != "" { diff --git a/pkg/plugins/codegen/util_go.go b/pkg/plugins/codegen/util_go.go index 9033e29b968..a9caf75ea2a 100644 --- a/pkg/plugins/codegen/util_go.go +++ b/pkg/plugins/codegen/util_go.go @@ -10,13 +10,14 @@ import ( "path/filepath" "strings" - "golang.org/x/tools/go/ast/astutil" + "github.com/dave/dst/decorator" + "github.com/dave/dst/dstutil" "golang.org/x/tools/imports" ) type genGoFile struct { path string - walker astutil.ApplyFunc + walker dstutil.ApplyFunc in []byte } @@ -24,13 +25,13 @@ func postprocessGoFile(cfg genGoFile) ([]byte, error) { fname := filepath.Base(cfg.path) buf := new(bytes.Buffer) fset := token.NewFileSet() - gf, err := parser.ParseFile(fset, fname, string(cfg.in), parser.ParseComments) + gf, err := decorator.ParseFile(fset, fname, string(cfg.in), parser.ParseComments) if err != nil { return nil, fmt.Errorf("error parsing generated file: %w", err) } if cfg.walker != nil { - astutil.Apply(gf, cfg.walker, nil) + dstutil.Apply(gf, cfg.walker, nil) err = format.Node(buf, fset, gf) if err != nil { diff --git a/pkg/plugins/plugindef/gen.go b/pkg/plugins/plugindef/gen.go index 1c1c8e4595a..d3a7333282b 100644 --- a/pkg/plugins/plugindef/gen.go +++ b/pkg/plugins/plugindef/gen.go @@ -8,19 +8,19 @@ import ( "context" "encoding/json" "fmt" - "go/ast" "os" "path/filepath" "strings" "cuelang.org/go/cue/cuecontext" + "github.com/dave/dst" + "github.com/dave/dst/dstutil" "github.com/grafana/codejen" "github.com/grafana/grafana/pkg/codegen" "github.com/grafana/grafana/pkg/cuectx" "github.com/grafana/thema" "github.com/grafana/thema/encoding/gocode" "github.com/grafana/thema/encoding/jsonschema" - "golang.org/x/tools/go/ast/astutil" ) var dirPlugindef = filepath.Join("pkg", "plugins", "plugindef") @@ -62,7 +62,7 @@ func (j *jennytypego) JennyName() string { } func (j *jennytypego) Generate(lin thema.Lineage) (*codejen.File, error) { - f, err := codegen.GoTypesJenny{ApplyFuncs: []astutil.ApplyFunc{ + f, err := codegen.GoTypesJenny{ApplyFuncs: []dstutil.ApplyFunc{ codegen.PrefixReplacer("Plugindef", "PluginDef"), }}.Generate(codegen.SchemaForGen{ Name: "PluginDef", @@ -85,7 +85,7 @@ func (j *jennybindgo) JennyName() string { func (j *jennybindgo) Generate(lin thema.Lineage) (*codejen.File, error) { b, err := gocode.GenerateLineageBinding(lin, &gocode.BindingConfig{ TitleName: "PluginDef", - Assignee: ast.NewIdent("*PluginDef"), + Assignee: dst.NewIdent("*PluginDef"), PrivateFactory: true, }) if err != nil { diff --git a/pkg/plugins/plugindef/plugindef_bindings_gen.go b/pkg/plugins/plugindef/plugindef_bindings_gen.go index 1a9aae120a6..3438f6896a3 100644 --- a/pkg/plugins/plugindef/plugindef_bindings_gen.go +++ b/pkg/plugins/plugindef/plugindef_bindings_gen.go @@ -46,7 +46,6 @@ func doLineage(rt *thema.Runtime, opts ...thema.BindOption) (thema.ConvergentLin } return tsch.ConvergentLineage(), nil } - func baseLineage(rt *thema.Runtime, opts ...thema.BindOption) (thema.Lineage, error) { // First, we must get the bytes of the .cue file(s) in which the "plugindef" lineage // is declared, and load them into a diff --git a/pkg/plugins/plugindef/plugindef_types_gen.go b/pkg/plugins/plugindef/plugindef_types_gen.go index 471dcaae99b..2c26d1d9510 100644 --- a/pkg/plugins/plugindef/plugindef_types_gen.go +++ b/pkg/plugins/plugindef/plugindef_types_gen.go @@ -67,6 +67,7 @@ const ( ) // Defines values for Category. +// Defines values for PlugindefCategory. const ( CategoryCloud Category = "cloud" @@ -86,6 +87,7 @@ const ( ) // Defines values for Type. +// Defines values for PlugindefType. const ( TypeApp Type = "app" @@ -358,6 +360,7 @@ type URLParam struct { Name string `json:"name"` } +// Plugindef defines model for plugindef. // PluginDef defines model for plugindef. type PluginDef struct { // For data source plugins, if the plugin supports alerting.