Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix loading of config file with recent Rubies (Psych 4.0) #779

Closed

Conversation

cboos
Copy link

@cboos cboos commented Feb 17, 2023

Hello,

I've been using the bin/kramdown utility recently with Ruby 3.2, and I hit an error when I use the --config-file option.


Using Ruby 3.2, the following command would fail like this without the fix:

> bin\kramdown --config-file .kramdown.yml -i GFM -o html README.md
.../ruby-3.2-lean/lib/ruby/3.2.0/psych.rb:322:in `safe_load': wrong number of arguments (given 2, expected 1) (ArgumentError)
    from .../vendor/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown:114:in `<top (required)>'
    from .../bin/kramdown.cmd:30:in `load'
    from .../bin/kramdown.cmd:30:in `<main>'

The kramdown script still uses the legacy YAML.safe_load API, which has been removed in Psych version 4.0 (cf. ruby/psych@07672270 and ruby/psych#533). Here's a fix that works for me, tested with Ruby v2.4, v2.7, v3.0, and v3.2.

As for the fix, using the keyword argument directly instead of checking whether it is supported is also an option if you think there's no need to support Psych versions older than v3.1.0 (ruby/psych@682abf20). The comment in the commit should indeed have been # compatibility with Psych < 3.1.0.

Christian Boos added 2 commits February 17, 2023 19:15
Using Ruby 3.2, the following command would fail like this without the fix:

    > bin\kramdown --config-file .kramdown.yml -i GFM -o html README.md
    .../ruby-3.2-lean/lib/ruby/3.2.0/psych.rb:322:in `safe_load': wrong number of arguments (given 2, expected 1) (ArgumentError)
        from .../vendor/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown:114:in `<top (required)>'
        from .../bin/kramdown.cmd:30:in `load'
        from .../bin/kramdown.cmd:30:in `<main>'
The whole story is that Psych 4.0 removed the support for the
legacy API with positional arguments, but the permitted_classes
keyword argument was already supported since Psych 3.1.0.
@stanhu
Copy link
Contributor

stanhu commented Mar 13, 2023

I created #781 before I saw this. Ruby 2.4-2.6 are EOL, so perhaps we can just avoid the if statement?

@gettalong gettalong self-assigned this Mar 14, 2023
@gettalong gettalong added the bug label Mar 14, 2023
@gettalong
Copy link
Owner

@cboos Thanks for the pull request! I have rebased and squashed your changes, see 85c4370

@gettalong gettalong closed this Mar 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants