diff --git a/src/compiler/Compile.go b/src/compiler/Compile.go index d8a0065..774788c 100644 --- a/src/compiler/Compile.go +++ b/src/compiler/Compile.go @@ -59,7 +59,7 @@ func Compile(build *config.Build) (*core.Environment, error) { for _, file := range env.Files { for _, imp := range file.Imports { if !imp.IsUsed() { - return nil, errors.NewAt(&UnusedImport{Package: imp.Package}, file, imp.Position) + return nil, errors.New(&UnusedImport{Package: imp.Package}, file, imp.Tokens) } } } diff --git a/src/errors/NewAt.go b/src/errors/NewAt.go index 19b8d71..5155693 100644 --- a/src/errors/NewAt.go +++ b/src/errors/NewAt.go @@ -7,5 +7,10 @@ import ( // NewAt is the same as New but with an exact position. func NewAt(err error, file *fs.File, position token.Position) *FileError { - return New(err, file, token.NewSource(position, position)) + return &FileError{ + err: err, + file: file, + source: token.NewSource(position, position), + stack: stack(), + } } \ No newline at end of file diff --git a/src/fs/Import.go b/src/fs/Import.go index 425cdb1..b42e15f 100644 --- a/src/fs/Import.go +++ b/src/fs/Import.go @@ -8,9 +8,9 @@ import ( // Import contains data about an import statement in a file. type Import struct { - Package string - Position token.Position - Used atomic.Uint64 + Package string + Tokens token.List + Used atomic.Uint64 } // IsUsed returns true if the import was used. diff --git a/src/scanner/scanImport.go b/src/scanner/scanImport.go index 6d7ed38..3418e64 100644 --- a/src/scanner/scanImport.go +++ b/src/scanner/scanImport.go @@ -15,7 +15,7 @@ func (s *scanner) scanImport(file *fs.File, tokens token.List, i int) (int, erro i++ if tokens[i].Kind != token.Identifier { - return i, errors.NewAt(ExpectedPackageName, file, tokens[i].Position) + return i, errors.New(ExpectedPackageName, file, tokens[i]) } packageName := tokens[i].StringFrom(file.Bytes) @@ -23,16 +23,16 @@ func (s *scanner) scanImport(file *fs.File, tokens token.List, i int) (int, erro stat, err := os.Stat(fullPath) if err != nil { - return i, errors.NewAt(&UnknownImport{Package: packageName}, file, tokens[i].Position) + return i, errors.New(&UnknownImport{Package: packageName}, file, tokens[i]) } if !stat.IsDir() { - return i, errors.NewAt(&IsNotDirectory{Path: fullPath}, file, tokens[i].Position) + return i, errors.New(&IsNotDirectory{Path: fullPath}, file, tokens[i]) } file.Imports[packageName] = &fs.Import{ - Package: packageName, - Position: tokens[i].Position, + Package: packageName, + Tokens: tokens[i : i+1], } s.queueDirectory(fullPath, packageName)