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

Optimize tight/loose list parsing (new algorithm from commonmark-java)

Abierto
#151 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
javascript
Área
tooling

Línea de trabajo

Comienza leyendo el commit vinculado de commonmark-java y localiza los métodos del parser de list-item y list-block mencionados en el issue: continue y canContain. Rastrea cómo las líneas en blanco afectan actualmente a tightness y, a continuación, compara el seguimiento de estado propuesto con la implementación existente. Ejecuta las pruebas de la especificación de CommonMark y confirma que el comportamiento de tightness de las listas no cambia, mientras que el rendimiento mejora.

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

Descripción

Hey! The commonmark-java implementation was using the same algorithm as commonmark.js and cmark for determining whether a list is tight or loose. I recently re-implemented it because it showed up in a profiling session.

The results for the new algorithm are pretty good: a 10% performance improvement! See details here: https://github.com/atlassian/commonmark-java/commit/cfd28faa221056a1a28ce402ed8a278afe9e527d

I'm opening this issue because you might be interested in porting it back to the reference implementations :). I don't know if the improvement will be as significant, but it's worth a try.

It works like this (but see the commit above for details):

  • In the parser for list items:
    • in continue, remember when there was a blank line (except when a code block is being parsed)
    • in canContain (which is called when a new child will be added), set tight to false if we saw a blank line before
  • In the parser for list blocks:
    • in continue, remember when we had a blank line (and how many lines back it was)
    • in canContain, set tight to false if the previous line was blank

(The new algorithm also feels simpler, hopefully there's no holes in it. It passes all the spec tests and some extra ones.)

Lenguaje dominante
JavaScript
Estrellas
1.6k
Forks
231
Merge medio
2 d 17 h
PR fusionados (30 d)
2

Preparar el entorno

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 commonmark/commonmark.js

Todos los issues de commonmark/commonmark.js

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.