Prism::Translation::RubyParser may fail to parse code containing multibyte characters

Abierto Apto para principiantes
#4,369 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
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
ruby
Área
backend

Línea de trabajo

Empieza por lib/prism/translation/ruby_parser.rb, especialmente por Compiler#attach_comments cerca de la llamada gap.match? indicada. Reproduce el fallo con las dos entradas de RubyParser.parse del issue y luego examina la lógica cercana para adjuntar comentarios y las pruebas existentes pertinentes. El trabajo estará terminado cuando el primer caso devuelva solo el texto del comentario y el segundo se analice sin lanzar una excepción.

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

Descripción

Prism::Translation::RubyParser may fail to parse code containing multibyte characters (e.g. CJK).

Reproduction

  • Ruby: 4.0.9
  • Prism: 05aa35a (same for v2.1.0)
require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'
  gem 'prism', github: 'ruby/prism', ref: '05aa35afebb26ee8c11f7fc393065d4f0ba0b6f2'
  gem 'sexp_processor'
end

# does not raise an error but parsed comments contain both multibyte chars and def
r = Prism::Translation::RubyParser.parse("# ああああああ\ndef x; end\n")
p r.comments #=> "# ああああああ\ndef x; end\n"

# raises NoMethodError
Prism::Translation::RubyParser.parse("# あああああああ\ndef x; end\n")

Result:

"# ああああああ\ndef x; end\n"
/path/to/prism-05aa35afebb2/lib/prism/translation/ruby_parser.rb:1580:in 'block in Prism::Translation::RubyParser::Compiler#attach_comments': undefined method 'match?' for nil (NoMethodError)

            if gap.match?(/\S/)
                  ^^^^^^^
        from /path/to/prism-05aa35afebb2/lib/prism/translation/ruby_parser.rb:1577:in 'Array#reverse_each'
        from /path/to/prism-05aa35afebb2/lib/prism/translation/ruby_parser.rb:1577:in 'Prism::Translation::RubyParser::Compiler#attach_comments'
        from /path/to/prism-05aa35afebb2/lib/prism/translation/ruby_parser.rb:544:in 'Prism::Translation::RubyParser::Compiler#visit_def_node'
(snip)

Expectation

  • In the first case, it returns "# ああああああ\n"
  • In the second case, no error raises
Lenguaje dominante
C
Estrellas
1k
Forks
202
Merge medio
5 h 55 min
PR fusionados (30 d)
85

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 ruby/prism

Todos los issues de ruby/prism

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.