diff --git a/internal/lsp/cache/load.go b/internal/lsp/cache/load.go
index ec40b22..bde23b2 100644
--- a/internal/lsp/cache/load.go
+++ b/internal/lsp/cache/load.go
@@ -167,8 +167,8 @@
 	return nil
 }
 
-func (s *snapshot) parseLoadError(ctx context.Context, loadErr error) *source.ErrorList {
-	var srcErrs *source.ErrorList
+func (s *snapshot) parseLoadError(ctx context.Context, loadErr error) source.ErrorList {
+	var srcErrs source.ErrorList
 	for _, uri := range s.ModFiles() {
 		fh, err := s.GetFile(ctx, uri)
 		if err != nil {
@@ -179,9 +179,9 @@
 			continue
 		}
 		if srcErrs == nil {
-			srcErrs = &source.ErrorList{}
+			srcErrs = source.ErrorList{}
 		}
-		*srcErrs = append(*srcErrs, srcErr)
+		srcErrs = append(srcErrs, srcErr)
 	}
 	return srcErrs
 }
diff --git a/internal/lsp/cache/mod.go b/internal/lsp/cache/mod.go
index ef01864..c6bce31 100644
--- a/internal/lsp/cache/mod.go
+++ b/internal/lsp/cache/mod.go
@@ -72,10 +72,10 @@
 		file, err := modfile.Parse(modFH.URI().Filename(), contents, nil)
 
 		// Attempt to convert the error to a standardized parse error.
-		var parseErrors []source.Error
+		var parseErrors []*source.Error
 		if err != nil {
 			if parseErr, extractErr := extractModParseErrors(modFH.URI(), m, err, contents); extractErr == nil {
-				parseErrors = []source.Error{*parseErr}
+				parseErrors = []*source.Error{parseErr}
 			}
 		}
 		return &parseModData{
diff --git a/internal/lsp/cache/mod_tidy.go b/internal/lsp/cache/mod_tidy.go
index 4d94090..f33d9c3 100644
--- a/internal/lsp/cache/mod_tidy.go
+++ b/internal/lsp/cache/mod_tidy.go
@@ -173,7 +173,7 @@
 			return nil, false
 		}
 		return &source.TidiedModule{
-			Errors: []source.Error{{
+			Errors: []*source.Error{{
 				URI:   fh.URI(),
 				Range: rng,
 				Kind:  source.ListError,
@@ -212,7 +212,7 @@
 // modTidyErrors computes the differences between the original and tidied
 // go.mod files to produce diagnostic and suggested fixes. Some diagnostics
 // may appear on the Go files that import packages from missing modules.
-func modTidyErrors(ctx context.Context, snapshot source.Snapshot, pm *source.ParsedModule, ideal *modfile.File, workspacePkgs []source.Package) (errors []source.Error, err error) {
+func modTidyErrors(ctx context.Context, snapshot source.Snapshot, pm *source.ParsedModule, ideal *modfile.File, workspacePkgs []source.Package) (errors []*source.Error, err error) {
 	// First, determine which modules are unused and which are missing from the
 	// original go.mod file.
 	var (
@@ -333,16 +333,16 @@
 }
 
 // unusedError returns a source.Error for an unused require.
-func unusedError(m *protocol.ColumnMapper, req *modfile.Require, computeEdits diff.ComputeEdits) (source.Error, error) {
+func unusedError(m *protocol.ColumnMapper, req *modfile.Require, computeEdits diff.ComputeEdits) (*source.Error, error) {
 	rng, err := rangeFromPositions(m, req.Syntax.Start, req.Syntax.End)
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
 	args, err := source.MarshalArgs(m.URI, false, []string{req.Mod.Path + "@none"})
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
-	return source.Error{
+	return &source.Error{
 		Category: source.GoModTidy,
 		Message:  fmt.Sprintf("%s is not used in this module", req.Mod.Path),
 		Range:    rng,
@@ -360,10 +360,10 @@
 
 // directnessError extracts errors when a dependency is labeled indirect when
 // it should be direct and vice versa.
-func directnessError(m *protocol.ColumnMapper, req *modfile.Require, computeEdits diff.ComputeEdits) (source.Error, error) {
+func directnessError(m *protocol.ColumnMapper, req *modfile.Require, computeEdits diff.ComputeEdits) (*source.Error, error) {
 	rng, err := rangeFromPositions(m, req.Syntax.Start, req.Syntax.End)
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
 	direction := "indirect"
 	if req.Indirect {
@@ -376,16 +376,16 @@
 			end.Byte += len([]byte(comments.Suffix[0].Token))
 			rng, err = rangeFromPositions(m, comments.Suffix[0].Start, end)
 			if err != nil {
-				return source.Error{}, err
+				return nil, err
 			}
 		}
 	}
 	// If the dependency should be indirect, add the // indirect.
 	edits, err := switchDirectness(req, m, computeEdits)
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
-	return source.Error{
+	return &source.Error{
 		Message:  fmt.Sprintf("%s should be %s", req.Mod.Path, direction),
 		Range:    rng,
 		URI:      m.URI,
@@ -399,7 +399,7 @@
 	}, nil
 }
 
-func missingModuleError(snapshot source.Snapshot, pm *source.ParsedModule, req *modfile.Require) (source.Error, error) {
+func missingModuleError(snapshot source.Snapshot, pm *source.ParsedModule, req *modfile.Require) (*source.Error, error) {
 	var rng protocol.Range
 	// Default to the start of the file if there is no module declaration.
 	if pm.File != nil && pm.File.Module != nil && pm.File.Module.Syntax != nil {
@@ -407,14 +407,14 @@
 		var err error
 		rng, err = rangeFromPositions(pm.Mapper, start, end)
 		if err != nil {
-			return source.Error{}, err
+			return nil, err
 		}
 	}
 	args, err := source.MarshalArgs(pm.Mapper.URI, !req.Indirect, []string{req.Mod.Path + "@" + req.Mod.Version})
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
-	return source.Error{
+	return &source.Error{
 		URI:      pm.Mapper.URI,
 		Range:    rng,
 		Message:  fmt.Sprintf("%s is not in your go.mod file", req.Mod.Path),
@@ -466,19 +466,19 @@
 
 // missingModuleForImport creates an error for a given import path that comes
 // from a missing module.
-func missingModuleForImport(snapshot source.Snapshot, m *protocol.ColumnMapper, imp *ast.ImportSpec, req *modfile.Require, fixes []source.SuggestedFix) (source.Error, error) {
+func missingModuleForImport(snapshot source.Snapshot, m *protocol.ColumnMapper, imp *ast.ImportSpec, req *modfile.Require, fixes []source.SuggestedFix) (*source.Error, error) {
 	if req.Syntax == nil {
-		return source.Error{}, fmt.Errorf("no syntax for %v", req)
+		return nil, fmt.Errorf("no syntax for %v", req)
 	}
 	spn, err := span.NewRange(snapshot.FileSet(), imp.Path.Pos(), imp.Path.End()).Span()
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
 	rng, err := m.Range(spn)
 	if err != nil {
-		return source.Error{}, err
+		return nil, err
 	}
-	return source.Error{
+	return &source.Error{
 		Category:       source.GoModTidy,
 		URI:            m.URI,
 		Range:          rng,
diff --git a/internal/lsp/cache/view.go b/internal/lsp/cache/view.go
index 9b4de73..8c682bf 100644
--- a/internal/lsp/cache/view.go
+++ b/internal/lsp/cache/view.go
@@ -515,12 +515,9 @@
 
 		// If we have multiple modules, we need to load them by paths.
 		var scopes []interface{}
-		var modErrors *source.ErrorList
+		var modErrors source.ErrorList
 		addError := func(uri span.URI, err error) {
-			if modErrors == nil {
-				modErrors = &source.ErrorList{}
-			}
-			*modErrors = append(*modErrors, &source.Error{
+			modErrors = append(modErrors, &source.Error{
 				URI:      uri,
 				Category: "compiler",
 				Kind:     source.ListError,
diff --git a/internal/lsp/code_action.go b/internal/lsp/code_action.go
index b3a3ce3..35fccea 100644
--- a/internal/lsp/code_action.go
+++ b/internal/lsp/code_action.go
@@ -528,7 +528,7 @@
 	return quickFixes, nil
 }
 
-func sameDiagnostic(d protocol.Diagnostic, e source.Error) bool {
+func sameDiagnostic(d protocol.Diagnostic, e *source.Error) bool {
 	return d.Message == e.Message && protocol.CompareRange(d.Range, e.Range) == 0 && d.Source == e.Category
 }
 
diff --git a/internal/lsp/diagnostics.go b/internal/lsp/diagnostics.go
index e8e2868..49298bc 100644
--- a/internal/lsp/diagnostics.go
+++ b/internal/lsp/diagnostics.go
@@ -193,8 +193,8 @@
 
 	if err != nil {
 		// Some error messages can also be displayed as diagnostics.
-		if errList := (*source.ErrorList)(nil); errors.As(err, &errList) {
-			_ = errorsToDiagnostic(ctx, snapshot, *errList, reports)
+		if errList := (source.ErrorList)(nil); errors.As(err, &errList) {
+			_ = errorsToDiagnostic(ctx, snapshot, errList, reports)
 		}
 		event.Error(ctx, "errors diagnosing workspace", err, tag.Snapshot.Of(snapshot.ID()), tag.Directory.Of(snapshot.View().Folder()))
 		return reports, nil
diff --git a/internal/lsp/mod/diagnostics.go b/internal/lsp/mod/diagnostics.go
index 20fd606..23f0059 100644
--- a/internal/lsp/mod/diagnostics.go
+++ b/internal/lsp/mod/diagnostics.go
@@ -51,7 +51,7 @@
 	return reports, nil
 }
 
-func ErrorsForMod(ctx context.Context, snapshot source.Snapshot, fh source.FileHandle) ([]source.Error, error) {
+func ErrorsForMod(ctx context.Context, snapshot source.Snapshot, fh source.FileHandle) ([]*source.Error, error) {
 	pm, err := snapshot.ParseMod(ctx, fh)
 	if err != nil {
 		if pm == nil || len(pm.ParseErrors) == 0 {
diff --git a/internal/lsp/source/view.go b/internal/lsp/source/view.go
index 89f4c6a..ff4a4ca 100644
--- a/internal/lsp/source/view.go
+++ b/internal/lsp/source/view.go
@@ -252,13 +252,13 @@
 	URI         span.URI
 	File        *modfile.File
 	Mapper      *protocol.ColumnMapper
-	ParseErrors []Error
+	ParseErrors []*Error
 }
 
 // A TidiedModule contains the results of running `go mod tidy` on a module.
 type TidiedModule struct {
 	// Diagnostics representing changes made by `go mod tidy`.
-	Errors []Error
+	Errors []*Error
 	// The bytes of the go.mod file after it was tidied.
 	TidiedContent []byte
 }
@@ -532,10 +532,10 @@
 
 type ErrorList []*Error
 
-func (err *ErrorList) Error() string {
+func (err ErrorList) Error() string {
 	var b strings.Builder
 	b.WriteString("source error list:")
-	for _, e := range *err {
+	for _, e := range err {
 		b.WriteString(fmt.Sprintf("\n\t%s", e))
 	}
 	return b.String()
