Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

unseen: stop reading files once every file is withheld

Cerrado Apto para principiantes
#127 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
86/100
Tipo de issue
Refactorización
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
go

Línea de trabajo

Empieza en internal/subject.go:375 y sigue cómo unseen procesa las entradas de directorio; después revisa ignore.go:177, rename.go:158 y surplus.go:228 para confirmar sus all checks. Se considera terminado cuando unseen deja de procesar una vez que all está establecido y usa la opción del parser descrita en el issue, sin cambiar el comportamiento de reader.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement

Summary

unseen (internal/subject.go:375) keeps reading and parsing files after it has set u.all = true. At that point the answer is already final. Every reader checks u.all first and ignores u.names.

Current shape

for _, e := range entries {
	...
	if strings.HasSuffix(e.Name(), "_test.go") {
		u.all = true
		continue // keeps going through the rest of the directory
	}
	if f, err = parser.ParseFile(fset, p, nil, 0); err != nil { // full parse
		u.all = true
		continue
	}
	ast.Inspect(f, func(n ast.Node) bool { // collects names nobody will read
		if id, ok := n.(*ast.Ident); ok {
			u.names[id.Name] = true
		}
		return true
	})
}

The readers:

Reader What it does with all
ignore.go:177 Returns when all is set
rename.go:158 Returns false when all is set
surplus.go:228 surplusSeesEveryFile Returns false when all is set, before it reads names

Why the change helps

In the ordinary variant of a package with tests, the directory holds _test.go files the pass does not see. The first one sets u.all. The loop then fully parses, and walks, every build-excluded file left in the directory. ignore.go:177 calls unseen under the default strict unused mode, so nearly every package pays for this.

for _, e := range entries {
	if u.all {
		break // the answer cannot change
	}
	...
	if f, err = parser.ParseFile(fset, p, nil, parser.SkipObjectResolution); err != nil {
		...
	}
}

parser.SkipObjectResolution skips building the deprecated ast.Object scopes. unseen only reads ident.Name, so it does not need them.

Risk

None, since every reader checks .all first.

Not measured yet.

Lenguaje dominante
Go
Estrellas
18
Forks
0
Merge medio
59 min
PR fusionados (30 d)
85

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de mpyw/declscope

Todos los issues de mpyw/declscope

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.