From 6b4015f136873019cddfbaf596886a282478ad88 Mon Sep 17 00:00:00 2001 From: Jan Koutny Date: Sat, 18 Apr 2020 00:15:15 +0100 Subject: [PATCH 1/2] Parse bound type parameters in Kotlin lexer --- lib/rouge/lexers/kotlin.rb | 2 +- spec/visual/samples/kotlin | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rouge/lexers/kotlin.rb b/lib/rouge/lexers/kotlin.rb index 1ac63acb51..1c98775355 100644 --- a/lib/rouge/lexers/kotlin.rb +++ b/lib/rouge/lexers/kotlin.rb @@ -105,7 +105,7 @@ class Kotlin < RegexLexer state :generic_parameters do rule class_name, Name::Class rule %r'(<)', Punctuation, :generic_parameters - rule %r'(,)', Punctuation + rule %r'([,:])', Punctuation rule %r'(\s+)', Text rule %r'(>)', Punctuation, :pop! end diff --git a/spec/visual/samples/kotlin b/spec/visual/samples/kotlin index 15591bba55..6ae919fc0b 100644 --- a/spec/visual/samples/kotlin +++ b/spec/visual/samples/kotlin @@ -162,7 +162,7 @@ fun `String`.`backTickedExtensionFunction`() { return } -fun String.genericExtensionFunction() { +fun String.genericExtensionFunction() { return } From 4cc0d772bed0df5a6d6fbd857a6990fa3a344df6 Mon Sep 17 00:00:00 2001 From: Jan Koutny Date: Sat, 18 Apr 2020 00:21:44 +0100 Subject: [PATCH 2/2] Parse type parameter modifiers in Kotlin lexer Based on https://kotlinlang.org/docs/reference/grammar.html#typeParameterModifiers --- lib/rouge/lexers/kotlin.rb | 1 + spec/lexers/kotlin_spec.rb | 6 ++++++ spec/visual/samples/kotlin | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/lib/rouge/lexers/kotlin.rb b/lib/rouge/lexers/kotlin.rb index 1c98775355..d60d6efd24 100644 --- a/lib/rouge/lexers/kotlin.rb +++ b/lib/rouge/lexers/kotlin.rb @@ -105,6 +105,7 @@ class Kotlin < RegexLexer state :generic_parameters do rule class_name, Name::Class rule %r'(<)', Punctuation, :generic_parameters + rule %r'(reified|out|in)', Keyword rule %r'([,:])', Punctuation rule %r'(\s+)', Text rule %r'(>)', Punctuation, :pop! diff --git a/spec/lexers/kotlin_spec.rb b/spec/lexers/kotlin_spec.rb index d6429cb113..cd4156fae2 100644 --- a/spec/lexers/kotlin_spec.rb +++ b/spec/lexers/kotlin_spec.rb @@ -31,5 +31,11 @@ it 'recognizes label reference in break statement' do assert_tokens_equal 'break@label', ["Keyword", "break"], ["Name.Decorator", "@label"] end + + it 'recognizes type modifiers' do + for modifer in ['reified', 'out', 'in'] do + assert_tokens_equal "<#{modifer} T>", ["Punctuation", "<"], ["Keyword", modifer], ["Text", " "], ["Name.Class", "T"], ["Punctuation", ">"] + end + end end end diff --git a/spec/visual/samples/kotlin b/spec/visual/samples/kotlin index 6ae919fc0b..1ece9ae72d 100644 --- a/spec/visual/samples/kotlin +++ b/spec/visual/samples/kotlin @@ -166,6 +166,10 @@ fun String.genericExtensionFunction() { return } +inline fun membersOf() = T::class.members +public interface List : Collection {} +public interface Comparable {} + @Deprecated("This is an annotation") fun anAnnotatedFunction() = { }