From 06627bc1d8a2cef7dcc733628d37a92b27a96572 Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Wed, 3 Jul 2019 17:56:29 +0530 Subject: [PATCH 1/3] Fix highlighting of keyword `defined?` in Ruby --- lib/rouge/lexers/ruby.rb | 2 +- spec/visual/samples/ruby | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/rouge/lexers/ruby.rb b/lib/rouge/lexers/ruby.rb index e37561d4bc..9c65e255bf 100644 --- a/lib/rouge/lexers/ruby.rb +++ b/lib/rouge/lexers/ruby.rb @@ -183,7 +183,7 @@ def self.detect?(text) mixin :strings - rule %r/(?:#{keywords.join('|')})\b/, Keyword, :expr_start + rule %r/(?:#{keywords.join('|')})(?=[ ]*\b|\()/, Keyword, :expr_start rule %r/(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start rule %r( diff --git a/spec/visual/samples/ruby b/spec/visual/samples/ruby index ad4604aef9..2e6b59befd 100644 --- a/spec/visual/samples/ruby +++ b/spec/visual/samples/ruby @@ -49,6 +49,35 @@ a/ b #comment x.a / 1 # comment Foo::a / 3 + 4 +######## +# Keywords that may be immediately followed by an opening +# parenthesis +######## + +# defined? +return if defined? Rouge +return unless defined?(Foobar) + +# super +class Beta < Alpha + def gamma(msg) + super + @msg = msg + end +end + +class Bar < Foo + def log(msg) + super() + end +end + +class Ipsum < Lorem + def dolor(txt) + super(txt) + end +end + ######## # The popular . :bow: ######## From 45ebc1b75cdcea28beb538ee9d21ab8c8dd863d6 Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Thu, 4 Jul 2019 03:07:04 +0530 Subject: [PATCH 2/3] Add a new rule to match `defined?` keyword --- lib/rouge/lexers/ruby.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/rouge/lexers/ruby.rb b/lib/rouge/lexers/ruby.rb index 9c65e255bf..cde668c043 100644 --- a/lib/rouge/lexers/ruby.rb +++ b/lib/rouge/lexers/ruby.rb @@ -106,7 +106,7 @@ def self.detect?(text) end keywords = %w( - BEGIN END alias begin break case defined\? do else elsif end + BEGIN END alias begin break case do else elsif end ensure for if in next redo rescue raise retry return super then undef unless until when while yield ) @@ -183,7 +183,8 @@ def self.detect?(text) mixin :strings - rule %r/(?:#{keywords.join('|')})(?=[ ]*\b|\()/, Keyword, :expr_start + rule %r/(?:#{keywords.join('|')})\b/, Keyword, :expr_start + rule %r/(?:defined\?)(?=[ ]+|\()/, Keyword, :expr_start rule %r/(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start rule %r( From b586176275d5963063fceaba535f9f5b41014ea0 Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Mon, 8 Jul 2019 11:22:28 +0530 Subject: [PATCH 3/3] Use postive lookahead to detect `defined?` keyword --- lib/rouge/lexers/ruby.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/rouge/lexers/ruby.rb b/lib/rouge/lexers/ruby.rb index cde668c043..291fcb5696 100644 --- a/lib/rouge/lexers/ruby.rb +++ b/lib/rouge/lexers/ruby.rb @@ -106,7 +106,7 @@ def self.detect?(text) end keywords = %w( - BEGIN END alias begin break case do else elsif end + BEGIN END alias begin break case defined\? do else elsif end ensure for if in next redo rescue raise retry return super then undef unless until when while yield ) @@ -183,8 +183,7 @@ def self.detect?(text) mixin :strings - rule %r/(?:#{keywords.join('|')})\b/, Keyword, :expr_start - rule %r/(?:defined\?)(?=[ ]+|\()/, Keyword, :expr_start + rule %r/(?:#{keywords.join('|')})(?=\W|$)/, Keyword, :expr_start rule %r/(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start rule %r(