Skip to content

Named captures not supported in StringScanner on Ruby < 2.1 #557

Description

@tomeon

Support for named captures in StringScanner was introduced in Ruby 2.1 on 2013-05-21; see the changelog entry.

There are several locations in which Kramdown::Utils::StringScanner#[] is invoked using a non-integer argument -- for example, line 48 of kramdown/parser/kramdown/header.rb. On Ruby 2.0.0, this can lead to errors like:

TypeError: no implicit conversion of String into Integer
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown/header.rb:48:in `[]'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown/header.rb:48:in `parse_header_contents'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown/header.rb:34:in `parse_atx_header'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:148:in `block (2 levels) in parse_blocks'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:146:in `each'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:146:in `any?'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:146:in `block in parse_blocks'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:144:in `catch'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:144:in `parse_blocks'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/kramdown.rb:89:in `parse'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/parser/base.rb:69:in `parse'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-1.17.0/lib/kramdown/document.rb:104:in `initialize'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-man-0.1.6/lib/kramdown/man/task.rb:62:in `new'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-man-0.1.6/lib/kramdown/man/task.rb:62:in `render'
/rbexec/vendor/bundle/ruby/2.0.0/gems/kramdown-man-0.1.6/lib/kramdown/man/task.rb:47:in `block (2 levels) in define'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli/exec.rb:74:in `load'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli/exec.rb:74:in `kernel_load'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli/exec.rb:28:in `run'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli.rb:424:in `exec'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli.rb:27:in `dispatch'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/cli.rb:18:in `start'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/exe/bundle:30:in `block in <top (required)>'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/gems/bundler-1.16.3/exe/bundle:22:in `<top (required)>'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/bin/bundle:23:in `load'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/bin/bundle:23:in `<main>'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/bin/ruby_executable_hooks:24:in `eval'
/home/travis/.rvm/gems/ruby-2.0.0-p648@global/bin/ruby_executable_hooks:24:in `<main>'

I believe that the simplest solution would be to deprecate support for Ruby < 2.1 via setting s.required_ruby_version = '>= 2.1' in the Rakefile, and I'd be happy to submit a PR introducing this change. I would also be happy to investigate a 2.0-compatible solution if dropping support for Ruby < 2.1 is not acceptable at this time.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions