From 656cb096009db0da84cd752396eaa12b4806b775 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Mon, 13 Jul 2026 09:24:55 +0200 Subject: [PATCH] Refactored file creation --- src/ast/ast_test.go | 5 ++--- src/core/TypeFromTokens_test.go | 6 ++---- src/errors/FileError_test.go | 8 +------- src/fs/NewFile.go | 14 ++++++++++++++ src/resolver/resolver_test.go | 8 +------- src/scanner/scanFile.go | 12 ++---------- 6 files changed, 22 insertions(+), 31 deletions(-) create mode 100644 src/fs/NewFile.go diff --git a/src/ast/ast_test.go b/src/ast/ast_test.go index d3c47dd..ecb83aa 100644 --- a/src/ast/ast_test.go +++ b/src/ast/ast_test.go @@ -75,7 +75,6 @@ func TestReturnValues(t *testing.T) { func parse(code string) (ast.AST, error) { src := []byte(code) - tokens := token.Tokenize(src) - file := &fs.File{Bytes: src, Tokens: tokens} - return ast.Parse(tokens, file) + file := fs.NewFile("", "", src) + return ast.Parse(file.Tokens, file) } \ No newline at end of file diff --git a/src/core/TypeFromTokens_test.go b/src/core/TypeFromTokens_test.go index 485f4dd..f06b8e5 100644 --- a/src/core/TypeFromTokens_test.go +++ b/src/core/TypeFromTokens_test.go @@ -6,7 +6,6 @@ import ( "git.urbach.dev/cli/q/src/config" "git.urbach.dev/cli/q/src/core" "git.urbach.dev/cli/q/src/fs" - "git.urbach.dev/cli/q/src/token" "git.urbach.dev/cli/q/src/types" "git.urbach.dev/go/assert" ) @@ -45,10 +44,9 @@ func TestTypeFromTokens(t *testing.T) { for _, test := range tests { t.Run(test.Source, func(t *testing.T) { src := []byte(test.Source) - tokens := token.Tokenize(src) - file := &fs.File{Tokens: tokens, Bytes: src} + file := fs.NewFile("", "", src) env := core.NewEnvironment(config.New()) - typ, _ := env.TypeFromTokens(tokens, file) + typ, _ := env.TypeFromTokens(file.Tokens, file) assert.True(t, types.Is(typ, test.ExpectedType)) }) } diff --git a/src/errors/FileError_test.go b/src/errors/FileError_test.go index 3f3833d..808bf07 100644 --- a/src/errors/FileError_test.go +++ b/src/errors/FileError_test.go @@ -36,14 +36,8 @@ func TestString(t *testing.T) { func test(t *testing.T, path string) *errors.FileError { contents, oserr := os.ReadFile(path) assert.Nil(t, oserr) - tokens := token.Tokenize(contents) - - file := &fs.File{ - Path: path, - Bytes: contents, - Tokens: tokens, - } + file := fs.NewFile(path, "", contents) main := token.Position(bytes.Index(contents, []byte("main()"))) err := errors.NewAt(io.EOF, file, main) assert.NotNil(t, err) diff --git a/src/fs/NewFile.go b/src/fs/NewFile.go new file mode 100644 index 0000000..8a70f09 --- /dev/null +++ b/src/fs/NewFile.go @@ -0,0 +1,14 @@ +package fs + +import "git.urbach.dev/cli/q/src/token" + +// NewFile creates a new source file object. +func NewFile(path string, pkg string, source []byte) *File { + return &File{ + Path: path, + Package: pkg, + Bytes: source, + Tokens: token.Tokenize(source), + Imports: make(map[string]*Import, 4), + } +} \ No newline at end of file diff --git a/src/resolver/resolver_test.go b/src/resolver/resolver_test.go index 1e55a61..4336b80 100644 --- a/src/resolver/resolver_test.go +++ b/src/resolver/resolver_test.go @@ -7,7 +7,6 @@ import ( "git.urbach.dev/cli/q/src/core" "git.urbach.dev/cli/q/src/fs" "git.urbach.dev/cli/q/src/resolver" - "git.urbach.dev/cli/q/src/token" "git.urbach.dev/cli/q/src/types" "git.urbach.dev/go/assert" ) @@ -16,12 +15,7 @@ func TestResolver(t *testing.T) { build := config.New() env := core.NewEnvironment(build) src := []byte("global { x int }") - - file := &fs.File{ - Package: "main", - Bytes: src, - Tokens: token.Tokenize(src), - } + file := fs.NewFile("", "main", src) env.ReceiveGlobal(&core.Global{ Name: "x", diff --git a/src/scanner/scanFile.go b/src/scanner/scanFile.go index 21e38fa..a1feded 100644 --- a/src/scanner/scanFile.go +++ b/src/scanner/scanFile.go @@ -14,17 +14,9 @@ func (s *scanner) scanFile(path string, pkg string) error { return err } - tokens := token.Tokenize(contents) - - file := &fs.File{ - Path: path, - Package: pkg, - Bytes: contents, - Tokens: tokens, - Imports: make(map[string]*fs.Import, 4), - } - + file := fs.NewFile(path, pkg, contents) s.files <- file + tokens := file.Tokens for i := 0; i < len(tokens); i++ { switch tokens[i].Kind { -- 2.51.2