Thanks to visit codestin.com
Credit goes to github.com

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