1
0

refactor build

This commit is contained in:
Arpad Ryszka 2026-01-16 01:03:43 +01:00
parent b4086951ee
commit dd6cdb1aac
10 changed files with 134 additions and 161 deletions

2
.gitignore vendored
View File

@ -1,6 +1,4 @@
*.test
*.out *.out
.coverprofile .coverprofile
.coverprofile-cmd .coverprofile-cmd
codecov
.build .build

184
Makefile
View File

@ -1,35 +1,24 @@
sources = $(shell find . -name '*.go' | grep -v cmd/treerack/docreflect.gen.go) sources = $(shell find . -name '*.go' \
| grep -v cmd/treerack/docreflect.gen.go \
| grep -v head.go \
| grep -v .build/head.go \
| grep -v headexported.go \
| grep -v .build/headexported.go \
| grep -v internal/self/self.go \
| grep -v .build/self.go)
parsers = $(shell find . -name '*.treerack') parsers = $(shell find . -name '*.treerack')
release_date = $(shell git show -s --format=%cs HEAD) release_date = $(shell git show -s --format=%cs HEAD)
version = $(date)-$(shell git rev-parse --short HEAD) version = $(release_date)-$(shell git rev-parse --short HEAD)
PREFIX ?= /usr/local
.PHONY: cpu.out prefix ?= $(PREFIX)
default: build default: build
deps: .build:
go get golang.org/x/tools/cmd/goimports mkdir -p .build
go get -t ./...
imports: $(sources) .build/head.go: $(sources) .build
@echo imports go fmt ./...
@goimports -w $(sources)
cmd/treerack/docreflect.gen.go: $(sources)
go run scripts/docreflect.go > .build/docreflect.gen.go && \
mv .build/docreflect.gen.go cmd/treerack || \
rm .build/docreflect.gen.go
build: $(sources) cmd/treerack/readme.md cmd/treerack/docreflect.gen.go .build/treerack .build/treerack.1
.build/treerack:
go build
go build -o .build/treerack ./cmd/treerack
install: $(sources)
go install ./cmd/treerack
head: $(sources) fmt
go run scripts/createhead.go -- \ go run scripts/createhead.go -- \
char.go \ char.go \
sequence.go \ sequence.go \
@ -39,8 +28,14 @@ head: $(sources) fmt
context.go \ context.go \
nodehead.go \ nodehead.go \
syntaxhead.go \ syntaxhead.go \
> head.go > .build/head.go
@gofmt -s -w head.go go fmt .build/head.go
head.go: .build/head.go
cp .build/head.go .
.build/headexported.go: $(sources) .build
go fmt ./...
go run scripts/createhead.go --exported -- \ go run scripts/createhead.go --exported -- \
char.go \ char.go \
sequence.go \ sequence.go \
@ -50,72 +45,66 @@ head: $(sources) fmt
context.go \ context.go \
nodehead.go \ nodehead.go \
syntaxhead.go \ syntaxhead.go \
> headexported.go > .build/headexported.go
@gofmt -s -w headexported.go go fmt .build/headexported.go
generate: $(sources) $(parsers) fmt head install headexported.go: .build/headexported.go
treerack generate -export -package-name self < syntax.treerack > self/self.go.next cp .build/headexported.go .
@mv self/self.go.next self/self.go
@gofmt -s -w self/self.go
regenerate: $(sources) $(parsers) fmt head install .build/self.go: $(sources) $(parsers) head.go headexported.go .build
treerack generate -export -package-name self < syntax.treerack > self/self.go.next # since generator code depends on the syntax itself, we need to passes:
@mv self/self.go.next self/self.go go build -o .build/treerack.current ./cmd/treerack
go install ./cmd/treerack .build/treerack.current generate --export --package-name self < syntax.treerack > .build/self.go
treerack generate -export -package-name self < syntax.treerack > self/self.go.next go fmt .build/self.go
@mv self/self.go.next self/self.go cp internal/self/self.go .build/self.go.backup
@gofmt -s -w self/self.go cp .build/self.go internal/self
# second pass:
go build -o .build/treerack.interim ./cmd/treerack || mv .build/self.go.backup internal/self/self.go
.build/treerack.interim generate --export --package-name self < syntax.treerack > .build/self.go \
|| mv .build/self.go.backup internal/self/self.go
go fmt .build/self.go || mv .build/self.go.backup internal/self/self.go
mv .build/self.go.backup internal/self/self.go
check-generate: $(sources) $(parsers) internal/self/self.go: .build/self.go
@echo checking head cp .build/self.go internal/self
@mv headexported.go headexported.go.backup
@go run scripts/createhead.go --exported -- \
char.go \
sequence.go \
choice.go \
idset.go \
results.go \
context.go \
nodehead.go \
syntaxhead.go \
> headexported.go
@gofmt -s -w headexported.go
@if ! diff headexported.go headexported.go.backup > /dev/null; then \
mv headexported.go.backup headexported.go; \
echo head does not match; \
false; \
fi
@echo checking self
@mv self/self.go self/self.go.backup
@treerack generate -export -package-name self < syntax.treerack > self/self.go.next
@mv self/self.go.next self/self.go
@gofmt -s -w self/self.go
@if ! diff self/self.go self/self.go.backup > /dev/null; then \
mv self/self.go.backup self/self.go; \
echo self does not match; \
false; \
fi
@echo ok lib: $(sources) head.go headexported.go internal/self/self.go
@mv headexported.go.backup headexported.go go build
@mv self/self.go.backup self/self.go go build ./internal/self
.build: cmd/treerack/docreflect.gen.go: $(sources) .build
mkdir -p .build go run scripts/docreflect.go > .build/docreflect.gen.go
mv .build/docreflect.gen.go cmd/treerack
cmd/treerack/readme.md: $(sources) cmd/treerack/docreflect.gen.go cmd/treerack/readme.md: $(sources) cmd/treerack/docreflect.gen.go
go run scripts/cmdreadme.go ./cmd/treerack > cmd/treerack/readme.md || \ go run scripts/cmdreadme.go ./cmd/treerack > cmd/treerack/readme.md || \
rm cmd/treerack/readme.md rm cmd/treerack/readme.md
.build/treerack.1: $(sources) cmd/treerack/docreflect.gen.go .build/treerack: $(sources) lib cmd/treerack/docreflect.gen.go .build
go build -o .build/treerack -ldflags "-X main.version=$(version)" ./cmd/treerack
.build/treerack.1: $(sources) cmd/treerack/docreflect.gen.go .build
go run scripts/man.go $(version) $(release_date) > .build/treerack.1 || \ go run scripts/man.go $(version) $(release_date) > .build/treerack.1 || \
rm .build/treerack.1 rm .build/treerack.1
check: build $(parsers) build: lib cmd/treerack/readme.md .build/treerack .build/treerack.1
go test -test.short -run ^Test
go test ./cmd/treerack -test.short -run ^Test
checkall: build $(parsers) check-generate: .build/head.go .build/headexported.go .build/self.go
@if ! diff head.go .build/head.go > /dev/null; then \
echo head.go does not match; \
false; \
fi
@if ! diff headexported.go .build/headexported.go > /dev/null; then \
echo headexported.go does not match; \
false; \
fi
@if ! diff internal/self/self.go .build/self.go > /dev/null; then \
echo self.go does not match; \
false; \
fi
check: $(sources) $(parsers) build check-generate
go test go test
go test ./cmd/treerack go test ./cmd/treerack
@ -137,39 +126,28 @@ cover-cmd: .coverprofile-cmd
showcover-cmd: .coverprofile-cmd showcover-cmd: .coverprofile-cmd
go tool cover -html .coverprofile-cmd go tool cover -html .coverprofile-cmd
# command line interface not included .PHONY: cpu.out
publishcoverage: .coverprofile
curl -s https://codecov.io/bash -o codecov
bash codecov -Zf .coverprofile
cpu.out: cpu.out:
go test -v -run TestMMLFile -cpuprofile cpu.out go test -v -run TestMMLFile -cpuprofile cpu.out
cpu: cpu.out cpu: cpu.out
go tool pprof -top cpu.out go tool pprof -top cpu.out
fmt: $(sources) fmt: $(sources) head.go headexported.go internal/self/self.go cmd/treerack/docreflect.gen.go
gofmt -w -s $(sources) go fmt ./...
checkfmt: $(sources) $(prefix)/bin/treerack: .build/treerack
if [ "$$(gofmt -s -d $(sources))" != "" ]; then false; else true; fi mkdir -p $(prefix)/bin
cp .build/treerack $(prefix)/bin
vet: $(prefix)/share/man/man1/treerack.1: .build/treerack.1
go vet ./... mkdir -p $(prefix)/share/man/man1
cp .build/treerack.1 $(prefix)/share/man/man1
precommit: fmt check-generate vet build checkall install: $(prefix)/bin/treerack $(prefix)/share/man/man1/treerack.1
clean: clean:
rm -f *.test
rm -f cpu.out rm -f cpu.out
rm -f .coverprofile rm -f .coverprofile
go clean -i ./... rm -rf .build
rm -f .build/treerack go clean ./...
rm -f .build/treerack.1
rm -f cmd/treerack/docreflect.gen.go
rm -f cmd/treerack/readme.md
ci-trigger: deps checkfmt build checkall
ifeq ($(TRAVIS_BRANCH)_$(TRAVIS_PULL_REQUEST), master_false)
make publishcoverage
endif

View File

@ -2,9 +2,10 @@
Generated with https://code.squareroundforest.org/arpio/docreflect Generated with https://code.squareroundforest.org/arpio/docreflect
*/ */
package main package main
import "code.squareroundforest.org/arpio/docreflect" import "code.squareroundforest.org/arpio/docreflect"
func init() { func init() {
docreflect.Register("main", "") docreflect.Register("main", "")
docreflect.Register("main.check", "check parses input content against the provided syntax definition and fails if the input does not match.\nSyntax can be provided via a filename option or an inline string option. Input can be provided via a filename\noption, a positional argument filename, an inline string option, or piped from standard input.\n\nfunc(o, stdin, args)") docreflect.Register("main.check", "check parses input content against the provided syntax definition and fails if the input does not match.\nSyntax can be provided via a filename option or an inline string option. Input can be provided via a filename\noption, a positional argument filename, an inline string option, or piped from standard input.\n\nfunc(o, stdin, args)")
@ -26,6 +27,7 @@ docreflect.Register("main.generateOptions.Export", "Export determines whether th
docreflect.Register("main.generateOptions.PackageName", "PackageName specifies the package name for the generated code. Defaults to main.\n") docreflect.Register("main.generateOptions.PackageName", "PackageName specifies the package name for the generated code. Defaults to main.\n")
docreflect.Register("main.generateOptions.Syntax", "Syntax specifies the filename of the syntax definition file.\n") docreflect.Register("main.generateOptions.Syntax", "Syntax specifies the filename of the syntax definition file.\n")
docreflect.Register("main.generateOptions.SyntaxString", "SyntaxString specifies the syntax as an inline string.\n") docreflect.Register("main.generateOptions.SyntaxString", "SyntaxString specifies the syntax as an inline string.\n")
docreflect.Register("main.init", "\nfunc()")
docreflect.Register("main.initInput", "\nfunc(filename, stringValue, stdin, args)") docreflect.Register("main.initInput", "\nfunc(filename, stringValue, stdin, args)")
docreflect.Register("main.main", "\nfunc()") docreflect.Register("main.main", "\nfunc()")
docreflect.Register("main.mapNode", "\nfunc(n)") docreflect.Register("main.mapNode", "\nfunc(n)")
@ -44,4 +46,5 @@ docreflect.Register("main.showOptions.InputString", "InputString specifies the i
docreflect.Register("main.showOptions.Pretty", "Pretty enables indented, human-readable output.\n") docreflect.Register("main.showOptions.Pretty", "Pretty enables indented, human-readable output.\n")
docreflect.Register("main.showOptions.Syntax", "Syntax specifies the filename of the syntax definition file.\n") docreflect.Register("main.showOptions.Syntax", "Syntax specifies the filename of the syntax definition file.\n")
docreflect.Register("main.showOptions.SyntaxString", "SyntaxString specifies the syntax as an inline string.\n") docreflect.Register("main.showOptions.SyntaxString", "SyntaxString specifies the syntax as an inline string.\n")
docreflect.Register("main.version", "")
} }

View File

@ -2,10 +2,12 @@ package main
import . "code.squareroundforest.org/arpio/wand" import . "code.squareroundforest.org/arpio/wand"
var version = "dev"
func main() { func main() {
checkSyntax := Args(Command("check-syntax", checkSyntax), 0, 1) checkSyntax := Args(Command("check-syntax", checkSyntax), 0, 1)
check := Args(Command("check", check), 0, 1) check := Args(Command("check", check), 0, 1)
show := Args(Command("show", show), 0, 1) show := Args(Command("show", show), 0, 1)
generate := Args(Command("generate", generate), 0, 1) generate := Args(Command("generate", generate), 0, 1)
Exec(Group("treerack", checkSyntax, check, show, generate)) Exec(Version(Group("treerack", checkSyntax, check, show, generate), version))
} }

View File

@ -115,6 +115,10 @@ piped from standard input.
- --syntax-string string: specifies the syntax as an inline string. - --syntax-string string: specifies the syntax as an inline string.
- --help: Show help. - --help: Show help.
### treerack version
Show version.
## Environment variables: ## Environment variables:
Every command line option's value can also be provided as an environment variable. Environment variable names Every command line option's value can also be provided as an environment variable. Environment variable names

2
go.mod
View File

@ -3,13 +3,13 @@ module code.squareroundforest.org/arpio/treerack
go 1.25.3 go 1.25.3
require ( require (
code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e
code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96 code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96
github.com/iancoleman/strcase v0.3.0 github.com/iancoleman/strcase v0.3.0
) )
require ( require (
code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2 // indirect code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2 // indirect
code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e // indirect
code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9 // indirect code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9 // indirect
code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239 // indirect code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239 // indirect
code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be // indirect code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be // indirect

12
go.sum
View File

@ -1,34 +1,22 @@
code.squareroundforest.org/arpio/bind v0.0.0-20251105181644-3443251be2d5 h1:SIgLIawD6Vv7rAvUobpVshLshdwFEJ0NOUrWpheS088=
code.squareroundforest.org/arpio/bind v0.0.0-20251105181644-3443251be2d5/go.mod h1:tTCmCwFABKNm3PO0Dclsp4zWhNQFTfg9+uSrgoarZFI=
code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2 h1:zEztr5eSD/V3lzKPcRAxNprobhHMd3w6Dw3oIbjNrrk= code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2 h1:zEztr5eSD/V3lzKPcRAxNprobhHMd3w6Dw3oIbjNrrk=
code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2/go.mod h1:tTCmCwFABKNm3PO0Dclsp4zWhNQFTfg9+uSrgoarZFI= code.squareroundforest.org/arpio/bind v0.0.0-20251125135123-0de6ad6e67f2/go.mod h1:tTCmCwFABKNm3PO0Dclsp4zWhNQFTfg9+uSrgoarZFI=
code.squareroundforest.org/arpio/docreflect v0.0.0-20251031192707-01c5ff18fab1 h1:bJi41U5yGQykg6jVlD2AdWiznvx3Jg7ZpzEU85syOXw=
code.squareroundforest.org/arpio/docreflect v0.0.0-20251031192707-01c5ff18fab1/go.mod h1:/3xQI36oJG8qLBxT2fSS61P5/+i1T64fTX9GHRh8XhA=
code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e h1:Z+TXQtCxNhHUgsBSYsatNGBCRtGibRcsEbZjk1LImCQ= code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e h1:Z+TXQtCxNhHUgsBSYsatNGBCRtGibRcsEbZjk1LImCQ=
code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e/go.mod h1:/3xQI36oJG8qLBxT2fSS61P5/+i1T64fTX9GHRh8XhA= code.squareroundforest.org/arpio/docreflect v0.0.0-20260113222846-40bd1879753e/go.mod h1:/3xQI36oJG8qLBxT2fSS61P5/+i1T64fTX9GHRh8XhA=
code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9 h1:b7voJlwe0jKH568X+O7b/JTAUrHLTSKNSSL+hhV2Q/Q= code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9 h1:b7voJlwe0jKH568X+O7b/JTAUrHLTSKNSSL+hhV2Q/Q=
code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9/go.mod h1:hq+2CENEd4bVSZnOdq38FUFOJJnF3OTQRv78qMGkNlE= code.squareroundforest.org/arpio/html v0.0.0-20251103020946-e262eca50ac9/go.mod h1:hq+2CENEd4bVSZnOdq38FUFOJJnF3OTQRv78qMGkNlE=
code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239 h1:JvLVMuvF2laxXkIZbHC1/0xtKyKndAwIHbIIWkHqTzc= code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239 h1:JvLVMuvF2laxXkIZbHC1/0xtKyKndAwIHbIIWkHqTzc=
code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239/go.mod h1:ait4Fvg9o0+bq5hlxi9dAcPL5a+/sr33qsZPNpToMLY= code.squareroundforest.org/arpio/notation v0.0.0-20251101123932-5f5c05ee0239/go.mod h1:ait4Fvg9o0+bq5hlxi9dAcPL5a+/sr33qsZPNpToMLY=
code.squareroundforest.org/arpio/textedit v0.0.0-20251207224821-c75c3965789f h1:gomu8xTD953IkL3M528qVEuZ2z93C2I6Hr4vyIwE7kI=
code.squareroundforest.org/arpio/textedit v0.0.0-20251207224821-c75c3965789f/go.mod h1:nXdFdxdI69JrkIT97f+AEE4OgplmxbgNFZC5j7gsdqs=
code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be h1:hy7tbsf8Fzl0UzBUNXRottKtCg3GvVI7Hmaf28Qoias= code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be h1:hy7tbsf8Fzl0UzBUNXRottKtCg3GvVI7Hmaf28Qoias=
code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be/go.mod h1:nXdFdxdI69JrkIT97f+AEE4OgplmxbgNFZC5j7gsdqs= code.squareroundforest.org/arpio/textedit v0.0.0-20251209222254-5a3e22b886be/go.mod h1:nXdFdxdI69JrkIT97f+AEE4OgplmxbgNFZC5j7gsdqs=
code.squareroundforest.org/arpio/textfmt v0.0.0-20251207234108-fed32c8bbe18 h1:2aa62CYm9ld5SNoFxWzE2wUN0xjVWQ+xieoeFantdg4= code.squareroundforest.org/arpio/textfmt v0.0.0-20251207234108-fed32c8bbe18 h1:2aa62CYm9ld5SNoFxWzE2wUN0xjVWQ+xieoeFantdg4=
code.squareroundforest.org/arpio/textfmt v0.0.0-20251207234108-fed32c8bbe18/go.mod h1:+0G3gufMAP8SCEIrDT1D/DaVOSfjS8EwPTBs5vfxqQg= code.squareroundforest.org/arpio/textfmt v0.0.0-20251207234108-fed32c8bbe18/go.mod h1:+0G3gufMAP8SCEIrDT1D/DaVOSfjS8EwPTBs5vfxqQg=
code.squareroundforest.org/arpio/wand v0.0.0-20260108202216-ba493e77d610 h1:kgDcz4+PMq5iyd3r80vcZsNfphfaRIBf9B+D7B4vYfM=
code.squareroundforest.org/arpio/wand v0.0.0-20260108202216-ba493e77d610/go.mod h1:rYqrSmdkBlKjGwEPzzWAIRQKQJCpkdzG7vDiL6Fux9Y=
code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96 h1:RqFGMfQznU7ivTLS8/Qj0AantFbEHSAy6U/B4xoSO88= code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96 h1:RqFGMfQznU7ivTLS8/Qj0AantFbEHSAy6U/B4xoSO88=
code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96/go.mod h1:fPxs3LeGPxRMWUIXgBcdszk3a8d1TRqSHSVs5VL28Rc= code.squareroundforest.org/arpio/wand v0.0.0-20260113225451-514cd3375d96/go.mod h1:fPxs3LeGPxRMWUIXgBcdszk3a8d1TRqSHSVs5VL28Rc=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=

View File

@ -1,6 +1,6 @@
package treerack package treerack
import "code.squareroundforest.org/arpio/treerack/self" import "code.squareroundforest.org/arpio/treerack/internal/self"
func mapNodes(m func(n *Node) *Node, n []*Node) []*Node { func mapNodes(m func(n *Node) *Node, n []*Node) []*Node {
var nn []*Node var nn []*Node

View File

@ -1,7 +1,7 @@
package treerack package treerack
import ( import (
"code.squareroundforest.org/arpio/treerack/self" "code.squareroundforest.org/arpio/treerack/internal/self"
"errors" "errors"
"fmt" "fmt"
"io" "io"