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

Expose local phase levels to rules

Abierto
#379 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Área
tooling

Línea de trabajo

Comienza investigando el hook actual del observador de expansión de Resyntax y el flujo de análisis del código fuente, centrándote en cómo se representan las visitas y cómo obtienen las reglas la información de fase. El issue sugiere exponer a las reglas un nivel de fase local; la finalización debería incluir la refactorización exitosa del ejemplo begin-for-syntax, preservando el comportamiento de la fase 0.

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

Descripción

enhancement

This rule:

(define-refactoring-rule redundant-or
  #:description "This `or` expression does nothing and can be replaced with its subexpression."
  #:literals (or)
  (or a1:id a2:id)
  #:when (free-identifier=? #'a1 #'a2)
  a1)

Fails to refactor this code:

(begin-for-syntax
  (define x 42)
  (or x x))

The reason for that is that free-identifier=? checks if two identifiers have the same binding at a specific phase level, and by default it uses (syntax-local-phase-level). This is reasonable for macros, which set (syntax-local-phase-level) to the level of the macro invocation. But refactoring rules aren't run during macro expansion, so (syntax-local-phase-level) always returns zero. This lets free-identifier=? in rules work fine on phase 0 code, but it fails on phase 1 code such as code inside begin-for-syntax.

Resyntax ought to expose the local phase level to rules. I'm not sure how to get that information out of the expander using the current expansion observer hook, but it's probably possible. One way to expose it to rules might be to add a (resyntax-local-phase-level) parameter and let rules use that to access the phase level. On the Resyntax source analysis side, there could be an expansion-visit struct / record type containing the syntax object that the expander visited and the phase level the visit occurred at.

Lenguaje dominante
Racket
Estrellas
70
Forks
11
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

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 jackfirth/resyntax

Todos los issues de jackfirth/resyntax

Issues similares

Más issues de DevTools

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.