Skip to content

Ruby keyword syntax in HAML causes syntax_tree to crash #533

@Petercopter

Description

@Petercopter

syntax_tree via VSCode plugin 0.5.1
syntax_tree 6.3.0

I'm in VSCode, with format on save.

%input{checked:}/

I see this error when I save this HAML view file

Starting language server: bundle exec stree lsp
bundler: failed to load command: stree (/Users/peter/.rbenv/versions/3.4.5/bin/stree)
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/formatter.rb:121:in 'SyntaxTree::Formatter#format': undefined method 'comments' for nil (NoMethodError)

      if node.comments.any?
             ^^^^^^^^^
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/formatter.rb:110:in 'SyntaxTree::Formatter.format'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:498:in 'SyntaxTree::Haml::Format#format'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:490:in 'block in SyntaxTree::Haml::Format#parse_attributes_hash'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:470:in 'Array#to_h'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:470:in 'SyntaxTree::Haml::Format#parse_attributes_hash'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:464:in 'SyntaxTree::Haml::Format#parse_attributes'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:361:in 'SyntaxTree::Haml::Format#visit_tag'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:79:in 'Haml::Parser::ParseNode#accept'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:24:in 'SyntaxTree::Haml::Visitor#visit'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:131:in 'block in SyntaxTree::Haml::Format#visit_root'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:127:in 'Array#each'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:127:in 'SyntaxTree::Haml::Format#visit_root'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:73:in 'Haml::Parser::ParseNode#accept'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:88:in 'Haml::Parser::ParseNode#format'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:38:in 'SyntaxTree::Haml.format'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/language_server.rb:300:in 'SyntaxTree::LanguageServer#format'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/language_server.rb:265:in 'SyntaxTree::LanguageServer#run'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/cli.rb:649:in 'SyntaxTree::CLI.run'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/exe/stree:9:in '<top (required)>'
	from /Users/peter/.rbenv/versions/3.4.5/bin/stree:25:in 'Kernel#load'
	from /Users/peter/.rbenv/versions/3.4.5/bin/stree:25:in '<top (required)>'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli/exec.rb:59:in 'Kernel.load'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli/exec.rb:59:in 'Bundler::CLI::Exec#kernel_load'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli.rb:451:in 'Bundler::CLI#exec'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/vendor/thor/lib/thor.rb:538:in 'Bundler::Thor.dispatch'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/exe/bundle:28:in 'block in <top (required)>'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/lib/bundler/friendly_errors.rb:118:in 'Bundler.with_friendly_errors'
	from /Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/bundler-2.7.1/exe/bundle:20:in '<top (required)>'
	from /Users/peter/.rbenv/versions/3.4.5/bin/bundle:25:in 'Kernel#load'
	from /Users/peter/.rbenv/versions/3.4.5/bin/bundle:25:in '<main>'
[Info  - 10:08:26 AM] Connection to server got closed. Server will restart.

Running syntax_tree directly through the CLI results in this:

❯ stree format app/components/merge_response_checkbox_radio_button_component.html.haml
undefined method 'comments' for nil
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/formatter.rb:121:in 'SyntaxTree::Formatter#format'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/formatter.rb:110:in 'SyntaxTree::Formatter.format'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:498:in 'SyntaxTree::Haml::Format#format'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:490:in 'block in SyntaxTree::Haml::Format#parse_attributes_hash'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:470:in 'Array#to_h'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:470:in 'SyntaxTree::Haml::Format#parse_attributes_hash'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:464:in 'SyntaxTree::Haml::Format#parse_attributes'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:361:in 'SyntaxTree::Haml::Format#visit_tag'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:79:in 'Haml::Parser::ParseNode#accept'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:24:in 'SyntaxTree::Haml::Visitor#visit'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:131:in 'block in SyntaxTree::Haml::Format#visit_root'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:127:in 'Array#each'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml/format.rb:127:in 'SyntaxTree::Haml::Format#visit_root'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:73:in 'Haml::Parser::ParseNode#accept'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:88:in 'Haml::Parser::ParseNode#format'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-haml-4.0.3/lib/syntax_tree/haml.rb:38:in 'SyntaxTree::Haml.format'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/cli.rb:319:in 'SyntaxTree::CLI::Format#run'
/Users/peter/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/syntax_tree-6.3.0/lib/syntax_tree/cli.rb:726:in 'block (2 levels) in SyntaxTree::CLI.process_queue'

If I change it to

%input{checked: checked}/

It works as expected.

Thank you for syntax_tree! 👍

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions