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

Aberta Para iniciantes
#4,369 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
74/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
ruby
Domínio
backend

Direção de pesquisa

Comece por lib/prism/translation/ruby_parser.rb, especialmente por Compiler#attach_comments perto da chamada gap.match? relatada. Reproduza a falha com as duas entradas de RubyParser.parse da issue e, em seguida, examine a lógica próxima de anexação de comentários e os testes existentes relevantes. O trabalho estará concluído quando o primeiro caso retornar apenas o texto do comentário e o segundo for analisado sem gerar uma exceção.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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
Linguagem predominante
C
Estrelas
1k
Forks
202
Merge médio
5h 55min
PRs com merge (30d)
85

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ruby/prism

Todas as issues de ruby/prism

Issues semelhantes

Mais issues de C

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.