From 0284b388616bce4652279dd51657cb5299399aef Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 17 Oct 2023 13:02:53 -0400 Subject: [PATCH] Expose options on match last line nodes --- lib/prism/node_ext.rb | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 264d3a5c1e3..2ed3913fb48 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -3,6 +3,19 @@ # Here we are reopening the prism module to provide methods on nodes that aren't # templated and are meant as convenience methods. module Prism + module RegularExpressionOptions + # Returns a numeric value that represents the flags that were used to create + # the regular expression. + def options + o = flags & (RegularExpressionFlags::IGNORE_CASE | RegularExpressionFlags::EXTENDED | RegularExpressionFlags::MULTI_LINE) + o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8) + o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT) + o + end + end + + private_constant :RegularExpressionOptions + class FloatNode < Node # Returns the value of the node as a Ruby Float. def value @@ -24,15 +37,16 @@ def value end end + class InterpolatedMatchLastLineNode < Node + include RegularExpressionOptions + end + class InterpolatedRegularExpressionNode < Node - # Returns a numeric value that represents the flags that were used to create - # the regular expression. - def options - o = flags & (RegularExpressionFlags::IGNORE_CASE | RegularExpressionFlags::EXTENDED | RegularExpressionFlags::MULTI_LINE) - o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8) - o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT) - o - end + include RegularExpressionOptions + end + + class MatchLastLineNode < Node + include RegularExpressionOptions end class RationalNode < Node @@ -43,14 +57,7 @@ def value end class RegularExpressionNode < Node - # Returns a numeric value that represents the flags that were used to create - # the regular expression. - def options - o = flags & (RegularExpressionFlags::IGNORE_CASE | RegularExpressionFlags::EXTENDED | RegularExpressionFlags::MULTI_LINE) - o |= Regexp::FIXEDENCODING if flags.anybits?(RegularExpressionFlags::EUC_JP | RegularExpressionFlags::WINDOWS_31J | RegularExpressionFlags::UTF_8) - o |= Regexp::NOENCODING if flags.anybits?(RegularExpressionFlags::ASCII_8BIT) - o - end + include RegularExpressionOptions end class ConstantReadNode < Node