Skip to content
  • Earlopain's avatar
    c49051ea
    [ruby/prism] Enforce a minimum `parser` version for the parser translator · c49051ea
    Earlopain authored
    There hasn't been much that would actually affect parsers usage of it.
    But, when adding new node types, these usually appear in the `Parser::Meta::NODE_TYPES`.
    
    `itblock` was added, gets emitted by prism, and then `rubocop-ast` blindly delegates to `on_itblock`.
    These methods are dynamically created through `NODE_TYPES`, which means that it will error if it
    doesn't contain `itblock`.
    
    This is unfortunate because in `rubocop-ast` these methods are eagerly defined but
    the prism translator is lazily loaded on demand.
    The simplest solution is to add them on the `parser` side (even if they are not emitted directly), and require that a version that contains those be used.
    
    In summary when adding a new node type:
    * Add it to `Parser::Meta::PRISM_TRANSLATION_PARSER_NODE_TYPES` (gets included in `NODE_TYPES`)
    * Bump the minimum `parser` version used by `prism` to a version that contains the above change
    * Actually emit that node type in `prism`
    
    https://github.com/ruby/prism/commit/d73783d065
    c49051ea
    [ruby/prism] Enforce a minimum `parser` version for the parser translator
    Earlopain authored
    There hasn't been much that would actually affect parsers usage of it.
    But, when adding new node types, these usually appear in the `Parser::Meta::NODE_TYPES`.
    
    `itblock` was added, gets emitted by prism, and then `rubocop-ast` blindly delegates to `on_itblock`.
    These methods are dynamically created through `NODE_TYPES`, which means that it will error if it
    doesn't contain `itblock`.
    
    This is unfortunate because in `rubocop-ast` these methods are eagerly defined but
    the prism translator is lazily loaded on demand.
    The simplest solution is to add them on the `parser` side (even if they are not emitted directly), and require that a version that contains those be used.
    
    In summary when adding a new node type:
    * Add it to `Parser::Meta::PRISM_TRANSLATION_PARSER_NODE_TYPES` (gets included in `NODE_TYPES`)
    * Bump the minimum `parser` version used by `prism` to a version that contains the above change
    * Actually emit that node type in `prism`
    
    https://github.com/ruby/prism/commit/d73783d065
Loading