diff --git a/Makefile b/Makefile index 7442842..5eb4f8e 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ +GO = go + BUILD_VERSION := $(if $(BUILD_VERSION),$(BUILD_VERSION),$(shell git describe --tags --always --dirty)) BUILD_COMMIT := $(if $(BUILD_COMMIT),$(BUILD_COMMIT),$(shell git log --format="%H" -n 1)) BUILD_COMMIT_TS := $(if $(BUILD_COMMIT_TS),$(BUILD_COMMIT_TS),$(shell git log --format="%ct" -n 1)) BUILD_BRANCH := $(if $(BUILD_BRANCH),$(BUILD_BRANCH),$(shell git rev-parse --abbrev-ref HEAD)) BUILD_TIME := $(if $(BUILD_TIME),$(BUILD_TIME),$(shell date +%FT%T%z)) BUILD_MACHINE := $(if $(BUILD_MACHINE),$(BUILD_MACHINE),$(shell uname -n -m -r -s)) -BUILD_GO_VERSION := $(if $(BUILD_GO_VERSION),$(BUILD_GO_VERSION),$(shell go version | cut -d' ' -f3)) +BUILD_GO_VERSION := $(if $(BUILD_GO_VERSION),$(BUILD_GO_VERSION),$(shell $(GO) version | cut -d' ' -f3)) COMMON_BUILD_VARS := \ -X 'github.com/vkcom/tl/pkg/build.buildTimestamp=$(BUILD_TIME)' \ @@ -16,8 +18,6 @@ COMMON_BUILD_VARS := \ COMMON_LDFLAGS = $(COMMON_BUILD_VARS) -extldflags '-O2' -GO = go - TEST_PATH := internal/tlcodegen/test TLS_PATH := $(TEST_PATH)/tls GEN_PATH := $(TEST_PATH)/gen @@ -32,12 +32,6 @@ all: build build: @$(GO) build -ldflags "$(COMMON_LDFLAGS)" -buildvcs=false -o target/bin/tlgen ./cmd/tlgen - -.PHONY: test -test: - @$(GO) test $(shell go list ./... | grep -v internal/tlcodegen/test/gen/) - - tlo-bootstrap: build @./target/bin/tlgen -v --language=go \ --copyrightPath=./COPYRIGHT \ @@ -161,8 +155,11 @@ cpp: $(MAKE) cpp_build +.PHONY: test +test: + @$(GO) test $(shell $(GO) list ./... | grep -v internal/tlcodegen/test/gen/) + # target should be as close as possible to github actions used to enable merge .PHONY: check -check: build - @go test $(shell go list ./cmd/... ./internal/... ./pkg/... | grep -v /internal/tlcodegen/test/gen/) - @go run honnef.co/go/tools/cmd/staticcheck@v0.5.1 ./... # update version together with github actions \ No newline at end of file +check: build test + @$(GO) run honnef.co/go/tools/cmd/staticcheck@v0.5.1 ./... # update version together with github actions \ No newline at end of file diff --git a/cmd/tlgen/main2.go b/cmd/tlgen/main2.go index 8b93dd1..2687ddb 100644 --- a/cmd/tlgen/main2.go +++ b/cmd/tlgen/main2.go @@ -123,11 +123,11 @@ func runMain(opt *tlcodegen.Gen2Options) error { return fmt.Errorf("error while walkking through paths: %w", err) } for _, path := range paths { - tl, err := parseTlFile(path, false, opt) + tl, err := parseTlFile(path, true, opt) if err != nil { return err } - fullTl, err := parseTlFile(path, true, opt) + fullTl, err := parseTlFile(path, false, opt) if err != nil { return err } @@ -197,10 +197,17 @@ func parseTlFile(file string, replaceStrange bool, opt *tlcodegen.Gen2Options) ( dataStr = strings.ReplaceAll(dataStr, "_ {X:Type} result:X = ReqResult X;", "") dataStr = strings.ReplaceAll(dataStr, "engine.query {X:Type} query:!X = engine.Query;", "") dataStr = strings.ReplaceAll(dataStr, "engine.queryShortened query:%(VectorTotal int) = engine.Query;", "") + // dataStr = strings.ReplaceAll(dataStr, "engine.queryShortened query:%(VectorTotal int) = engine.Query;", "") + // dataStr = strings.ReplaceAll(dataStr, "@any @internal engine.sendResponseTo {X:Type} pid:%net.Pid query:!X = Bool;", "") + // dataStr = strings.ReplaceAll(dataStr, "@internal @write messages.responseQuery {X:Type} response_query_id:long query:!X = X;", "") + // dataStr = strings.ReplaceAll(dataStr, "@any rpcDestActor#7568aabd {X:Type} actor_id:long query:!X = X;", "") + // dataStr = strings.ReplaceAll(dataStr, "@any rpcDestActorFlags#f0a5acf7 {X:Type} actor_id:long flags:# extra:%(RpcInvokeReqExtra flags) query:!X = X;", "") + // dataStr = strings.ReplaceAll(dataStr, "@any rpcDestFlags#e352035e {X:Type} flags:# extra:%(RpcInvokeReqExtra flags) query:!X = X;", "") + // dataStr = strings.ReplaceAll(dataStr, "@any rpcInvokeReq#2374df3d {X:Type} query_id:long query:!X = RpcReqResult X;", "") } tl, err := tlast.ParseTLFile(dataStr, file, tlast.LexerOptions{ AllowBuiltin: false, - AllowDirty: false, + AllowDirty: !replaceStrange, AllowMLC: !opt.WarningsAreErrors, }, opt.ErrorWriter) if err != nil { diff --git a/internal/tlcodegen/tlgen.go b/internal/tlcodegen/tlgen.go index 67bd2e8..3dcce2f 100644 --- a/internal/tlcodegen/tlgen.go +++ b/internal/tlcodegen/tlgen.go @@ -516,10 +516,13 @@ func (gen *Gen2) buildMapDescriptors(tl tlast.TL) error { gen.typeDescriptors[typeName] = append(gen.typeDescriptors[typeName], typ) } } else { - if len(typ.TemplateArguments) != 0 { - // @read funWithArg {fields_mask: #} => True; - pr := typ.TemplateArgumentsPR - return pr.BeautifulError(fmt.Errorf("function declaration %q cannot have template arguments", conName)) + for _, t := range typ.TemplateArguments { + if t.IsNat { + // @read funWithArg {fields_mask: #} => True; + return t.PR.BeautifulError(fmt.Errorf("function declaration %q cannot have template arguments", conName)) + } + // TODO - sort out things with rpc wrapping later which has a form + // @readwrite tree_stats.preferMaster {X:Type} query:!X = X; } if len(typ.Modifiers) == 0 && doLint(typ.CommentRight) { e1 := typ.Construct.NamePR.CollapseToBegin().BeautifulError(fmt.Errorf("function constructor %q without modifier (identifier starting with '@') not recommended", typ.Construct.Name.String()))